網(wǎng)網(wǎng)關(guān)MS-HUB-M:協(xié)議融合與邊緣自治的設(shè)備接入方案)
做了快十年的物聯(lián)網(wǎng)網(wǎng)關(guān)和邊緣設(shè)備接入說實(shí)話我早就發(fā)現(xiàn)一個(gè)規(guī)律大部分項(xiàng)目的時(shí)間不是花在功能開發(fā)上而是耗在設(shè)備協(xié)議對(duì)接、現(xiàn)場(chǎng)調(diào)試和重復(fù)造輪子上面。今天要聊的這套東西——MS-HUB-M就是針對(duì)這些痛點(diǎn)做出來的一套模塊化智能集線設(shè)備。當(dāng)初我們內(nèi)部立項(xiàng)的時(shí)候主要目標(biāo)很明確把接不同的設(shè)備、轉(zhuǎn)不同的協(xié)議、適配不同的現(xiàn)場(chǎng)這件事標(biāo)準(zhǔn)化讓項(xiàng)目交付時(shí)不再需要每個(gè)現(xiàn)場(chǎng)都臨時(shí)寫幾百行定制代碼。這套設(shè)備最大的特點(diǎn)就是模塊化插槽結(jié)構(gòu)支持多種工業(yè)協(xié)議接入帶邊緣規(guī)則引擎和斷網(wǎng)補(bǔ)傳能力。如果你正在折騰設(shè)備數(shù)據(jù)采集、車間聯(lián)網(wǎng)、或是在多個(gè)項(xiàng)目之間反復(fù)做相同集成工作這篇文章應(yīng)該能幫你理清思路也能明白為什么我們最終放棄通用方案、選擇自己攢一套這樣的東西。1. 為什么會(huì)有MS-HUB-M被設(shè)備接入逼出來的自研方案1.1 項(xiàng)目現(xiàn)場(chǎng)最常見的麻煩設(shè)備五花八門協(xié)議各說各話在做過的若干個(gè)數(shù)據(jù)采集類項(xiàng)目里我遇到最多的場(chǎng)景是這樣的甲方車間里同時(shí)有PLC、電表、溫控器、變頻器來自好幾個(gè)不同品牌通訊接口有的是RS485、有的是以太網(wǎng)、個(gè)別老設(shè)備甚至還在用開關(guān)量。要把這些數(shù)據(jù)統(tǒng)一送到監(jiān)控平臺(tái)傳統(tǒng)的做法是給每一類設(shè)備單獨(dú)配一個(gè)協(xié)議轉(zhuǎn)換器或者在服務(wù)器上寫一堆采集程序。這種做法不是說不能用而是每個(gè)項(xiàng)目都要重新來一遍。設(shè)備點(diǎn)位表不一樣通訊參數(shù)不一樣報(bào)文的解析邏輯不一樣甚至連現(xiàn)場(chǎng)布線方式都不同。項(xiàng)目少的時(shí)候還好項(xiàng)目一多團(tuán)隊(duì)里的大部分人就被困在改協(xié)議、調(diào)參數(shù)、跑現(xiàn)場(chǎng)里面。MS-HUB-M的立項(xiàng)起點(diǎn)就是這么樸素我們想做一個(gè)設(shè)備它能插不同的通訊模塊現(xiàn)場(chǎng)需要接什么類型的設(shè)備就插什么模塊然后在同一個(gè)配置界面里把點(diǎn)位映射好剩下的解析、采集、轉(zhuǎn)發(fā)、緩存全部交給設(shè)備自己完成。這樣既不用動(dòng)現(xiàn)場(chǎng)原有設(shè)備也不用給每個(gè)項(xiàng)目單獨(dú)寫采集服務(wù)。1.2 名字里的含義決定了設(shè)計(jì)目標(biāo)MS-HUB-M這個(gè)名字拆開來看其實(shí)就對(duì)應(yīng)了三層設(shè)計(jì)意圖理解了這三層后面看功能和參數(shù)就不會(huì)覺得亂。MSModular System模塊化系統(tǒng)整機(jī)采用插槽式模塊結(jié)構(gòu)通訊模塊、控制模塊、電源模塊互相獨(dú)立按需組合。這是整套設(shè)備的物理骨架也是它能適應(yīng)不同現(xiàn)場(chǎng)的根本原因。HUB集線交換核心設(shè)備在系統(tǒng)中扮演的是一個(gè)匯聚節(jié)點(diǎn)向下連接各類終端設(shè)備向上對(duì)接云平臺(tái)或本地服務(wù)器。所有數(shù)據(jù)經(jīng)過這里進(jìn)行協(xié)議轉(zhuǎn)換、格式規(guī)整和分發(fā)。MManagement Maintenance管理與維護(hù)強(qiáng)調(diào)遠(yuǎn)程可管理性。設(shè)備本身要有完善的配置管理、狀態(tài)監(jiān)控、遠(yuǎn)程升級(jí)能力不能裝到現(xiàn)場(chǎng)之后就變成黑盒。所以從整體來看MS-HUB-M不是單純的一臺(tái)網(wǎng)關(guān)而是一套帶管理能力的模塊化接入平臺(tái)。它解決的問題可以概括成一句話讓不同的設(shè)備、協(xié)議、數(shù)據(jù)格式在同一個(gè)物理節(jié)點(diǎn)上完成標(biāo)準(zhǔn)化接入并且這個(gè)接入過程可以被重復(fù)、被復(fù)制、被遠(yuǎn)程維護(hù)。1.3 適合誰用什么場(chǎng)景最匹配根據(jù)我們實(shí)際落地的情況這套設(shè)備主要在下面這幾類場(chǎng)景里最出效果中小規(guī)模的車間設(shè)備聯(lián)網(wǎng)幾十臺(tái)設(shè)備以內(nèi)以PLC和智能儀表為主需要統(tǒng)一采集并上報(bào)MES或云端系統(tǒng)。樓宇/園區(qū)子系統(tǒng)的數(shù)據(jù)整合把水電表、空調(diào)機(jī)組、環(huán)境傳感器等不同子系統(tǒng)數(shù)據(jù)匯聚到統(tǒng)一平臺(tái)。遠(yuǎn)程站點(diǎn)監(jiān)控站點(diǎn)分散、現(xiàn)場(chǎng)無法長期駐人設(shè)備需要具備斷網(wǎng)緩存、遠(yuǎn)程配置、自動(dòng)恢復(fù)的能力。設(shè)備廠商做遠(yuǎn)程運(yùn)維在出廠的設(shè)備里預(yù)埋一個(gè)數(shù)據(jù)采集節(jié)點(diǎn)客戶現(xiàn)場(chǎng)無需額外部署工控機(jī)。反過來也要說實(shí)話如果你只是接一兩臺(tái)設(shè)備、數(shù)據(jù)量不大那用串口服務(wù)器加電腦跑個(gè)腳本就夠了沒必要上這種規(guī)模的設(shè)備。MS-HUB-M的定位是在協(xié)議雜、點(diǎn)位多、現(xiàn)場(chǎng)條件一般、需要穩(wěn)定長期運(yùn)行的場(chǎng)景里它才是真正的省事工具。2. 核心特點(diǎn)深挖模塊化、協(xié)議融合、邊緣自治三大支柱2.1 模塊化插槽與熱插拔不需要斷電就能換通訊口物理結(jié)構(gòu)上MS-HUB-M采用了插槽式背板設(shè)計(jì)。整機(jī)通常會(huì)有幾個(gè)擴(kuò)展槽位每個(gè)槽位可以插入不同的通訊模塊比如四路RS485模塊、兩路CAN模塊、百兆以太網(wǎng)模塊、4G/5G無線模塊、LoRa模塊等。背板通過內(nèi)部總線將各個(gè)模塊和主控板連接在一起主控板負(fù)責(zé)數(shù)據(jù)的統(tǒng)一處理。這里值得展開說一下的是熱插拔的實(shí)現(xiàn)邏輯。工業(yè)設(shè)備在運(yùn)行中直接拔插模塊是有風(fēng)險(xiǎn)的主要是供電浪涌和信號(hào)毛刺可能損壞其他正在工作的模塊。MS-HUB-M在每個(gè)槽位的供電引腳上做了緩啟動(dòng)處理模塊插入時(shí)先通過限流電阻給模塊的濾波電容充電等到電壓穩(wěn)定后再接通全功率供電。同時(shí)在軟件層面背板總線控制器會(huì)周期性掃描槽位狀態(tài)新模塊插入后會(huì)在幾個(gè)毫秒內(nèi)被識(shí)別出來驅(qū)動(dòng)加載完成后對(duì)應(yīng)的通訊端口就自動(dòng)出現(xiàn)在配置界面里。實(shí)際體驗(yàn)就是現(xiàn)場(chǎng)要新增一類設(shè)備時(shí)不需要停機(jī)直接把對(duì)應(yīng)模塊插進(jìn)空槽位然后在管理界面里添加一個(gè)端口配置就能開始采集。這個(gè)能力在連續(xù)生產(chǎn)的現(xiàn)場(chǎng)非常重要因?yàn)楹芏喈a(chǎn)線根本沒有安排停機(jī)時(shí)間窗。2.2 協(xié)議解析能力把方言翻譯成普通話協(xié)議轉(zhuǎn)換是這種設(shè)備的核心本職工作。MS-HUB-M內(nèi)置的協(xié)議引擎按照基礎(chǔ)協(xié)議??杉虞d解析插件的方式設(shè)計(jì)。出廠時(shí)預(yù)置了常用的一批包括Modbus RTU/TCP、DL/T645電表協(xié)議、OPC UA客戶端、MQTT、HTTP上報(bào)等如果需要接自定義協(xié)議則可以基于我們提供的SDK寫一個(gè)解析插件通過遠(yuǎn)程升級(jí)方式部署到設(shè)備上。這里我想強(qiáng)調(diào)一個(gè)容易被忽視的點(diǎn)協(xié)議轉(zhuǎn)換不是一個(gè)簡單的字符串替換它牽涉到數(shù)據(jù)模型的映射。比如說Modbus的保持寄存器是16位無符號(hào)整型為主的存儲(chǔ)結(jié)構(gòu)而OPC UA的信息模型是基于節(jié)點(diǎn)和屬性的兩種模型不是天然對(duì)齊的。在MS-HUB-M里我們引入了一個(gè)點(diǎn)位映射表的概念。配置人員在界面里為每臺(tái)終端設(shè)備建立點(diǎn)位每個(gè)點(diǎn)位指定數(shù)據(jù)地址、數(shù)據(jù)類型、字節(jié)序、縮放系數(shù)然后把這個(gè)點(diǎn)位綁定到一個(gè)標(biāo)準(zhǔn)化的標(biāo)簽名稱上。上行到平臺(tái)時(shí)統(tǒng)一按標(biāo)簽名數(shù)值時(shí)間戳的結(jié)構(gòu)推送。這樣平臺(tái)端永遠(yuǎn)看到的是規(guī)整的數(shù)據(jù)不需要關(guān)心底層那臺(tái)設(shè)備是Modbus還是DL/T645。以一個(gè)大項(xiàng)目為例某供水管網(wǎng)項(xiàng)目里現(xiàn)場(chǎng)有36臺(tái)流量計(jì)其中一半走M(jìn)odbus RTU另一半走自定義串口協(xié)議。我們?cè)诜?wù)器上做上報(bào)接口時(shí)只認(rèn)標(biāo)簽名采集層的變化完全隔離在了MS-HUB-M內(nèi)部。之后流量計(jì)品牌調(diào)整或者通訊協(xié)議變更平臺(tái)端代碼一個(gè)字節(jié)都不用改。2.3 邊緣規(guī)則引擎與斷網(wǎng)補(bǔ)傳不依賴網(wǎng)絡(luò)的自治能力工業(yè)現(xiàn)場(chǎng)的網(wǎng)絡(luò)質(zhì)量通常沒有辦公室那么好。專線斷個(gè)幾分鐘、4G信號(hào)偶爾丟包都是常態(tài)。如果我們把所有數(shù)據(jù)都實(shí)時(shí)往云端推那么網(wǎng)絡(luò)抖動(dòng)的那幾分鐘就必然丟數(shù)據(jù)這是平臺(tái)端再怎么優(yōu)化也解決不了的問題。MS-HUB-M的處理方式是本地緩存加斷網(wǎng)補(bǔ)傳。設(shè)備內(nèi)置了一塊工業(yè)級(jí)固態(tài)存儲(chǔ)專門用于數(shù)據(jù)暫存。正常通信時(shí)數(shù)據(jù)實(shí)時(shí)轉(zhuǎn)發(fā)到上行通道一旦檢測(cè)到網(wǎng)絡(luò)中斷數(shù)據(jù)會(huì)按秒級(jí)時(shí)間戳寫入本地緩存不丟棄、不合并保持原始精度。網(wǎng)絡(luò)恢復(fù)后設(shè)備按照緩存順序自動(dòng)補(bǔ)傳補(bǔ)傳完成再繼續(xù)傳實(shí)時(shí)數(shù)據(jù)。與此同時(shí)規(guī)則引擎在本地運(yùn)行能在數(shù)據(jù)進(jìn)入網(wǎng)絡(luò)之前就完成一輪判斷。比如設(shè)定某個(gè)溫度點(diǎn)位超過75℃就輸出一個(gè)告警事件或者當(dāng)兩個(gè)條件同時(shí)滿足時(shí)觸發(fā)一路DO輸出。這樣做的好處是反應(yīng)快不依賴云端處理鏈路。在某個(gè)冷庫監(jiān)控項(xiàng)目里現(xiàn)場(chǎng)的網(wǎng)絡(luò)曾經(jīng)中斷過8個(gè)小時(shí)設(shè)備本地緩存了幾十萬條溫度數(shù)據(jù)網(wǎng)絡(luò)恢復(fù)后用了大概十幾分鐘就全部補(bǔ)傳完成監(jiān)控平臺(tái)的數(shù)據(jù)曲線沒有任何缺口。這種即便斷網(wǎng)也能自治運(yùn)行的能力對(duì)于需要審計(jì)數(shù)據(jù)完整性的場(chǎng)景尤其重要。2.4 工業(yè)級(jí)可靠性設(shè)計(jì)雙電源和看門狗是底線說完了功能聊一聊可靠性?,F(xiàn)場(chǎng)設(shè)備最怕的就是無緣無故死機(jī)、重啟、丟數(shù)據(jù)。為了應(yīng)對(duì)這一點(diǎn)MS-HUB-M在硬件設(shè)計(jì)上做了幾層防護(hù)雙電源冗余輸入支持雙路直流供電一路異常時(shí)自動(dòng)切換切換過程對(duì)系統(tǒng)運(yùn)行無感。硬件看門狗主控系統(tǒng)運(yùn)行異常時(shí)硬件看門狗會(huì)在設(shè)定時(shí)間內(nèi)強(qiáng)制復(fù)位復(fù)位后自動(dòng)加載運(yùn)行配置恢復(fù)采集任務(wù)。寬溫設(shè)計(jì)整機(jī)按照-20℃到60℃的工作溫度設(shè)計(jì)適合安裝在電控柜、樓道弱電間這類溫度條件一般的環(huán)境。防反接和過流保護(hù)每路通訊接口都有獨(dú)立的保護(hù)電路接線錯(cuò)誤時(shí)不會(huì)殃及整機(jī)。其實(shí)在很多項(xiàng)目里設(shè)備本身的功能并不復(fù)雜復(fù)雜的是它要在惡劣的現(xiàn)場(chǎng)環(huán)境里長期穩(wěn)定運(yùn)行。我們?cè)谠O(shè)計(jì)時(shí)把一個(gè)原則放在最前面功能可以少但運(yùn)行必須可靠。2.5 集中配置與遠(yuǎn)程管理設(shè)備再多一條命令都能管單獨(dú)一臺(tái)設(shè)備功能再強(qiáng)如果每個(gè)現(xiàn)場(chǎng)都需要逐一登錄去配置那運(yùn)維成本也是不可接受的。MS-HUB-M在管理系統(tǒng)上做了不少功課。設(shè)備支持通過局域網(wǎng)或遠(yuǎn)程通道訪問統(tǒng)一的Web配置界面所有配置都按照設(shè)備分組配置模板的方式組織。舉個(gè)例子如果三個(gè)站點(diǎn)各裝了多臺(tái)設(shè)備每臺(tái)設(shè)備的采集點(diǎn)位差不多那只需要建一份模板批量下發(fā)到這些設(shè)備即可。配置變更也支持回滾和版本記錄升級(jí)固件時(shí)如果失敗設(shè)備會(huì)自動(dòng)切回上一版本避免升級(jí)一次就變磚的尷尬。日志方面設(shè)備會(huì)記錄完整的操作日志、事件日志和采集錯(cuò)誤日志并且可以遠(yuǎn)程抓取這樣現(xiàn)場(chǎng)出了問題運(yùn)維人員不需要到現(xiàn)場(chǎng)先遠(yuǎn)程看一圈日志再?zèng)Q定下一步動(dòng)作。3. 功能模塊逐個(gè)說從點(diǎn)位配置到告警聯(lián)動(dòng)3.1 數(shù)據(jù)采集功能點(diǎn)位表就是核心配置文件用MS-HUB-M的時(shí)候采集功能基本不涉及寫代碼核心工作是維護(hù)好點(diǎn)位表。每個(gè)點(diǎn)位需要配置的信息包括所屬設(shè)備、通訊端口、從站地址或設(shè)備ID、寄存器地址、數(shù)據(jù)類型16位/32位/浮點(diǎn)等、字節(jié)序、縮放系數(shù)、采集周期。配置完成后設(shè)備會(huì)根據(jù)設(shè)定的輪詢周期自動(dòng)下發(fā)讀取指令解析回復(fù)報(bào)文再按點(diǎn)位映射關(guān)系存到實(shí)時(shí)數(shù)據(jù)庫中。有幾個(gè)細(xì)節(jié)如果配置時(shí)沒注意后面排查會(huì)很痛苦字節(jié)序必須和終端設(shè)備一致。很多PLC和儀表在傳輸32位整數(shù)和浮點(diǎn)數(shù)時(shí)字節(jié)序不同過一遍設(shè)備手冊(cè)再填配置不要靠猜。采集周期不要盲目設(shè)短。Modbus輪詢是串行請(qǐng)求式的總線上設(shè)備越多、單點(diǎn)耗時(shí)越長如果周期設(shè)置到幾百毫秒反而會(huì)造成總線上請(qǐng)求堆積和超時(shí)。按我個(gè)人的經(jīng)驗(yàn)40個(gè)點(diǎn)位以內(nèi)的RS485總線輪詢周期設(shè)在1-2秒比較合理。點(diǎn)位別名建議按現(xiàn)場(chǎng)物理位置來命名比如一號(hào)線裝機(jī)功率而不是reg_1001。點(diǎn)位一多命名混亂就是一場(chǎng)災(zāi)難。3.2 數(shù)據(jù)轉(zhuǎn)發(fā)功能一個(gè)數(shù)據(jù)源多個(gè)去向MS-HUB-M的數(shù)據(jù)轉(zhuǎn)發(fā)模塊支持同時(shí)向上游的多個(gè)平臺(tái)推送數(shù)據(jù)。比如一邊把數(shù)據(jù)推到自建的InfluxDB時(shí)序庫另一邊又同時(shí)上報(bào)給第三方監(jiān)管平臺(tái)兩者互不影響。上行通道支持MQTT、HTTP/HTTPS、TCP主動(dòng)上報(bào)等方式也支持被主站平臺(tái)輪詢讀取。推送格式可以自定義MQTT的Topic可以按設(shè)備分組配置JSON字段名可以通過界面映射。這樣對(duì)接外部平臺(tái)時(shí)不需要在平臺(tái)側(cè)做太多適配。對(duì)于需要本地冗余的場(chǎng)景設(shè)備還支持將數(shù)據(jù)實(shí)時(shí)寫入現(xiàn)場(chǎng)的NAS或者邊緣服務(wù)器上的數(shù)據(jù)庫相當(dāng)于是本地存一份、云端存一份兩邊互不干擾。3.3 告警與聯(lián)動(dòng)功能讓設(shè)備自己先判斷一回規(guī)則引擎的典型用法常見這么幾種閾值告警點(diǎn)位值超過高限或低限持續(xù)N秒生成一條告警記錄推送至MQTT或HTTP平臺(tái)的告警通道。變化檢測(cè)開關(guān)量狀態(tài)變化時(shí)觸發(fā)事件記錄變化時(shí)間、變化方向。組合聯(lián)動(dòng)多個(gè)條件同時(shí)滿足時(shí)執(zhí)行一組動(dòng)作比如溫度過高且風(fēng)機(jī)未啟動(dòng)時(shí)主動(dòng)下發(fā)指令給控制器啟動(dòng)風(fēng)機(jī)。聯(lián)動(dòng)指令支持MODBUS寫操作也就是說設(shè)備不僅采集數(shù)據(jù)必要時(shí)還可以反控現(xiàn)場(chǎng)設(shè)備。不過我想提醒一句反控操作一定要在配置里加權(quán)限管理否則誤下發(fā)指令的后果可能比不采集數(shù)據(jù)更嚴(yán)重。3.4 遠(yuǎn)程運(yùn)維功能不開電腦也能處理現(xiàn)場(chǎng)問題遠(yuǎn)程運(yùn)維功能說幾個(gè)實(shí)際中最高頻的使用場(chǎng)景新接手一個(gè)項(xiàng)目先遠(yuǎn)程導(dǎo)出設(shè)備配置和固件版本信息快速了解現(xiàn)場(chǎng)情況。現(xiàn)場(chǎng)某個(gè)點(diǎn)位數(shù)值異常遠(yuǎn)程把原始報(bào)文抓包下來對(duì)照協(xié)議文檔分析是設(shè)備返回的問題還是配置問題。需要臨時(shí)增加一個(gè)采集點(diǎn)位遠(yuǎn)程修改配置并下發(fā)不影響正在運(yùn)行的其他點(diǎn)位。這些操作全部可以在管理平臺(tái)上批量完成對(duì)維護(hù)多個(gè)分散站點(diǎn)的團(tuán)隊(duì)來說節(jié)省下來的人力相當(dāng)可觀。4. 一次實(shí)際部署12臺(tái)設(shè)備、3種協(xié)議、1臺(tái)MS-HUB-M4.1 現(xiàn)場(chǎng)情況與接線規(guī)劃為了讓你更直觀地理解這套設(shè)備怎么落地我把最近做的一個(gè)模擬項(xiàng)目部署過程完整梳理一遍。某工廠要采集車間里12臺(tái)設(shè)備的數(shù)據(jù)分為三類6臺(tái)Modbus RTU協(xié)議的PLC、4臺(tái)DL/T645電表、2臺(tái)帶Modbus TCP接口的環(huán)境監(jiān)測(cè)儀。現(xiàn)場(chǎng)新增弱電柜一臺(tái)柜內(nèi)布置了這個(gè)設(shè)備外加交換機(jī)、導(dǎo)軌插座和若干端子排。設(shè)備選用的是1塊四路RS485模塊對(duì)應(yīng)6臺(tái)PLC和4臺(tái)電表分兩個(gè)RS485通道接入、1塊以太網(wǎng)模塊接2臺(tái)Modbus TCP設(shè)備和1塊4G模塊用于遠(yuǎn)程管理。4.2 配置步驟與驗(yàn)證過程配置流程大致是這樣在管理平臺(tái)新建站點(diǎn)和設(shè)備分組導(dǎo)入設(shè)備出廠配置模板。給每臺(tái)物理設(shè)備分配通訊參數(shù)包括RS485的串口參數(shù)、Modbus地址、DTS的通訊地址等。逐臺(tái)建立點(diǎn)位表有電表項(xiàng)目直接選擇預(yù)置的DL/T645電表模板點(diǎn)位自動(dòng)生成只需核對(duì)倍率。在數(shù)據(jù)轉(zhuǎn)發(fā)模塊里配置MQTT連接參數(shù)Topic按站點(diǎn)編號(hào)/設(shè)備編號(hào)/標(biāo)簽名的格式組織。為溫度、電流幾個(gè)關(guān)鍵點(diǎn)位配置閾值告警并設(shè)置聯(lián)動(dòng)規(guī)則。通電測(cè)試先看實(shí)時(shí)數(shù)據(jù)刷新再看平臺(tái)上MQTT收到的報(bào)文。從開始接線到平臺(tái)端看到第一筆數(shù)據(jù)整個(gè)流程大概花了半天。其中大頭的時(shí)間在核對(duì)電表的通訊參數(shù)和倍率上設(shè)備本身的配置操作非???。4.3 實(shí)測(cè)數(shù)據(jù)與性能表現(xiàn)部署完成后持續(xù)觀察了一周記錄了一些數(shù)據(jù)。指標(biāo)實(shí)測(cè)值說明總點(diǎn)位數(shù)量186個(gè)含PLC模擬量、數(shù)字量、電表電參數(shù)采集周期1sPLC點(diǎn)位、5s電表按點(diǎn)位類型分別配置上行MQTT推送延遲300ms從采集到云端收到局域網(wǎng)環(huán)境CPU平均占用率約25%在單臺(tái)主控模塊下表現(xiàn)良好內(nèi)存占用約35%隨點(diǎn)位數(shù)量增加緩慢增長斷網(wǎng)補(bǔ)傳完整性100%模擬斷網(wǎng)30分鐘后恢復(fù)無丟點(diǎn)特別說明下采集周期這個(gè)指標(biāo)。186個(gè)點(diǎn)位如果全部按1秒周期采集RS485總線上的負(fù)擔(dān)會(huì)明顯增加。我們當(dāng)時(shí)把電表點(diǎn)位降到了5秒周期PLC點(diǎn)位保持1秒總線上基本沒有出現(xiàn)超時(shí)重試的情況。這也印證了前面提到的經(jīng)驗(yàn)采集周期的配置不是越快越好要按總線負(fù)載和設(shè)備響應(yīng)時(shí)間來權(quán)衡。4.4 現(xiàn)場(chǎng)最容易出現(xiàn)的三個(gè)問題及排查思路再分享幾個(gè)現(xiàn)場(chǎng)常見的坑和排查順序都是我實(shí)際踩過的。問題一某個(gè)RS485通道下所有設(shè)備都采集失敗。排查順序依次是看設(shè)備的端口狀態(tài)頁面確認(rèn)該通道是否識(shí)別到模塊檢查接線端的A/B是否接反用萬用表測(cè)總線靜態(tài)電壓最后再把設(shè)備從總線上逐個(gè)摘除測(cè)試是否是某臺(tái)設(shè)備拉低了總線電平。問題二個(gè)別點(diǎn)位周期性讀到異常大值。這個(gè)多半是數(shù)據(jù)類型或字節(jié)序配置錯(cuò)誤可以先停掉該點(diǎn)位采集用報(bào)文監(jiān)控功能直接看原始回復(fù)幀對(duì)照協(xié)議文檔人工解析一遍問題立刻就能定位。問題三MQTT上行偶爾斷線重連。優(yōu)先檢查設(shè)備的網(wǎng)絡(luò)信號(hào)強(qiáng)度和上行通道的目標(biāo)服務(wù)器地址是否穩(wěn)定其次是看MQTT的Keep Alive參數(shù)是否設(shè)置得過短尤其經(jīng)過多層代理時(shí)容易誤判斷線。5. 設(shè)計(jì)取舍與踩坑復(fù)盤如果重新做一次哪些地方要改5.1 為什么不用市面上的現(xiàn)成工業(yè)網(wǎng)關(guān)不少同行問過我這個(gè)問題工業(yè)網(wǎng)關(guān)市場(chǎng)上選擇那么多為什么要自己折騰一套現(xiàn)成的工業(yè)網(wǎng)關(guān)確實(shí)有很多成熟產(chǎn)品但實(shí)際用下來有幾處別扭。第一很多網(wǎng)關(guān)的協(xié)議支持是封閉的內(nèi)置的協(xié)議列表里沒有的就只能等廠商更新定制協(xié)議基本別想。第二點(diǎn)位容量和性能擴(kuò)不起來現(xiàn)場(chǎng)一旦增加了十幾臺(tái)設(shè)備硬件就得整體換掉。第三管理功能往往比較弱多臺(tái)設(shè)備在分布在不同站點(diǎn)時(shí)統(tǒng)一配置、批量升級(jí)這些操作做起來費(fèi)勁。MS-HUB-M的模塊化思路相當(dāng)于是把整機(jī)換新變成了插一塊新模塊把等廠商適配協(xié)議變成了按需加載插件。5.2 模塊化設(shè)計(jì)帶來的新復(fù)雜度模塊化設(shè)計(jì)不是沒有代價(jià)。首先要處理的就是背板總線的資源競(jìng)爭(zhēng)。多塊通訊模塊同時(shí)拿到數(shù)據(jù)都要往主控上傳如果總線帶寬不夠或者仲裁機(jī)制做得不好就會(huì)出現(xiàn)數(shù)據(jù)堵塞甚至丟失。我們當(dāng)時(shí)在背板總線的仲裁策略上反復(fù)調(diào)過幾次最終采用的是優(yōu)先級(jí)加輪詢結(jié)合的方式實(shí)時(shí)性要求高的報(bào)文優(yōu)先進(jìn)緩沖區(qū)保證不被后續(xù)數(shù)據(jù)擠掉大數(shù)據(jù)塊的批量傳輸則穿插在低優(yōu)先級(jí)的窗口里。這樣既保證了控制類數(shù)據(jù)不會(huì)被淹沒又不會(huì)阻塞歷史數(shù)據(jù)的補(bǔ)傳。另一個(gè)復(fù)雜度來自驅(qū)動(dòng)管理。每個(gè)通訊模塊都有獨(dú)立的驅(qū)動(dòng)固件整機(jī)升級(jí)時(shí)要保證主控固件和所有模塊的固件版本兼容。為此我們做了一套固件配套校驗(yàn)機(jī)制升級(jí)前先檢查模塊固件版本不兼容的會(huì)自動(dòng)被標(biāo)記并阻止升級(jí)避免出現(xiàn)主控版本更新后模塊反而無法識(shí)別的情況。5.3 大量實(shí)測(cè)之后的一些改進(jìn)方向設(shè)備做完之后我們?cè)趦?nèi)部做了很多輪測(cè)試也積累了下一版本的改進(jìn)清單。增強(qiáng)安全防護(hù)能力目前設(shè)備支持簡單的訪問控制和通道加密但在多用戶權(quán)限分級(jí)的精細(xì)度上還可以做得更好比如按站點(diǎn)分配不同操作人員的配置權(quán)限。更豐富的本地可視化一些人少的現(xiàn)場(chǎng)希望在設(shè)備端直接看曲線和報(bào)表不需要額外搭平臺(tái)這塊后續(xù)值得補(bǔ)充。協(xié)議插件的開放生態(tài)如果把協(xié)議解析插件做成更標(biāo)準(zhǔn)的格式讓使用者自行編寫并分享整個(gè)設(shè)備的適配能力會(huì)強(qiáng)很多這也是我們正在考慮的一個(gè)方向。不過話說回來這些改進(jìn)都是錦上添花的東西。對(duì)我來說MS-HUB-M真正帶來的價(jià)值是讓我在之后做任何設(shè)備接入項(xiàng)目時(shí)不再需要從零開始而是站在一個(gè)已經(jīng)驗(yàn)證過的平臺(tái)上把精力放在數(shù)據(jù)怎么用、業(yè)務(wù)怎么打通這些更有價(jià)值的事情上。用一句話總結(jié)我的體會(huì)設(shè)備接入這件事難點(diǎn)從來不在硬件本身而在于你能否把接入過程變成一個(gè)可復(fù)用、可管理、可維護(hù)的標(biāo)準(zhǔn)動(dòng)作。MS-HUB-M這套思路就是奔著這個(gè)目標(biāo)去的。