周 欣,王宜懷,姚望舒,葛新越
(蘇州大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 蘇州 215006)
隨著窄帶物聯(lián)網(wǎng)(narrow band internet of things,NB-IoT)[1]基站的廣泛部署,相應(yīng)的物聯(lián)網(wǎng)監(jiān)控系統(tǒng)也逐步增多,如文獻(xiàn)[2]和文獻(xiàn)[3]將NB-IoT應(yīng)用于智能抄表領(lǐng)域,文獻(xiàn)[4]和文獻(xiàn)[5]針對(duì)智能農(nóng)業(yè)場(chǎng)景。這類以數(shù)據(jù)采集為主,簡(jiǎn)單控制為輔的測(cè)控系統(tǒng),其功能存在一定相似性,每次研發(fā)一套完整的應(yīng)用系統(tǒng)會(huì)造成重復(fù)工作,且開發(fā)周期較長(zhǎng)。文獻(xiàn)[6]中設(shè)計(jì)了一種面向物聯(lián)網(wǎng)應(yīng)用系統(tǒng),為NB-IoT應(yīng)用系統(tǒng)的開發(fā)提供方法。但各類物聯(lián)網(wǎng)應(yīng)用開發(fā)過程涉及內(nèi)容較多,包含終端程序、應(yīng)用服務(wù)器及人機(jī)交互系統(tǒng)的感知、計(jì)算、通信等功能的實(shí)現(xiàn),開發(fā)難度較大,且整體系統(tǒng)的適應(yīng)性與靈活性無(wú)法滿足日益變化的用戶需求。組態(tài)軟件以配置的形式靈活組合各功能模塊,生成適合不同用戶需求的應(yīng)用軟件,具有易于開發(fā)、便于擴(kuò)展的特點(diǎn)。
基于上述情況,本文在使用NB-IoT進(jìn)行通信的嵌入式測(cè)控系統(tǒng)的基礎(chǔ)上,引入組態(tài)的思想,提出一種對(duì)流程、數(shù)據(jù)與界面進(jìn)行配置開發(fā)的低成本、高通用性、高可靠性的智能監(jiān)控軟件開發(fā)方法。該方法對(duì)終端節(jié)點(diǎn)、應(yīng)用服務(wù)器、人機(jī)交互系統(tǒng)的數(shù)據(jù)采集、實(shí)時(shí)控制、嵌入式通信、數(shù)據(jù)處理等功能進(jìn)行配置,使其適用性與靈活性得以加強(qiáng)。用戶可以通過修改配置觸發(fā)動(dòng)態(tài)配置,做到快速開發(fā),同時(shí)也減少了直接更改軟件的風(fēng)險(xiǎn)。
本文使用的NB-IoT測(cè)控系統(tǒng)總體架構(gòu)如圖1所示,由NB-IoT終端節(jié)點(diǎn)、NB-IoT基站、蜂窩物聯(lián)核心網(wǎng)、IoT業(yè)務(wù)平臺(tái)、應(yīng)用服務(wù)器及人機(jī)交互系統(tǒng)組成。其中NB-IoT基站、蜂窩物聯(lián)核心網(wǎng)和IoT業(yè)務(wù)平臺(tái)由運(yùn)營(yíng)商負(fù)責(zé)管理維護(hù),主要負(fù)責(zé)部署站點(diǎn),優(yōu)化通信接口和為應(yīng)用層提供相關(guān)服務(wù)。
圖1 NB-IoT測(cè)控系統(tǒng)總體架構(gòu)
NB-IoT終端節(jié)點(diǎn)、應(yīng)用服務(wù)器和人機(jī)交互系統(tǒng)作為測(cè)控系統(tǒng)的主要部分,由系統(tǒng)開發(fā)者負(fù)責(zé)功能設(shè)計(jì)與實(shí)現(xiàn),各部分之間相互配合完成數(shù)據(jù)采集、傳輸、顯示和控制的功能。NB-IoT終端節(jié)點(diǎn)采集信息發(fā)送到應(yīng)用服務(wù)器存儲(chǔ),用戶通過人機(jī)交互系統(tǒng)進(jìn)行數(shù)據(jù)查看,也可通過人機(jī)交互系統(tǒng)發(fā)送控制命令,由終端節(jié)點(diǎn)解析后對(duì)執(zhí)行機(jī)構(gòu)進(jìn)行控制。
在NB-IoT測(cè)控系統(tǒng)架構(gòu)中引入組態(tài)的思想,對(duì)NB-IoT終端節(jié)點(diǎn)、應(yīng)用服務(wù)器和人機(jī)交互系統(tǒng)進(jìn)行可配置開發(fā),形成了一種基于組態(tài)和NB-IoT通信的可配置開發(fā)軟件(NB-IoT embedded configuration software,NB-ECS)。NB-ECS架構(gòu)如圖2所示,分為組態(tài)開發(fā)平臺(tái)和運(yùn)行平臺(tái)兩個(gè)部分。
圖2 基于NB-IoT的可配置軟件架構(gòu)
(1)組態(tài)開發(fā)平臺(tái)
組態(tài)開發(fā)平臺(tái)是可配置軟件架構(gòu)的核心部分,負(fù)責(zé)提供對(duì)數(shù)據(jù)、界面、流程的可配置服務(wù),包括對(duì)終端接入傳感器與執(zhí)行機(jī)構(gòu)的引腳功能配置、控制關(guān)系配置、設(shè)備信息配置;對(duì)應(yīng)用服務(wù)器與人交互系統(tǒng)構(gòu)成的監(jiān)控軟件進(jìn)行數(shù)據(jù)配置、功能界面配置與用戶信息配置,具有較強(qiáng)的可配置功能,能夠適用于大多數(shù)簡(jiǎn)單監(jiān)控場(chǎng)景。
(2)運(yùn)行平臺(tái)
運(yùn)行平臺(tái)包含NB-IoT終端節(jié)點(diǎn)、應(yīng)用服務(wù)程序與人機(jī)交互系統(tǒng)的運(yùn)行環(huán)境與程序,通過組態(tài)開發(fā)平臺(tái)對(duì)各個(gè)部分進(jìn)行配置,運(yùn)行平臺(tái)中的各部分內(nèi)容通過加載相應(yīng)的配置信息完成功能的初始化與運(yùn)行,形成一套完整的NB-IoT測(cè)控系統(tǒng)架構(gòu)。
針對(duì)NB-ECS架構(gòu)的可配置特性,結(jié)合監(jiān)控軟件的功能需求,對(duì)NB-IoT終端節(jié)點(diǎn)、組態(tài)開發(fā)平臺(tái)、監(jiān)控平臺(tái)及數(shù)據(jù)通信協(xié)議進(jìn)行設(shè)計(jì)開發(fā)。在此框架下,測(cè)控系統(tǒng)由組態(tài)開發(fā)平臺(tái)完成功能配置生成相應(yīng)的應(yīng)用軟件,下載至對(duì)應(yīng)的運(yùn)行環(huán)境中運(yùn)行。同時(shí)運(yùn)行狀態(tài)下,具備一定的可配置功能,配合不同的通信命令實(shí)現(xiàn)配置信息的動(dòng)態(tài)更新。
NB-IoT終端節(jié)點(diǎn)的硬件部分由主控芯片最小系統(tǒng)、NB-IoT通信模組外圍電路,傳感器接口和其它輔助電路組成,與接入傳感器一同構(gòu)成具有信息采集控制功能的硬件實(shí)體,如圖3所示。
圖3 NB-IoT終端硬件實(shí)體
主控芯片最小系統(tǒng)為芯片提供電源、晶振、寫入等服務(wù),保證芯片的運(yùn)行;通信模組外圍電路包含電源模塊,eSIM卡電路和GNSS天線電路,并利用電平轉(zhuǎn)換電路與主控芯片通過UART通信方式連接;主控芯片通過ADC、GPIO、PWM等接口電路對(duì)外提供引腳服務(wù),與傳感器和執(zhí)行機(jī)構(gòu)進(jìn)行連接,完成數(shù)據(jù)的采樣與控制功能,本文采用USB接口的形式便于傳感器的自由組合。
主控芯片提供軟件服務(wù),負(fù)責(zé)數(shù)據(jù)采集、運(yùn)算和控制等操作,并能配合相應(yīng)的命令實(shí)現(xiàn)參數(shù)的動(dòng)態(tài)可配置。針對(duì)以上功能,將主控芯片的Flash區(qū)分為4個(gè)部分:BootLoader區(qū)、用戶代碼區(qū)、更新代碼區(qū)和配置信息區(qū)。BootLoader區(qū)作為駐留在主控芯片中具有一定的硬件設(shè)備啟動(dòng)及程序跳轉(zhuǎn)功能,能與更新代碼區(qū)配合實(shí)現(xiàn)對(duì)用戶程序的更新。用戶代碼區(qū)是用戶應(yīng)用程序的存儲(chǔ)區(qū)域,與配置信息區(qū)相互配合,實(shí)現(xiàn)終端節(jié)點(diǎn)的可配置及數(shù)據(jù)采集控制等功能。
用戶程序作為終端節(jié)點(diǎn)軟件的核心模塊,其主程序運(yùn)行流程如圖4所示。初始配置參數(shù)通過組態(tài)開發(fā)平臺(tái)存儲(chǔ)在對(duì)應(yīng)Flash區(qū)域(即配置信息區(qū)),芯片啟動(dòng)后讀取位于該區(qū)域中的配置信息,并對(duì)相關(guān)硬件模塊初始化和中斷使能,隨后進(jìn)入NB-IoT通信模塊的啟動(dòng),獲取IMSI號(hào),建立與基站及服務(wù)器的連接;啟動(dòng)完畢后,進(jìn)入主循環(huán)。主循環(huán)按照其數(shù)據(jù)采集、運(yùn)算、控制和動(dòng)態(tài)配置的功能,可劃分成6個(gè)任務(wù):
(1)采集任務(wù):隨著定時(shí)器中斷計(jì)時(shí)達(dá)到設(shè)定時(shí)間,執(zhí)行該任務(wù)。該任務(wù)中,依次使用配置的傳感器對(duì)外界環(huán)境進(jìn)行檢測(cè),例如對(duì)溫濕度、開關(guān)狀態(tài)等模擬量與開關(guān)量的輸入狀態(tài)進(jìn)行采集,并保存相應(yīng)的采集結(jié)果。
(2)LCD顯示任務(wù):針對(duì)需要使用LCD進(jìn)行屏幕顯示的應(yīng)用,支持LCD顯示功能,將采集信息與控制狀態(tài)顯示在LCD屏幕上。
(3)通信發(fā)送任務(wù):使用NB-IoT作為通信方式,將當(dāng)前采集信息、控制狀態(tài)等數(shù)據(jù)進(jìn)行組幀,發(fā)送至應(yīng)用服務(wù)器進(jìn)行數(shù)據(jù)庫(kù)存儲(chǔ)與顯示。
(4)通信解析任務(wù):隨著數(shù)據(jù)接收中斷接收到完整數(shù)據(jù)幀,在此任務(wù)中進(jìn)行數(shù)據(jù)幀解析,根據(jù)不同命令執(zhí)行控制任務(wù)或參數(shù)配置更新任務(wù)。
(5)控制任務(wù):分為自動(dòng)控制和遠(yuǎn)程控制兩種,自動(dòng)控制時(shí)可根據(jù)預(yù)先設(shè)置的控制關(guān)系,依照采集信息,對(duì)相應(yīng)的執(zhí)行機(jī)構(gòu)進(jìn)行控制;也可根據(jù)數(shù)據(jù)幀解析結(jié)果對(duì)執(zhí)行機(jī)構(gòu)進(jìn)行遠(yuǎn)程調(diào)控。
(6)參數(shù)配置更新任務(wù):作為動(dòng)態(tài)可配置功能的主要執(zhí)行部分,此任務(wù)可根據(jù)解析的數(shù)據(jù)對(duì)各類參數(shù)進(jìn)行動(dòng)態(tài)的更新,并存入配置信息區(qū)保存,使得在程序運(yùn)行過程中,兼具數(shù)據(jù)采集和參數(shù)可配置功能。
圖4 用戶主程序運(yùn)行流程
除上述任務(wù)之外還包括兩個(gè)中斷服務(wù)例程:
(1)定時(shí)器中斷:用于計(jì)時(shí),提供時(shí)間節(jié)拍,并為采集任務(wù)的執(zhí)行提供服務(wù);
(2)數(shù)據(jù)接收中斷:NB-IoT通信模組與UART之間通過AT指令進(jìn)行通信,利用UART接收中斷完成數(shù)據(jù)接收與組幀操作,為通信解析任務(wù)提供服務(wù)。
各任務(wù)與中斷服務(wù)例程的相互配合,保證用戶程序的運(yùn)行。根據(jù)終端節(jié)點(diǎn)的運(yùn)行流程,對(duì)終端節(jié)點(diǎn)的可配置信息進(jìn)行定義,結(jié)構(gòu)體關(guān)系如圖5所示,包含設(shè)備信息與控制邏輯兩部分。設(shè)備信息結(jié)構(gòu)體較為簡(jiǎn)單,是對(duì)節(jié)點(diǎn)名稱、網(wǎng)絡(luò)服務(wù)地址等進(jìn)行描述,該字段用于網(wǎng)絡(luò)連接地址設(shè)置和存儲(chǔ)設(shè)備唯一標(biāo)識(shí),用于區(qū)分不同節(jié)點(diǎn);控制邏輯由多個(gè)結(jié)構(gòu)體嵌套組成,表示的是傳感器與執(zhí)行機(jī)構(gòu)的模塊屬性及其之間的控制關(guān)系,涉及各類開關(guān)量與模擬量對(duì)應(yīng)采集變量名稱以及運(yùn)行狀態(tài)范圍。通過組態(tài)開發(fā)平臺(tái)進(jìn)行參數(shù)配置,各參數(shù)值預(yù)先存儲(chǔ)在相應(yīng)的Flash區(qū)域中,結(jié)合用戶代碼實(shí)現(xiàn)嵌入式終端節(jié)點(diǎn)的可配置開發(fā)以及配置參數(shù)的動(dòng)態(tài)修改。
2.2.1 交互界面設(shè)計(jì)
組態(tài)開發(fā)平臺(tái)按照NB-ECS結(jié)構(gòu)分為嵌入式配置與監(jiān)控軟件配置,使用Microsoft Visual Studio作為開發(fā)工具進(jìn)行C# WinForm應(yīng)用窗體的開發(fā),借助WeifenLuo.WinFormsUI.Docking實(shí)現(xiàn)多界面的組合布局,界面按照?qǐng)D6劃分成4個(gè)部分,具體功能與實(shí)現(xiàn)如下:
圖5 組態(tài)信息結(jié)構(gòu)體
圖6 組態(tài)開發(fā)平臺(tái)配置界面
(1)工具欄窗體。用于各類可配置模塊的展示,通過選擇對(duì)應(yīng)的模塊完成相應(yīng)的配置。根據(jù)測(cè)控系統(tǒng)的一般功能,按照終端節(jié)點(diǎn)與監(jiān)控平臺(tái)進(jìn)行區(qū)分,提取不同類型的可配置模塊,如開關(guān)量輸入配置、模擬量輸出配置、控制關(guān)系、通信連接等。
以TreeView控件作為展示平臺(tái)生成相應(yīng)的可配置參數(shù)列表、終端節(jié)點(diǎn)與監(jiān)控平臺(tái)作為控件父節(jié)點(diǎn),各可配置模塊作為子節(jié)點(diǎn),以圖元的形式呈現(xiàn)。每個(gè)圖元模塊包含模塊名稱、父節(jié)點(diǎn)分類,顯示圖標(biāo)、單擊事件和對(duì)應(yīng)可配置窗體。當(dāng)選擇對(duì)應(yīng)的可配置模塊時(shí)觸發(fā)相應(yīng)的窗體創(chuàng)建事件,進(jìn)行參數(shù)的配置。
(2)已配置信息窗體。在工具欄中選擇的模塊完成配置后,配置信息會(huì)顯示在已配置信息區(qū)。除此之外,還可以對(duì)已配置內(nèi)容進(jìn)行編輯修改。
(3)程序代碼或配置文件窗體。在完成配置后會(huì)自動(dòng)生成相應(yīng)的配置文件或程序代碼,對(duì)應(yīng)文件將顯示在此窗體中,配置模式下不可被手動(dòng)修改。
(4)信息輸出窗體。用于狀態(tài)提示,可以顯示運(yùn)行狀態(tài)、編譯生成狀態(tài)信息等信息。
通過上述組態(tài)開發(fā)平臺(tái)各部分窗體的相互配合,可完成對(duì)具體項(xiàng)目及功能的配置,而項(xiàng)目相關(guān)的配置信息也會(huì)存儲(chǔ)在對(duì)應(yīng)的配置文件中。
2.2.2 配置文件存儲(chǔ)格式
嵌入式端的配置信息在組態(tài)開發(fā)平臺(tái)中通過JSON文件按照鍵值對(duì)的方式存儲(chǔ),結(jié)構(gòu)較為簡(jiǎn)單,易于解析[7]。不同芯片引腳及其可復(fù)用功能存在差異,pin.json文件記錄芯片型號(hào)、各引腳編號(hào)與引腳可復(fù)用功能,并保存當(dāng)前引腳使用狀態(tài),其對(duì)應(yīng)格式如圖7所示。
圖7 pin.json文件配置格式
當(dāng)選擇工具欄中對(duì)應(yīng)的開關(guān)量輸入與輸出,模擬量輸入與輸出模塊時(shí),根據(jù)引腳是否被使用狀態(tài)(use字段)及可復(fù)用功能(fun字段),與模塊名稱對(duì)比,篩選出相應(yīng)的可配置引腳,配置成功后設(shè)置該引腳use字段為使用。
同時(shí)已配置信息窗體對(duì)應(yīng)的控制邏輯關(guān)系數(shù)據(jù)使用配置參數(shù)文件config.json記錄,其結(jié)構(gòu)如圖8所示,對(duì)已配置引腳及其屬性、控制關(guān)系、設(shè)備信息等進(jìn)行保存。與pin.json文件相互配合,構(gòu)成終端節(jié)點(diǎn)相應(yīng)的可配置數(shù)據(jù),實(shí)現(xiàn)引腳功能的可復(fù)用與可配置,也實(shí)現(xiàn)了終端節(jié)點(diǎn)功能、流程的可配置。
圖8 config.json文件配置格式
上述JSON文件用于在當(dāng)前開發(fā)平臺(tái)中保存可配置信息,實(shí)際配置信息在相應(yīng)編譯后按照相應(yīng)結(jié)構(gòu)體存儲(chǔ)在終端節(jié)點(diǎn)對(duì)應(yīng)的Flash區(qū)域中,也可在運(yùn)行過程中進(jìn)行動(dòng)態(tài)的修改。
服務(wù)器端程序和人機(jī)交互系統(tǒng)組成的監(jiān)控軟件的可配置信息由工程樣式、通信連接設(shè)置、監(jiān)聽設(shè)備、通信命令幀、數(shù)據(jù)類型定義5個(gè)部分。
(1)窗體/工程樣式。存儲(chǔ)簡(jiǎn)單設(shè)置窗體名稱、圖標(biāo)與設(shè)定樣式;
(2)通信連接設(shè)置。存儲(chǔ)服務(wù)器連接地址,由服務(wù)器IP和端口號(hào)構(gòu)成。服務(wù)器程序使用不同的端口區(qū)分服務(wù),對(duì)應(yīng)于使用不同的通信協(xié)議與終端節(jié)點(diǎn)與人際交互系統(tǒng)進(jìn)行通信,分別使用HCIComTarget和WebsocketTarget作為標(biāo)簽進(jìn)行區(qū)分。終端節(jié)點(diǎn)與人機(jī)交互系統(tǒng)分別使用設(shè)定地址進(jìn)行連接;
(3)監(jiān)聽設(shè)備。存儲(chǔ)終端節(jié)點(diǎn)的唯一標(biāo)識(shí)——IMSI號(hào),表明當(dāng)前程序偵聽的終端設(shè)備;
(4)通信命令幀。存儲(chǔ)本程序使用的通信命令,不同通信命令的數(shù)據(jù)格式存在不同,通過此處進(jìn)行定義數(shù)據(jù)幀各字段內(nèi)容,便于區(qū)分與解析;
(5)數(shù)據(jù)類型定義。是對(duì)通信命令幀的補(bǔ)充,對(duì)通信命令中的各字段的詳細(xì)信息進(jìn)行定義,包含多個(gè)標(biāo)簽,如字段變量名稱、變量顯示名稱、數(shù)據(jù)類型、可讀可寫狀態(tài)。各標(biāo)簽之前為并列關(guān)系,可進(jìn)行動(dòng)態(tài)的刪減,配合進(jìn)行數(shù)據(jù)的可配置。
上述信息使用XML文件進(jìn)行存儲(chǔ),具有結(jié)構(gòu)化和可擴(kuò)展的特點(diǎn),并可進(jìn)行標(biāo)簽的自定義[8],有助于數(shù)據(jù)節(jié)點(diǎn)的定義和動(dòng)態(tài)增減,輸出的文件存儲(chǔ)格式如圖9所示。服務(wù)器程序根據(jù)XML文件進(jìn)行動(dòng)態(tài)解析,實(shí)現(xiàn)對(duì)服務(wù)器數(shù)據(jù)庫(kù)存儲(chǔ)格式,界面顯示設(shè)置以及數(shù)據(jù)可視化顯示等的動(dòng)態(tài)修改,與通信協(xié)議相互配合實(shí)現(xiàn)了數(shù)據(jù)傳輸和界面顯示的可配置。
圖9 監(jiān)控系統(tǒng)XML文件配置格式
監(jiān)控平臺(tái)是對(duì)終端采集數(shù)據(jù)進(jìn)行存儲(chǔ)與顯示的軟件,服務(wù)器程序在接收到來(lái)自終端節(jié)點(diǎn)發(fā)送的數(shù)據(jù),解析后按照預(yù)定格式寫入數(shù)據(jù)庫(kù),并將相關(guān)數(shù)據(jù)發(fā)送至連接的人機(jī)交互系統(tǒng)顯示。作為監(jiān)控軟件的核心部分,數(shù)據(jù)庫(kù)中各數(shù)據(jù)表通過XML文件進(jìn)行完善,各數(shù)據(jù)表名稱與功能見表1。
表1 數(shù)據(jù)
對(duì)XML文件的數(shù)據(jù)類型定義字段進(jìn)行解析提取,將預(yù)先設(shè)定的變量名稱、變量類型等信息存儲(chǔ)寫入數(shù)據(jù)屬性表中。該數(shù)據(jù)表內(nèi)容可隨配置數(shù)據(jù)進(jìn)行動(dòng)態(tài)修改,保證與通信命令一致。并利用橫縱表轉(zhuǎn)換存儲(chǔ)[9]的方式,自動(dòng)完成上行數(shù)據(jù)表、下行數(shù)據(jù)表及采樣數(shù)據(jù)表的創(chuàng)建。
數(shù)據(jù)可配置的實(shí)現(xiàn),也確定了人機(jī)交互系統(tǒng)的數(shù)據(jù)界面的動(dòng)態(tài)可配置。人機(jī)交互系統(tǒng)通過獲取服務(wù)器程序發(fā)送的數(shù)據(jù),解析生成相應(yīng)的界面并進(jìn)行數(shù)據(jù)的動(dòng)態(tài)顯示,從而實(shí)現(xiàn)了界面的可配置。
數(shù)據(jù)在終端節(jié)點(diǎn)、組態(tài)開發(fā)平臺(tái)與監(jiān)控平臺(tái)之間進(jìn)行傳遞。終端節(jié)點(diǎn)的傳感器采集信息與執(zhí)行機(jī)構(gòu)執(zhí)行情況在主控芯片進(jìn)行整合,并通過通信模組發(fā)送至服務(wù)器端,再由服務(wù)器端進(jìn)行數(shù)據(jù)推送給相應(yīng)的人機(jī)交互系統(tǒng)。組態(tài)開發(fā)平臺(tái)的配置信息及人機(jī)交互系統(tǒng)返回的信息都將發(fā)送至服務(wù)器端解析,再返回給終端節(jié)點(diǎn),完成配置或控制功能。對(duì)應(yīng)于通信流程中的不同的階段使用不同的通信方式及數(shù)據(jù)格式。
終端節(jié)點(diǎn)使用NB-IoT通信方式,始終與服務(wù)器程序進(jìn)行連接。其主要數(shù)據(jù)幀格式如圖10所示。
圖10 終端程序數(shù)據(jù)幀格式
幀頭、幀尾各為兩字節(jié),確定一幀數(shù)據(jù)的開始與結(jié)束;幀長(zhǎng)為不包含幀頭、幀長(zhǎng)、CRC校驗(yàn)、幀尾字段的數(shù)據(jù)長(zhǎng)度,由于NB-IoT通信模組限制,單幀數(shù)據(jù)長(zhǎng)度在500字節(jié)以內(nèi)(即N不超過500字節(jié));CRC校驗(yàn)位的使用保證數(shù)據(jù)的完整性與準(zhǔn)確性;命令、IMSI號(hào)、服務(wù)器IP、服務(wù)器端口及發(fā)送時(shí)間為通信固定字段。根據(jù)不同的命令,對(duì)應(yīng)于不同的數(shù)據(jù)幀,其數(shù)據(jù)字段攜帶信息存在差異,一共分為4種情況。
“U0”,采集數(shù)據(jù)發(fā)送幀,數(shù)據(jù)由終端節(jié)點(diǎn)發(fā)送至服務(wù)器端,攜帶傳感器采集信息及執(zhí)行結(jié)構(gòu)當(dāng)前執(zhí)行狀態(tài),以JSON數(shù)據(jù)格式存儲(chǔ),轉(zhuǎn)換成字節(jié)數(shù)組存放在數(shù)據(jù)字段,由服務(wù)器程序完成數(shù)據(jù)解析與存儲(chǔ)。
“U1”,數(shù)據(jù)回發(fā)幀,由服務(wù)器端發(fā)送至終端節(jié)點(diǎn),是對(duì)采集數(shù)據(jù)發(fā)送幀的反饋,用戶或服務(wù)器程序依據(jù)數(shù)據(jù)分析決定是否對(duì)當(dāng)前控制狀態(tài)進(jìn)行調(diào)整,數(shù)據(jù)同樣以JSON格式存在數(shù)據(jù)字段。
“C0”,信息配置幀,由服務(wù)器端發(fā)送至終端節(jié)點(diǎn),組態(tài)開發(fā)平臺(tái)生成的配置信息發(fā)送至服務(wù)器端后,服務(wù)器端按照終端節(jié)點(diǎn)組態(tài)信息結(jié)構(gòu)體生成數(shù)據(jù)字段,終端節(jié)點(diǎn)解析后完成對(duì)可配置參數(shù)的更新。
“C1”,設(shè)備信息幀,由服務(wù)器端發(fā)送至終端節(jié)點(diǎn),組態(tài)開發(fā)平臺(tái)生成的設(shè)備信息發(fā)送至服務(wù)器端后,按照終端節(jié)點(diǎn)設(shè)備信息結(jié)構(gòu)體生成數(shù)據(jù)字段,終端節(jié)點(diǎn)解析后,完成對(duì)設(shè)備信息的更新。
服務(wù)器端與組態(tài)開發(fā)平臺(tái),人機(jī)交互系統(tǒng)之間使用WebSocket[10]通信方式,其消息推送功能,能夠保證數(shù)據(jù)的實(shí)時(shí)傳輸,而JSON數(shù)據(jù)格式的使用則實(shí)現(xiàn)了數(shù)據(jù)傳輸?shù)膭?dòng)態(tài)性。其數(shù)據(jù)格式如圖11所示,包含命令名稱、數(shù)據(jù)發(fā)送方、數(shù)據(jù)接收方、傳輸密碼、實(shí)際數(shù)據(jù)等內(nèi)容。通過對(duì)命令名稱區(qū)分組態(tài)開發(fā)平臺(tái)的數(shù)據(jù)配置命令,或人機(jī)交互系統(tǒng)與服務(wù)器程序之間的數(shù)據(jù)交互命令。并可根據(jù)數(shù)據(jù)字段完成界面顯示文本框的動(dòng)態(tài)創(chuàng)建,或數(shù)據(jù)可視化分析等。
圖11 數(shù)據(jù)格式
使用基于NB-ECS框架開發(fā)出來(lái)的組態(tài)開發(fā)平臺(tái),能夠較好實(shí)現(xiàn)可配置開發(fā),目前已應(yīng)用于某智能農(nóng)業(yè)項(xiàng)目中,對(duì)農(nóng)業(yè)大棚的墑情進(jìn)行檢測(cè)。
農(nóng)業(yè)大棚的墑情檢測(cè)反應(yīng)土壤含水量的多寡,受到光照強(qiáng)度、大氣溫度、土壤濕度等因素的影響,對(duì)于不同農(nóng)作物,其生存條件也存在差異,為向農(nóng)作物提供適宜的生存環(huán)境,提高農(nóng)作物的產(chǎn)量,選取如表2所示的傳感器與執(zhí)行機(jī)構(gòu),對(duì)農(nóng)作物的生長(zhǎng)環(huán)境進(jìn)行實(shí)時(shí)檢測(cè),并根據(jù)檢測(cè)結(jié)果進(jìn)行調(diào)整,保證農(nóng)作物的生長(zhǎng)。
表2 傳感器與執(zhí)行機(jī)構(gòu)
針對(duì)上述農(nóng)業(yè)應(yīng)用場(chǎng)景,將組態(tài)開發(fā)平臺(tái)、應(yīng)用服務(wù)器程序與人機(jī)交互系統(tǒng)均運(yùn)行于Windows操作系統(tǒng)中。終端節(jié)點(diǎn)使用ARM Cortex M4F內(nèi)核的低功耗芯片STM32L431Rc,其對(duì)應(yīng)的Flash為256 K,RAM大小為64 K[11],并具有豐富的通用I/O接口。選用ME3616作為NB-IoT通信模組,支持串口AT指令、支持TCP、UDP、MQTT和COAP協(xié)議,具有高性能和低功耗等特點(diǎn)[12]。
依據(jù)相應(yīng)傳感器與執(zhí)行機(jī)構(gòu)選型,選擇合適的引腳接入終端節(jié)點(diǎn),并使用組態(tài)開發(fā)平臺(tái)對(duì)各傳感器與執(zhí)行機(jī)構(gòu)進(jìn)行引腳功能和控制關(guān)系的配置,并設(shè)置采集數(shù)據(jù)名稱,如環(huán)境溫度、土壤濕度等。將配置完成的軟硬件實(shí)體安裝至對(duì)應(yīng)的運(yùn)行環(huán)境中,其監(jiān)控界面如圖12所示。實(shí)驗(yàn)運(yùn)行過程中,可根據(jù)農(nóng)作物需求修改傳感器設(shè)定的閾值參數(shù),保證作物處于合適環(huán)境下,也可增加如二氧化碳濃度、土壤pH值檢測(cè)的傳感器,增加對(duì)環(huán)境狀態(tài)的檢測(cè)與調(diào)節(jié)。長(zhǎng)時(shí)間的運(yùn)行實(shí)驗(yàn)結(jié)果表明,該組態(tài)軟件開發(fā)的嵌入式監(jiān)控系統(tǒng)可以根據(jù)不同農(nóng)業(yè)檢測(cè)目標(biāo)進(jìn)行調(diào)整,快速應(yīng)用于不同的農(nóng)業(yè)場(chǎng)景中。
在對(duì)如工廠環(huán)境、水質(zhì)狀態(tài)等應(yīng)用場(chǎng)景進(jìn)行監(jiān)測(cè)時(shí),也可依據(jù)需求進(jìn)行傳感器與執(zhí)行機(jī)構(gòu)的選擇與接入,利用NB-ECS組態(tài)開發(fā)平臺(tái)進(jìn)行配置開發(fā),同樣能做到監(jiān)控系統(tǒng)的快速開發(fā)與應(yīng)用,體現(xiàn)了本文所述的配置軟件的普適性。
圖12 監(jiān)控界面
本文提出一種面向NB-IoT測(cè)控系統(tǒng)的可配置軟件開發(fā)方法,在NB-IoT測(cè)控系統(tǒng)框架的基礎(chǔ)上引入組態(tài)的思想,對(duì)終端節(jié)點(diǎn)、應(yīng)用服務(wù)器、人機(jī)交互系統(tǒng)進(jìn)行可配置開發(fā)。并闡述了終端節(jié)點(diǎn)的運(yùn)行流程、數(shù)據(jù)結(jié)構(gòu)與存儲(chǔ)形式,組態(tài)開發(fā)平臺(tái)的可配置文件存儲(chǔ),監(jiān)控軟件的數(shù)據(jù)庫(kù)設(shè)計(jì)與界面生成,通信協(xié)議等的實(shí)現(xiàn)方法,從而完成對(duì)基于 NB-IoT 的測(cè)控軟件的流程、界面和數(shù)據(jù)的可配置,在不重新編寫程序的情況下,簡(jiǎn)化軟件開發(fā)過程。最后以智能農(nóng)業(yè)的可配置開發(fā)為例,驗(yàn)證該開發(fā)方法的可行性和通用性。實(shí)驗(yàn)結(jié)果表明,運(yùn)用該方法開發(fā)的NB-IoT嵌入式監(jiān)控軟件能夠滿足多變的用戶需求,也能提高開發(fā)效率,具有一定的通用性。