施永貴
(福建和盛高科技產(chǎn)業(yè)有限公司,福建 福州 350100)
網(wǎng)關(guān)作為物聯(lián)網(wǎng)技術(shù)的核心組成部件,具有承上啟下的作用,是用于連接感知層網(wǎng)絡(luò)與上層公共網(wǎng)絡(luò)的紐帶,也被視為一種協(xié)議轉(zhuǎn)換器。網(wǎng)關(guān)正朝著效率、實(shí)時(shí)性、抗干擾能力逐漸提升的方向發(fā)展,應(yīng)用的場(chǎng)景也越來越多,在農(nóng)業(yè)、工業(yè)、交通、智慧電網(wǎng)等諸多場(chǎng)景都有一席之地。應(yīng)用場(chǎng)景的增加導(dǎo)致網(wǎng)關(guān)種類隨之增多,如家居智能網(wǎng)關(guān)、工業(yè)數(shù)據(jù)網(wǎng)關(guān)和交通管控網(wǎng)關(guān)等。網(wǎng)關(guān)的功能是相通的,主要用于協(xié)議轉(zhuǎn)換、數(shù)據(jù)交互、網(wǎng)絡(luò)互聯(lián)互通,區(qū)別在于各網(wǎng)關(guān)的應(yīng)用場(chǎng)景不同。
傳統(tǒng)網(wǎng)關(guān)的創(chuàng)建方法是把現(xiàn)場(chǎng)設(shè)備的數(shù)據(jù)先收集到網(wǎng)關(guān)節(jié)點(diǎn),利用內(nèi)嵌協(xié)議分析轉(zhuǎn)換器將處理完畢的數(shù)據(jù)通過MQTT物聯(lián)網(wǎng)協(xié)議傳送到客戶自定義的云平臺(tái)。存在支持的數(shù)據(jù)協(xié)議較為單一、應(yīng)用范圍較小、開放性不足等問題,當(dāng)現(xiàn)場(chǎng)使用的設(shè)備和數(shù)據(jù)協(xié)議發(fā)生改變時(shí),需要重新對(duì)網(wǎng)關(guān)程序進(jìn)行二次開發(fā),花費(fèi)大量的人力物力。針對(duì)此類問題,設(shè)計(jì)一種支持多種接入?yún)f(xié)議、具備邊緣計(jì)算特性以提高網(wǎng)關(guān)的通用性、數(shù)據(jù)采集可配置以減少數(shù)據(jù)冗余,避免浪費(fèi)傳輸帶寬的物聯(lián)網(wǎng)網(wǎng)關(guān)就變得十分重要。
物聯(lián)網(wǎng)網(wǎng)關(guān)整體框架可分為五層,如圖1所示。
圖1 物聯(lián)網(wǎng)網(wǎng)關(guān)總體設(shè)計(jì)框架
感知層作為物聯(lián)網(wǎng)關(guān)框架的第一層,用于采集各類接入網(wǎng)關(guān)設(shè)備數(shù)據(jù),并將采集的數(shù)據(jù)上傳給數(shù)據(jù)處理層。
數(shù)據(jù)處理層對(duì)感知層上傳的數(shù)據(jù)包進(jìn)行解析和協(xié)議轉(zhuǎn)換,將數(shù)據(jù)分析成標(biāo)準(zhǔn)格式后交給邊緣計(jì)算層處理。
邊緣計(jì)算層作為物聯(lián)網(wǎng)網(wǎng)關(guān)的核心層,需要對(duì)轉(zhuǎn)換后的標(biāo)準(zhǔn)格式數(shù)據(jù)進(jìn)行邊緣計(jì)算,包括數(shù)據(jù)運(yùn)算、邏輯判斷、信號(hào)聯(lián)動(dòng)和故障研判。邊緣計(jì)算的內(nèi)容需要預(yù)先設(shè)定,計(jì)算方法由用戶設(shè)定。
傳輸層用于傳輸感知層采集的數(shù)據(jù),使用4G網(wǎng)絡(luò)傳輸。
應(yīng)用層是指對(duì)采集設(shè)備的數(shù)據(jù)進(jìn)行本地動(dòng)態(tài)曲線顯示,網(wǎng)關(guān)的本地顯示使用微信小程序?qū)崿F(xiàn)。
物聯(lián)網(wǎng)網(wǎng)關(guān)硬件平臺(tái)由邊緣計(jì)算核心板EC Core-L-1和網(wǎng)關(guān)底板和擴(kuò)展單片機(jī)STM32F4007IG組成,其連接和軟件架構(gòu)如圖2和圖3所示。EC Core-L-1板卡構(gòu)架了雙嵌入式操作系統(tǒng):網(wǎng)絡(luò)OS系統(tǒng)和容器Linux 系統(tǒng)。該板卡主要含有內(nèi)存、NAND FLASH、DDR3、RTC實(shí)時(shí)時(shí)鐘、LTE 4G模塊、WiFi模塊、電源管理模塊。擴(kuò)展單片機(jī)能擴(kuò)接豐富的模塊,如USB接口模塊、(PLC)電力載波模塊、以太網(wǎng)接口模塊、LTE模塊。外設(shè)通過USB和GPIO接口連接擴(kuò)展單片機(jī),擴(kuò)展單片機(jī)作為USB Device設(shè)備,核心板作為USB Host控制器,實(shí)現(xiàn)核心板接口的擴(kuò)展。
圖2 擴(kuò)展單片機(jī)連接
圖3 核心板與擴(kuò)展單片機(jī)軟件架構(gòu)
配置客戶端需要實(shí)現(xiàn)采集網(wǎng)關(guān)及其下聯(lián)設(shè)備的參數(shù)及信息,因此界面需要包含多個(gè)輸入框便于填寫信息,以滿足不同的配置要求。首先,設(shè)備配置文件的參數(shù)輸入,填入每個(gè)設(shè)備的身份認(rèn)證(三元組);然后,填入設(shè)備的數(shù)據(jù)協(xié)議參數(shù)(目前為Modbus協(xié)議);最后,填入設(shè)備寄存器的對(duì)應(yīng)地址及其含義和計(jì)算系數(shù),填寫完成后保存。具體工作流程如圖4所示。
圖4 配置客戶端工作流程
根據(jù)配置客戶端的工作流程,設(shè)計(jì)配置客戶端各界面,客戶端設(shè)備管理界面設(shè)計(jì)如圖5所示。界面第一行輸入框?yàn)榫W(wǎng)關(guān)的參數(shù)信息,這些參數(shù)大多在阿里云物聯(lián)網(wǎng)云平臺(tái)創(chuàng)建網(wǎng)關(guān)設(shè)備時(shí)生成,是網(wǎng)關(guān)連接阿里云物聯(lián)網(wǎng)平臺(tái)的唯一身份認(rèn)證(三元組)。填寫完參數(shù)后需要點(diǎn)擊按鈕更新并保存網(wǎng)關(guān)信息。界面左下部分的區(qū)域?yàn)樵O(shè)備參數(shù)輸入框,第一個(gè)輸入框的參數(shù)為Modbus_RTU或Modbus_TCP,選擇Modbus_RTU之后就可以選擇接口類型(485或PLC),若選擇485類型,則在設(shè)備參數(shù)區(qū)域的第三行輸入串口信息;選擇 PLC則輸入第四行的IP信息。同理,當(dāng)?shù)谝粋€(gè)輸入框選擇Modbus_TCP時(shí),只需輸入第四行的IP信息。接下來輸入設(shè)備屬性的標(biāo)識(shí)符和地址,按照設(shè)備使用說明中的信息填寫。界面右邊部分是設(shè)備配置文件的菜單欄,可以看到各接口下的設(shè)備數(shù)量。
圖5 配置客戶端設(shè)備管理界面
配置客戶端邊緣計(jì)算界面如圖6所示。左邊顯示已經(jīng)創(chuàng)建好的計(jì)算節(jié)點(diǎn),右邊為添加計(jì)算節(jié)點(diǎn)的部分。根據(jù)邊緣計(jì)算的設(shè)計(jì),將一串長長的計(jì)算公式拆分成兩兩一組的計(jì)算節(jié)點(diǎn),將每個(gè)計(jì)算節(jié)點(diǎn)的信息輸入框中,然后點(diǎn)擊“插入”即可,添加完成后選擇“保存”,生成邊緣計(jì)算的配置文件。
圖6 配置客戶端邊緣計(jì)算界面
配置客戶端聯(lián)動(dòng)界面如圖7所示。左邊顯示創(chuàng)建好的聯(lián)動(dòng)任務(wù),右邊是輸入聯(lián)動(dòng)任務(wù)的操作界面。本配置客戶端將聯(lián)動(dòng)任務(wù)拆分成監(jiān)測(cè)設(shè)備和聯(lián)動(dòng)設(shè)備,當(dāng)監(jiān)測(cè)設(shè)備的目標(biāo)值達(dá)到閾值時(shí)觸發(fā)聯(lián)動(dòng)設(shè)備動(dòng)作。添加聯(lián)動(dòng)任務(wù)的方法與添加邊緣計(jì)算方法相似,即插入、保存。
圖7 配置客戶端聯(lián)動(dòng)界面
感知層主要負(fù)責(zé)識(shí)別網(wǎng)關(guān)連接的設(shè)備并采集數(shù)據(jù)。本設(shè)計(jì)使用多個(gè)線程采集不同接口下連接設(shè)備的數(shù)據(jù)。首先讀取配置客戶端生成配置文件,判斷類型后將數(shù)據(jù)分別復(fù)制到不同的JSON對(duì)象中。分完大類后將提取每個(gè)類型的小類,按照配置文件的設(shè)計(jì),Modbus_RTU_json對(duì)象的下一層是485_json和PLC_json,故將Modbus_RTU_json對(duì)象解析成485_json和PLC_json對(duì)象,485_json對(duì)象向下為各COM口的對(duì)象,即所有設(shè)備信息的上一層。創(chuàng)建4個(gè)COM接口的JSON對(duì)象存儲(chǔ)設(shè)備信息。得到每個(gè)類型的設(shè)備信息JSON數(shù)組后,將JSON數(shù)組內(nèi)的設(shè)備信息取出存入對(duì)應(yīng)的接口鏈表中,每個(gè)設(shè)備的信息均存放在鏈表節(jié)點(diǎn)的json_data內(nèi)。設(shè)備信息提取完成后,各接口的采集線程開始工作,等待接口的輪循時(shí)間,到達(dá)時(shí)間后開始判斷每個(gè)設(shè)備的采集周期是否到達(dá),若到達(dá)采集周期,則按照當(dāng)前設(shè)備節(jié)點(diǎn)的信息創(chuàng)建串口或Socket連接,采集設(shè)備數(shù)據(jù),采集后存儲(chǔ)到當(dāng)前設(shè)備鏈表節(jié)點(diǎn)的數(shù)據(jù)緩存區(qū)即可。數(shù)據(jù)采集流程如圖8所示。
圖8 數(shù)據(jù)采集流程
感知層采集到數(shù)據(jù)后,根據(jù)配置文件的內(nèi)容判斷是否對(duì)采集的數(shù)據(jù)包進(jìn)行協(xié)議解析和數(shù)據(jù)處理。若需處理,數(shù)據(jù)處理程序按照當(dāng)前線程的通信協(xié)議類型進(jìn)行協(xié)議解析,解析完成后,根據(jù)當(dāng)前鏈表節(jié)點(diǎn)的信息判斷是否需要其他處理,最后將數(shù)據(jù)存儲(chǔ)到鏈表緩存區(qū),等待邊緣計(jì)算層使用。數(shù)據(jù)處理模塊流程如圖9所示。
圖9 數(shù)據(jù)處理模塊流程
將邊緣計(jì)算需要的公式在配置客戶端上按照規(guī)定方法寫入,生成的邊緣計(jì)算配置文件將被傳入網(wǎng)關(guān)指定文件夾內(nèi)。在網(wǎng)關(guān)程序運(yùn)行之初,將文件讀取到程序緩存中等待使用。此設(shè)計(jì)將邊緣計(jì)算的公式分解成兩個(gè)一組的計(jì)算節(jié)點(diǎn),便于長公式的計(jì)算。數(shù)據(jù)處理層已將數(shù)據(jù)解析完成并存儲(chǔ)到每個(gè)設(shè)備的鏈表節(jié)點(diǎn)緩存中,存儲(chǔ)時(shí)按照寄存器地址順序進(jìn)行。鏈表節(jié)點(diǎn)中還有關(guān)于設(shè)備寄存器地址和寄存器標(biāo)識(shí)符的映射關(guān)系表,因此在使用這些數(shù)據(jù)時(shí)可以直接用寄存器標(biāo)識(shí)符來調(diào)用數(shù)據(jù)。
阿里云物聯(lián)網(wǎng)云平臺(tái)提供基于設(shè)備端SDK開發(fā),可以在網(wǎng)關(guān)程序開發(fā)中結(jié)合云平臺(tái)設(shè)計(jì)開發(fā)者使用的設(shè)備端SDK,實(shí)現(xiàn)網(wǎng)關(guān)與物聯(lián)網(wǎng)云平臺(tái)的數(shù)據(jù)互通。子設(shè)備接入云平臺(tái)通過網(wǎng)關(guān)設(shè)備上報(bào),網(wǎng)關(guān)設(shè)備會(huì)根據(jù)讀取的配置客戶端的配置文件獲取需要連接云平臺(tái)的子設(shè)備數(shù)量,并且獲取每個(gè)子設(shè)備的三元組(在云平臺(tái)創(chuàng)建設(shè)備生成的設(shè)備身份信息),通過網(wǎng)關(guān)向云平臺(tái)報(bào)備子設(shè)備并建立拓?fù)潢P(guān)系。子設(shè)備可通過網(wǎng)關(guān)上發(fā)數(shù)據(jù)。本設(shè)計(jì)選擇C-SDK進(jìn)行網(wǎng)關(guān)開發(fā),C-SDK安裝完成后可使用其提供的API與云端通信,傳輸其規(guī)定格式的數(shù)據(jù)包至云端。業(yè)務(wù)邏輯、SDK、HAL關(guān)系如圖10所示。
圖10 業(yè)務(wù)邏輯、SDK、HAL關(guān)系圖
應(yīng)用層主要具備實(shí)時(shí)云動(dòng)態(tài)曲線顯示功能、手機(jī)端動(dòng)態(tài)曲線顯示功能和遠(yuǎn)程控制終端設(shè)備功能。應(yīng)用層的云端動(dòng)態(tài)曲線展示在阿里云物聯(lián)網(wǎng)云平臺(tái)已有工具可實(shí)現(xiàn),只需配置使用即可。手機(jī)端的動(dòng)態(tài)曲線展示選用微信小程序?qū)崿F(xiàn),在微信小程序上,可以使用云平臺(tái)提供的云端SDK API實(shí)現(xiàn)云平臺(tái)的設(shè)備屬性設(shè)置、設(shè)備服務(wù)調(diào)用、設(shè)備信息獲取等功能,之后即可在微信小程序上實(shí)現(xiàn)物聯(lián)網(wǎng)云平臺(tái)的功能。微信小程序可通過調(diào)用云平臺(tái)的服務(wù)調(diào)用功能實(shí)現(xiàn)遠(yuǎn)程控制。控制過程如圖11所示。
圖11 服務(wù)器遠(yuǎn)程控制設(shè)備
本文針對(duì)目前網(wǎng)關(guān)數(shù)據(jù)采集中協(xié)議轉(zhuǎn)換復(fù)雜、難以復(fù)用的情況,對(duì)網(wǎng)關(guān)整體框架進(jìn)行設(shè)計(jì)。并通過引入分層的思想,將物聯(lián)網(wǎng)網(wǎng)關(guān)整體架構(gòu)分為5個(gè)層次:感知層、數(shù)據(jù)處理層、邊緣計(jì)算層、傳輸層和應(yīng)用層,實(shí)現(xiàn)了根據(jù)實(shí)際需求結(jié)合配置客戶端進(jìn)行輸入文件參數(shù)、數(shù)據(jù)協(xié)議參數(shù)、設(shè)備信息、邊緣計(jì)算公式等功能,使網(wǎng)關(guān)的利用率以及使用靈活度得到了極大提高,具有較高的工程應(yīng)用價(jià)值。