丁 遠
(1.中煤科工集團沈陽研究院有限公司,遼寧撫順 113122;2.煤礦安全技術國家重點實驗室,遼寧撫順 113122)
工業互聯網[1]對數據扁平化要求較高,提倡信息端與生產現場協同制造。在煤礦安全監控系統[2]中,1 個煤礦按照40 臺分站布局來計算,可安裝1 000~1 200 臺傳感器,每個傳感器節點在不停的更新數據。由于傳感器完全分散,如果完全采用云計算[3]方式不對數據進行分布式采集處理,隨著傳感器不斷增加時,當前網絡逐漸臃腫,傳輸效率與信息安全均得不到有效保障,大量的數據給數據庫存取技術以及數據查詢帶來挑戰;另外由于工業互聯網二級節點系統軟件與煤礦監控系統在上層協議、格式一般是不同的,所以煤礦監控系統接入工業互聯網還需要在監控系統的交換機端在進入工業互聯網時進行格式封裝與協議轉換;另一方面,對于一些實時性要求高的工業現場,云計算過度依賴服務器,一旦出現宕機、網絡異常等,都將造成不可以估計的損失。鑒于此,提出并設計了一種具備分布式計算能力且通用性強[4]的網關方案,協議層建立在由MQTT 協議[5]構建的完整消息分發系統,實現分布式計算、編譯部署的完整消息分發系統,可實現數據采集與分布以及煤礦監控系統接入工業互聯網功能。
網關具備2 種功能:一是協議轉換,對遠端云平臺指令分析下發以及對下行監控分站數據計算與處理后上傳;二是接入工業互聯網二級子節點系統。從硬件通信接口來看,監控分站對上層設計一般采用以太網、LONWORKS、CAN、485 等總線;從軟件協議看,各個協同廠家的通信協議均為自定義非標協議,協議不統一的;從AQ 6201—2019 行業標準[6]來看,對數據處理時間,上層指令響應速度均有嚴格要求。因此網關硬件架構要圍繞多接口來設計,軟件架構要圍繞“強實時性”以及協議統一設計。
根據需求分析確定硬件架構設計需要融合多總線, 網關硬件架構圖如圖 1, 系統使用STM32F429RCT6 作為主控芯片,該芯片主頻可達到180 MHz, 具有8 路UART,1 路以太網控制器,2 路CAN 總線控制器。主控芯片通過UART 外掛4 片MAX3845 芯片實現4 路RS485 總線通信,2 路CAN總線通過內置CAN1、CAN2 控制器外加2 片CTM1051 收發器實現,以太網接口通過內置以太網控制器加外置DP83848C 網卡實現,WIFI、4G、5G 等模塊通過UART 加相應通信模塊實現。
圖1 網關硬件圖Fig.1 Gateway hardware diagram
需要強調下,因為目前大部分模塊,設備中RS485、LONWORKS、LIN 總線、WIFI、4G 等,廠家為了兼容性以及使用方便性考慮,往往設計成UART接口,所以選擇主控芯片時,具備UART 的數量往往是優先考慮的。
網關軟件主要負責監控系統與工業互聯網二級子節點系統之間的指令處理和數據轉發傳輸,是下行系統和遠端云服務器之間的橋梁,軟件體系結構如圖2。
圖2 軟件結構圖Fig.2 Software diagram
協議轉換模塊在網關的軟件結構中起著承上啟下作用:可根據總線接口的不同自適應加載相關通訊協議并且將下行系統上傳的數據、指令應答等信息保存到臨時數據存儲區,主控上傳模塊負責監控數據緩存區的數據、狀態是否改變,如改變立即上傳,否則周期性上傳,上傳時先封裝JSON 格式后再上報MQTT 客戶端。驅動讀寫模塊實現各個硬件操作,如RS485、4G 等。網口模塊比較繁瑣,不僅要操作內部控制器還有移植第三方開源TCPIP 協議棧,如LwIP 協議棧[7]。MQTT 模塊構建了發布/訂閱消息的轉發模型,實現不同的客戶端的即時通信。分布式計算模塊屬于軟件架構中僅次于協議轉換的核心模塊,負責實現邊緣計算功能,不僅實時分析云端服務器發出的請求指令與對下行設備的控制指令,而且還需要計算處理上行數據后上報云服務器,連通監控系統和工業互聯網。
為了加強系統的實時性,網關使用FreeRtos 嵌入式實時操作系統作為任務調度的總管。使用RTOS 后,網關的應用程序由一系列獨立的任務組成,每個任務之間有操作系統內核完成調度,不用開發者再使用定時器模擬調度,減少了開發周期并且避免了不必要的錯誤產生。
網關需要處理的數據很多,為了保證處理的實時性與正確性,需要考慮各個線程之間保證互不干擾和同一個內存空間當多個線程同時訪問時數據完整性與正確性。另外,為了實現網關的內部系統資源與用戶數據的隔離,數據處理中的各個線程間通信的同步與互斥采用信號量和事件組實現,采用共享內存實現不同任務間數據交互,提高了分布式計算的抗干擾性、增加了網關的可用性。另外新標準下,煤礦監控系統交換機一般都是以太網傳輸,并且本方案中的網關設備具備TCP/IP 的支持,網關可以與交換機進行通信,為了減少軟件修改加快應用進度,網關采用Modbus 協議,這樣下行系統只需少量修改便可直接應用。
根據傳輸數據的格式、物理接口等條件的不同,Modbus 通信協議可以分為適用于串行鏈路的Modbus RTU、Modbus ASCII,以及通過TCP/IP 傳輸的Modbus/TCP 等多種模式。為了方便在不同模式下的數據傳輸,Modbus 通信協議定義了1 個與基礎通信層無關的數據應用單元在不同的傳輸模式下,只需要在其首位加上相應的附加域,便可以正常的傳輸數據信息。Modbus TCP 通信協議[8]是建立在物理層為以太網,并且取消校驗和與地址等信息的Modbus協議簇中的一種,采用主機主動發送請求指令查詢從設備,從設備被動應答的一主多從的通訊模式。Modbus TCP 協議為了實現相同IP 段的多個獨立終端同時工作時的不沖突,協議頭由4 個域(7 個字節)組成(簡稱為MBAP)。
另外當網關故障時,新接入的網關能否無縫鏈接,不需要重新進行配置,本設計采用STM32F429芯片內置全球唯一ID 碼可以做標識識別主鍵,當設備更換時,云端服務器可以導入歷史配置,靈活可擴展。工業互聯網為了有效地管理和監控各個節點的數據,通過將部分計算能力遷移到網關,網關分擔了繁重的計算任務,達到了提高工業互聯網對設備的管理能力,使系統具有有很高開放性,提高了效率。
針對煤礦監控系統使用環境,為了達到對監控系統井下現場設備數據采集與控制,采用了MQTT協議構建了完整的消息轉發系統。MQTT 協議是最初是由IBM 于20 世紀90 年代主導開發的物聯網傳輸協議。它是一個開源、可靠的網絡傳輸協議,采用輕量級的發布/訂閱式消息[9]傳輸模式,可提供可靠的網絡服務給低帶寬和不穩定的網絡環境中的物聯網設備。
MQTT 應用于TCP/IP 的應用層,為了減少資源開銷以及保證訂閱/發布圖題消息的實時性,MQTT使用TCP 的長連接。MQTT 屬于1 對多消息,有3 種身份:發布者、訂閱者以及消息代理。每一條MQTT命令消息都包含1 個只有2 個字節的固定報頭,有些消息會攜帶1 個可變報頭或有效載荷,為了實現在相同數據量條件下流量消耗最小,MQTT 基于二進制形式實現的。MQTT 協議報頭見表1。
表1 MQTT 協議頭Table 1 MQTT protocol header
Byte1 用于表示MQTT 消息的報文類型以及某些類型的控制標記,高4 位(bit7~bit4)表示協議類型,總共可以表示16 種協議類型,其中0000 和1111 是保留字段。首字節的低4 位(bit3~bit0)用來表示某些報文類型的控制字段,實際上只有少數報文類型有控制位。剩余長度從Byte2 開始,最長可達4 字節。所以剩余長度范圍是Byte2-Byte5。
協議頭中的服務質量字段決定了網關與工業互聯網之間的通信質量。QoS[10]是發送者和接收者之間對于消息傳遞的可靠程度的協商,旨在協議層解決傳輸質量問題。QoS 可根據分發次數分3 個等級:QoS0 至多發送1 次,QoS1 至少分發1 次,QoS2 僅分發1 次。設計的網關為了保證效率以及準確性,選擇QoS1 服務質量等級。QoS1 存在可能出現重復的問題,所以需要在應用里手動對消息進行去重設置,芯片的唯一ID 是網關與工業互聯網之間的通信主鍵,當收到新消息的時候,通過消息的ID 來判斷是否是重復的消息,如果重復丟棄,否則更新消息ID 并存儲數據包。這樣做就可以保證消息的可靠性和準確性的同時不會出現重復的問題,該算法適用于在使用MQTT 時需要保證數據的準確性的同時又要兼顧傳輸速度的情況,在應用程序客戶端進行去重處理,就減少了對數據傳輸速度的影響。為了實現準確高效的訂閱,每個客戶端可設定不同主題進行消息過濾,當網關接收到帶有確定的發布消息服務質量等級的發布消息后,主動將消息發送到消息代理服務器,消息代理服務器收到消息后按照內部的消息隊列排列次序發送主題消息。
試驗平臺采用中煤科工集團沈陽研究院KJ1177X 監控系統與工業互聯網二級子節點接入云平臺(目前處于調試階段沒有正式運行),準備2 臺KJ1177X-F1 監控分站,1 臺通過以太網與網關連接,1 臺通過CAN 總線與網關連接,在云端服務器打開WireShark 軟件進行抓包測試延時與觀察數據,發布端每100 ms 發送1 次數據,共進行100 次試驗,延時結果取平均值范圍在12~16 ms 之間波動,符合AQ 6201—2019 標準巡檢周期以及異控斷電時間要求。另外,分別進行10、15、20、30 kB 數據負載測試,試驗結果可表明所在負載增加延時可控制在500 ms 以內,由于監控系統單次上傳數據不可能達到10 KB 量級,所以實時性達到AQ 6201—2019標準要求。
以工業互聯網二級子節點系統為平臺,煤礦監控系統為接入對象,分析了工業互聯網系統結構以及煤礦監控系統接入工業互聯網所需關鍵技術后,設計并開發了一種分布式計算網關,此網關應用在監控系統交換機與工業互聯網連接端,對交換機下屬的監控分站發來的數據進行解析處理后封裝JSON 格式,通過MQTT 協議傳入工業互聯網云端軟件。該方案有效的解決了煤礦監控系統接入工業互聯網平臺的問題,通過采用QoS1 服務質量解決了數據傳輸過程中存在的丟包問題,通過設計去重算法解決了QoS1 重復包的問題,仿真測試結果表明此方法在數據傳輸壓力測試過程中沒有出現丟幀情況,并且延時造成的影響在AQ 6201—2019 標準要求的巡檢周期以及異控時間范圍內,滿足傳輸效率要求達到設計的預期效果。