一個IoT網(wǎng)關(guān)產(chǎn)品的架構(gòu)設(shè)計

這個產(chǎn)品是職業(yè)開始時候做的杭攻。當(dāng)時沒有IoT和云計算的概念棍弄,所以當(dāng)時就是叫做透明傳輸終端檬嘀,遠(yuǎn)沒有現(xiàn)在的IoT網(wǎng)關(guān)這么‘高大上’和‘時髦’。

應(yīng)用場景


首先介紹use case握侧。用戶是做工業(yè)系統(tǒng)監(jiān)控的蚯瞧,產(chǎn)品主要是SCADA的場景。當(dāng)時參與國家的重大的天然氣項目的管道系統(tǒng)監(jiān)控部分藕咏。要監(jiān)控幾十状知,幾百,甚至上千公里長的燃?xì)夤艿赖倪\行情況孽查,沒有網(wǎng)絡(luò)是做不到的饥悴。所以,當(dāng)時的想法就是沿著管道線路鋪設(shè)一條電信的數(shù)據(jù)專線用于數(shù)據(jù)傳輸盲再。每隔一段距離把管道的數(shù)據(jù)收集并且上傳到管理中心西设,并且通過管理中心對相應(yīng)的管道單元實施遠(yuǎn)程控制。

在2000年前后答朋,一條64kbps的線路可是不便宜贷揽!況且天然氣管道往往遠(yuǎn)離人口密集/經(jīng)濟(jì)發(fā)達(dá)區(qū)域,盡量選擇偏僻的地段梦碗。這樣的地方基礎(chǔ)設(shè)施差禽绪,鋪設(shè)專線的價格更是不菲。

因此洪规,客戶當(dāng)時考慮把作為備用通信通道的無線網(wǎng)絡(luò)“轉(zhuǎn)正”印屁,也就是利用廣域無線網(wǎng)絡(luò)提供數(shù)據(jù)通信支持。當(dāng)時的無線通信網(wǎng)絡(luò)就是GSM網(wǎng)絡(luò)的GPRS和CDMA 2000斩例。

用戶于是調(diào)研并試用了國內(nèi)的無線傳輸終端雄人,結(jié)果效果很不好。典型的問題就是網(wǎng)絡(luò)連接的可靠性(reliability)問題念赶,經(jīng)常是連接建立幾十分鐘之后就再也收不到數(shù)據(jù)了础钠,必須把傳輸終端重啟(騎著摩托車開幾十公里),之后再能工作幾十分鐘叉谜。這個問題的原因和當(dāng)時GPRS的網(wǎng)絡(luò)速度和可靠性都有關(guān)系旗吁。

所以用戶找到我們首先提出來的就是連接的可靠性問題,用戶也知道無線網(wǎng)絡(luò)連接的穩(wěn)定性不好停局,因此說可以掉線阵漏,但是掉線之后要盡快恢復(fù)連接驻民,以保證業(yè)務(wù)的可用性(availability)。

所以履怯,總結(jié)下來就是,以廣域無線網(wǎng)絡(luò)把SCADA系統(tǒng)和遠(yuǎn)端的控制中心連接起來裆泳,實現(xiàn)雙向的數(shù)據(jù)通信叹洲。

該網(wǎng)關(guān)的下行接口是串口,連接SCADA設(shè)備工禾,上行端口是TCP/IP运提,通過運營商的數(shù)據(jù)網(wǎng)絡(luò)連接到控制中心。

所以這就是一個典型的IoT網(wǎng)關(guān)加私有云的應(yīng)用闻葵。

具體可參考下圖(源自網(wǎng)絡(luò))民泵。下圖的云服務(wù)器在當(dāng)時的環(huán)境里就是用戶的管理控制中心,APP遠(yuǎn)程監(jiān)控就是運行在服務(wù)器上的監(jiān)控軟件槽畔。

產(chǎn)品選型


該產(chǎn)品要求具有PPP/TCP/IP的支持栈妆,所以一般單片機(jī)是不行的。

PPP的撥號功能來自單獨的模塊厢钧,需要外購鳞尔,它與網(wǎng)關(guān)的控制單元之間是通過RS232接口連接,就像當(dāng)時PC上網(wǎng)一樣早直,串口加一個撥號的modem寥假。

還有一個串口需要接下行的SCADA設(shè)備。

另外還需要一個設(shè)備管理接口霞扬,用于本地管理配置該網(wǎng)關(guān)糕韧。

概括下來,這個網(wǎng)關(guān)的控制單元需要比較多的IO喻圃,而且軟件要支持PPP/TCP/IP萤彩。最后選了一個基于Z80的MCU,其軟件棧支持PPP/TCP/IP级及。

當(dāng)然乒疏,為了支持GPRS和CDMA2000,無線模塊的選型也有技巧饮焦。那就是選擇同一個廠家的模塊怕吴,可以做到pin-pin兼容,這樣的好處是生產(chǎn)和庫房只要維護(hù)一個BOM就可以了县踢,這樣減少了生產(chǎn)和庫房的維護(hù)成本转绷,降低了出錯率。但是軟件增加了復(fù)雜性硼啤,需要自動識別和配置不通的模塊和軟件议经。

操作系統(tǒng)不是必需。

架構(gòu)設(shè)計


架構(gòu)設(shè)計上,因為是MCU的系統(tǒng)煞肾,512KB FLASH ROM咧织,存放系統(tǒng)軟件和配置參數(shù),512KB SRAM作為系統(tǒng)內(nèi)存籍救。

沒有使用操作系統(tǒng)习绢,而是采用狀態(tài)機(jī)(FSM)作為程序運行的主流程。

根據(jù)系統(tǒng)運行的階段蝙昙,定義不同的狀態(tài)闪萄,根據(jù)事件驅(qū)動狀態(tài)的變化。例如奇颠,modem配置->PPP撥號->IP軟件棧初始化->TCP連接請求->TCP連接建立->數(shù)據(jù)收發(fā)(連接狀態(tài)檢查)败去。

與遠(yuǎn)程管理中心的連接使用TCP協(xié)議,而不是UDP協(xié)議(為什么烈拒?)

上行數(shù)據(jù)和下行數(shù)據(jù)使用不同環(huán)形隊列圆裕,不同的TCP連接使用不同的上行隊列。因為是8bit的MCU嵌入式系統(tǒng)缺菌,系統(tǒng)內(nèi)存最大512KB葫辐,因此在預(yù)留了一部分內(nèi)存作為管理功能用以外,其余內(nèi)存基本都留給了數(shù)據(jù)緩沖區(qū)使用伴郁。

網(wǎng)絡(luò)連接可靠性(reliability)耿战,依靠TCP keepalive功能,并根據(jù)用戶配置設(shè)置其間隔(實時性和流量焊傅,性能和成本)剂陡。

網(wǎng)絡(luò)連接的可用性(availability),即網(wǎng)絡(luò)斷開之后恢復(fù)狐胎。從開銷最小的層次開始恢復(fù)鸭栖,逐級向下。即從TCP socket重建連接開始握巢,到IP協(xié)議棧的reset晕鹊,最后直到設(shè)備reset。就是說如果檢測到數(shù)據(jù)連接丟失暴浦,那么會從最高的應(yīng)用層開始恢復(fù)溅话,逐級向下,直到系統(tǒng)級的恢復(fù)歌焦。

網(wǎng)關(guān)設(shè)備的管理飞几。支持通過RS232接口的本地管理。如前所述独撇,僅有本地管理是不夠的屑墨,因為這些設(shè)備都是間隔幾十公里躁锁,而且在人跡罕及的地區(qū),單靠本地配置管理是不行的卵史。

因此通過TCP/IP建立管理連接战转,實現(xiàn)遠(yuǎn)程管理功能。

附加功能(與同類產(chǎn)品的差異)是支持系統(tǒng)軟件的在線升級程腹。針對這個典型的MCU的嵌入式系統(tǒng)的軟件升級有幾種方式匣吊,第一種是通過TCP的管理連接進(jìn)行軟件下載并升級。第二種是支持通過本地的串口進(jìn)行升級寸潦。這兩種是可以做到業(yè)務(wù)在線的情況下進(jìn)行升級。第三種方式是在系統(tǒng)軟件無法啟動(brick了/磚了)的情況下社痛,采用類似JTAG燒寫FLASH的模式重新刷寫系統(tǒng)軟件见转。這個需要運維人員到現(xiàn)場連接設(shè)備特定接口進(jìn)行升級。

架構(gòu)對比


與當(dāng)時市場的其他同類商品對比下來的特點有如下幾點蒜哀。

系統(tǒng)的連接可靠性/可用性(實時性)最好斩箫。

系統(tǒng)的應(yīng)用范圍比較廣泛,不僅僅適用于天然氣一個應(yīng)用場景撵儿。

支持兩種運營商網(wǎng)絡(luò)GPRS或CDMA2000乘客,軟件自適應(yīng)。

設(shè)備管理功能豐富淀歇,支持本地和遠(yuǎn)程管理易核,支持軟件在線升級。

支持多個管理控制中心浪默,類似目前云計算的2地三中心牡直,最多支持3個管理控制連接。

系統(tǒng)功能可配置性纳决,提供配置機(jī)制給用戶碰逸,由用戶根據(jù)自己的應(yīng)用場景和成本預(yù)算達(dá)成適合其自身的SLA(網(wǎng)絡(luò)可靠性/可用性)。

產(chǎn)品亮點


上面說了架構(gòu)和產(chǎn)品特點阔加。這里說的是亮點饵史。

最大亮點在于在線升級。這是一個8bit的MCU嵌入式系統(tǒng)胜榔,通常軟件都是運行在FLASH ROM (RIP)胳喷,數(shù)據(jù)存放在RAM當(dāng)中。但是這個產(chǎn)品采用了全球首創(chuàng)的方式苗分,在沒有鏈接器(linker)來指定image layout的情況厌蔽,在硬件不支持internal RAM的情況下,巧妙地采用了一種通用的方法實現(xiàn)了把代碼和數(shù)據(jù)都放到RAM當(dāng)中的實現(xiàn)摔癣,大大提高了運行的性能奴饮。

比較遺憾纬向,當(dāng)時沒有發(fā)專利。

其實方法很簡單戴卜,但是當(dāng)時搞了4個星期逾条。有些人得知了設(shè)計思路之后會很不屑地一笑然后來一句“哦,原來這么簡單”投剥。這是典型的“站著說話不腰疼”师脂,而且暴露了那一絲絲“羨慕嫉妒恨”。

好了扯遠(yuǎn)了江锨。

另一個亮點是采用了同一家的無線模塊吃警,所以做到了pin-pin兼容∽挠看似不重要酌心,其實對于生產(chǎn)部門的料單管理和庫房管理非常重要,這大大節(jié)省了他們的維護(hù)成本和出錯概率

第三個亮點是產(chǎn)品的管理維護(hù)挑豌,包括軟件升級的三種方式安券,都是盡量保證在遠(yuǎn)距離的可靠性一般的廣域網(wǎng)絡(luò)環(huán)境下能方便地管理設(shè)備,并且在出現(xiàn)系統(tǒng)軟件崩潰的情況下氓英,運維工程師一根線侯勉,一個軟件工具,一個.rom文件就可以現(xiàn)場恢復(fù)铝阐,無須返廠維修址貌。這節(jié)約了用戶的時間,節(jié)省了工廠的運維成本饰迹。

所以芳誓,研發(fā)不是只要設(shè)計出產(chǎn)品就行,還要考慮生產(chǎn)是否簡單高效啊鸭,是否易于售后維護(hù)锹淌。要做“系統(tǒng)”工程師,要考慮產(chǎn)品的“全生命期”赠制。

實際運行情況回顧


總體來說運行反饋良好赂摆,也拓展了其他領(lǐng)域,例如能源方面钟些。

運行大約4個月烟号,險險出了一個大事故。當(dāng)年春節(jié)政恍,一個在市區(qū)外70公里處的燃?xì)忾y門故障汪拥,導(dǎo)致高壓燃?xì)庵苯油{下游的幾萬戶居民。運維中心在發(fā)現(xiàn)故障之后篙耗,立即啟動關(guān)閉閥門操作迫筑,同時疏散當(dāng)?shù)鼐用裣芨稀陌l(fā)現(xiàn)故障到關(guān)閉故障閥門一共不到2分鐘,也就是說一個環(huán)回的時間不到2分鐘脯燃。甲方得到了當(dāng)?shù)卣穆≈乇碚寐蓿⑹盏疆?dāng)?shù)卣拖嚓P(guān)部門的表揚信。為了感謝我們提供的IoT網(wǎng)關(guān)在這次故障處理當(dāng)中的優(yōu)異表現(xiàn)辕棚,甲方特地表達(dá)了對我們的感謝欲主。

寫在最后


這個產(chǎn)品是公司里面獨一無二的數(shù)據(jù)通信類產(chǎn)品,而且從談需求到交付一共用了3個月逝嚎。參與的人其實就是我一個人扁瓢,從原理圖,到外觀布局补君,到軟件涤妒,到說明書,都是一個人來赚哗。另一個同事幫我做了windows上面的管理軟件。參與了整個產(chǎn)品的立項硅堆,聯(lián)調(diào)屿储,售前,到售后的全部階段渐逃。

所以够掠,雖然過去了很多年,這里面的很多細(xì)節(jié)茄菊,特別是那些特點仍然記憶猶新疯潭。

說到這里,其實還是有一個小小的遺憾面殖。竖哩。。脊僚。相叁。。

你懂的辽幌。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末增淹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子乌企,更是在濱河造成了極大的恐慌虑润,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件加酵,死亡現(xiàn)場離奇詭異拳喻,居然都是意外死亡哭当,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門舞蔽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荣病,“玉大人,你說我怎么就攤上這事渗柿「雠瑁” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵朵栖,是天一觀的道長颊亮。 經(jīng)常有香客問我,道長陨溅,這世上最難降的妖魔是什么终惑? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮门扇,結(jié)果婚禮上雹有,老公的妹妹穿的比我還像新娘。我一直安慰自己臼寄,他們只是感情好霸奕,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吉拳,像睡著了一般质帅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上留攒,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天煤惩,我揣著相機(jī)與錄音,去河邊找鬼炼邀。 笑死魄揉,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的汤善。 我是一名探鬼主播什猖,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼红淡!你這毒婦竟也來了不狮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤在旱,失蹤者是張志新(化名)和其女友劉穎摇零,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桶蝎,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡驻仅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年谅畅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片噪服。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡毡泻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出粘优,到底是詐尸還是另有隱情仇味,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布雹顺,位于F島的核電站丹墨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嬉愧。R本人自食惡果不足惜贩挣,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望没酣。 院中可真熱鬧王财,春花似錦、人聲如沸裕便。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闪金。三九已至,卻和暖如春论颅,著一層夾襖步出監(jiān)牢的瞬間哎垦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工恃疯, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留漏设,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓今妄,卻偏偏與公主長得像郑口,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子盾鳞,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351