施永貴
(福建和盛高科技產業有限公司,福建 福州 350100)
網關作為物聯網技術的核心組成部件,具有承上啟下的作用,是用于連接感知層網絡與上層公共網絡的紐帶,也被視為一種協議轉換器。網關正朝著效率、實時性、抗干擾能力逐漸提升的方向發展,應用的場景也越來越多,在農業、工業、交通、智慧電網等諸多場景都有一席之地。應用場景的增加導致網關種類隨之增多,如家居智能網關、工業數據網關和交通管控網關等。網關的功能是相通的,主要用于協議轉換、數據交互、網絡互聯互通,區別在于各網關的應用場景不同。
傳統網關的創建方法是把現場設備的數據先收集到網關節點,利用內嵌協議分析轉換器將處理完畢的數據通過MQTT物聯網協議傳送到客戶自定義的云平臺。存在支持的數據協議較為單一、應用范圍較小、開放性不足等問題,當現場使用的設備和數據協議發生改變時,需要重新對網關程序進行二次開發,花費大量的人力物力。針對此類問題,設計一種支持多種接入協議、具備邊緣計算特性以提高網關的通用性、數據采集可配置以減少數據冗余,避免浪費傳輸帶寬的物聯網網關就變得十分重要。
物聯網網關整體框架可分為五層,如圖1所示。

圖1 物聯網網關總體設計框架
感知層作為物聯網關框架的第一層,用于采集各類接入網關設備數據,并將采集的數據上傳給數據處理層。
數據處理層對感知層上傳的數據包進行解析和協議轉換,將數據分析成標準格式后交給邊緣計算層處理。
邊緣計算層作為物聯網網關的核心層,需要對轉換后的標準格式數據進行邊緣計算,包括數據運算、邏輯判斷、信號聯動和故障研判。邊緣計算的內容需要預先設定,計算方法由用戶設定。
傳輸層用于傳輸感知層采集的數據,使用4G網絡傳輸。
應用層是指對采集設備的數據進行本地動態曲線顯示,網關的本地顯示使用微信小程序實現。
物聯網網關硬件平臺由邊緣計算核心板EC Core-L-1和網關底板和擴展單片機STM32F4007IG組成,其連接和軟件架構如圖2和圖3所示。EC Core-L-1板卡構架了雙嵌入式操作系統:網絡OS系統和容器Linux 系統。該板卡主要含有內存、NAND FLASH、DDR3、RTC實時時鐘、LTE 4G模塊、WiFi模塊、電源管理模塊。擴展單片機能擴接豐富的模塊,如USB接口模塊、(PLC)電力載波模塊、以太網接口模塊、LTE模塊。外設通過USB和GPIO接口連接擴展單片機,擴展單片機作為USB Device設備,核心板作為USB Host控制器,實現核心板接口的擴展。

圖2 擴展單片機連接

圖3 核心板與擴展單片機軟件架構
配置客戶端需要實現采集網關及其下聯設備的參數及信息,因此界面需要包含多個輸入框便于填寫信息,以滿足不同的配置要求。首先,設備配置文件的參數輸入,填入每個設備的身份認證(三元組);然后,填入設備的數據協議參數(目前為Modbus協議);最后,填入設備寄存器的對應地址及其含義和計算系數,填寫完成后保存。具體工作流程如圖4所示。

圖4 配置客戶端工作流程
根據配置客戶端的工作流程,設計配置客戶端各界面,客戶端設備管理界面設計如圖5所示。界面第一行輸入框為網關的參數信息,這些參數大多在阿里云物聯網云平臺創建網關設備時生成,是網關連接阿里云物聯網平臺的唯一身份認證(三元組)。填寫完參數后需要點擊按鈕更新并保存網關信息。界面左下部分的區域為設備參數輸入框,第一個輸入框的參數為Modbus_RTU或Modbus_TCP,選擇Modbus_RTU之后就可以選擇接口類型(485或PLC),若選擇485類型,則在設備參數區域的第三行輸入串口信息;選擇 PLC則輸入第四行的IP信息。同理,當第一個輸入框選擇Modbus_TCP時,只需輸入第四行的IP信息。接下來輸入設備屬性的標識符和地址,按照設備使用說明中的信息填寫。界面右邊部分是設備配置文件的菜單欄,可以看到各接口下的設備數量。

圖5 配置客戶端設備管理界面
配置客戶端邊緣計算界面如圖6所示。左邊顯示已經創建好的計算節點,右邊為添加計算節點的部分。根據邊緣計算的設計,將一串長長的計算公式拆分成兩兩一組的計算節點,將每個計算節點的信息輸入框中,然后點擊“插入”即可,添加完成后選擇“保存”,生成邊緣計算的配置文件。

圖6 配置客戶端邊緣計算界面
配置客戶端聯動界面如圖7所示。左邊顯示創建好的聯動任務,右邊是輸入聯動任務的操作界面。本配置客戶端將聯動任務拆分成監測設備和聯動設備,當監測設備的目標值達到閾值時觸發聯動設備動作。添加聯動任務的方法與添加邊緣計算方法相似,即插入、保存。

圖7 配置客戶端聯動界面
感知層主要負責識別網關連接的設備并采集數據。本設計使用多個線程采集不同接口下連接設備的數據。首先讀取配置客戶端生成配置文件,判斷類型后將數據分別復制到不同的JSON對象中。分完大類后將提取每個類型的小類,按照配置文件的設計,Modbus_RTU_json對象的下一層是485_json和PLC_json,故將Modbus_RTU_json對象解析成485_json和PLC_json對象,485_json對象向下為各COM口的對象,即所有設備信息的上一層。創建4個COM接口的JSON對象存儲設備信息。得到每個類型的設備信息JSON數組后,將JSON數組內的設備信息取出存入對應的接口鏈表中,每個設備的信息均存放在鏈表節點的json_data內。設備信息提取完成后,各接口的采集線程開始工作,等待接口的輪循時間,到達時間后開始判斷每個設備的采集周期是否到達,若到達采集周期,則按照當前設備節點的信息創建串口或Socket連接,采集設備數據,采集后存儲到當前設備鏈表節點的數據緩存區即可。數據采集流程如圖8所示。

圖8 數據采集流程
感知層采集到數據后,根據配置文件的內容判斷是否對采集的數據包進行協議解析和數據處理。若需處理,數據處理程序按照當前線程的通信協議類型進行協議解析,解析完成后,根據當前鏈表節點的信息判斷是否需要其他處理,最后將數據存儲到鏈表緩存區,等待邊緣計算層使用。數據處理模塊流程如圖9所示。

圖9 數據處理模塊流程
將邊緣計算需要的公式在配置客戶端上按照規定方法寫入,生成的邊緣計算配置文件將被傳入網關指定文件夾內。在網關程序運行之初,將文件讀取到程序緩存中等待使用。此設計將邊緣計算的公式分解成兩個一組的計算節點,便于長公式的計算。數據處理層已將數據解析完成并存儲到每個設備的鏈表節點緩存中,存儲時按照寄存器地址順序進行。鏈表節點中還有關于設備寄存器地址和寄存器標識符的映射關系表,因此在使用這些數據時可以直接用寄存器標識符來調用數據。
阿里云物聯網云平臺提供基于設備端SDK開發,可以在網關程序開發中結合云平臺設計開發者使用的設備端SDK,實現網關與物聯網云平臺的數據互通。子設備接入云平臺通過網關設備上報,網關設備會根據讀取的配置客戶端的配置文件獲取需要連接云平臺的子設備數量,并且獲取每個子設備的三元組(在云平臺創建設備生成的設備身份信息),通過網關向云平臺報備子設備并建立拓撲關系。子設備可通過網關上發數據。本設計選擇C-SDK進行網關開發,C-SDK安裝完成后可使用其提供的API與云端通信,傳輸其規定格式的數據包至云端。業務邏輯、SDK、HAL關系如圖10所示。

圖10 業務邏輯、SDK、HAL關系圖
應用層主要具備實時云動態曲線顯示功能、手機端動態曲線顯示功能和遠程控制終端設備功能。應用層的云端動態曲線展示在阿里云物聯網云平臺已有工具可實現,只需配置使用即可。手機端的動態曲線展示選用微信小程序實現,在微信小程序上,可以使用云平臺提供的云端SDK API實現云平臺的設備屬性設置、設備服務調用、設備信息獲取等功能,之后即可在微信小程序上實現物聯網云平臺的功能。微信小程序可通過調用云平臺的服務調用功能實現遠程控制。控制過程如圖11所示。

圖11 服務器遠程控制設備
本文針對目前網關數據采集中協議轉換復雜、難以復用的情況,對網關整體框架進行設計。并通過引入分層的思想,將物聯網網關整體架構分為5個層次:感知層、數據處理層、邊緣計算層、傳輸層和應用層,實現了根據實際需求結合配置客戶端進行輸入文件參數、數據協議參數、設備信息、邊緣計算公式等功能,使網關的利用率以及使用靈活度得到了極大提高,具有較高的工程應用價值。