周 欣,王宜懷,姚望舒,葛新越
(蘇州大學 計算機科學與技術學院,江蘇 蘇州 215006)
隨著窄帶物聯網(narrow band internet of things,NB-IoT)[1]基站的廣泛部署,相應的物聯網監控系統也逐步增多,如文獻[2]和文獻[3]將NB-IoT應用于智能抄表領域,文獻[4]和文獻[5]針對智能農業場景。這類以數據采集為主,簡單控制為輔的測控系統,其功能存在一定相似性,每次研發一套完整的應用系統會造成重復工作,且開發周期較長。文獻[6]中設計了一種面向物聯網應用系統,為NB-IoT應用系統的開發提供方法。但各類物聯網應用開發過程涉及內容較多,包含終端程序、應用服務器及人機交互系統的感知、計算、通信等功能的實現,開發難度較大,且整體系統的適應性與靈活性無法滿足日益變化的用戶需求。組態軟件以配置的形式靈活組合各功能模塊,生成適合不同用戶需求的應用軟件,具有易于開發、便于擴展的特點。
基于上述情況,本文在使用NB-IoT進行通信的嵌入式測控系統的基礎上,引入組態的思想,提出一種對流程、數據與界面進行配置開發的低成本、高通用性、高可靠性的智能監控軟件開發方法。該方法對終端節點、應用服務器、人機交互系統的數據采集、實時控制、嵌入式通信、數據處理等功能進行配置,使其適用性與靈活性得以加強。用戶可以通過修改配置觸發動態配置,做到快速開發,同時也減少了直接更改軟件的風險。
本文使用的NB-IoT測控系統總體架構如圖1所示,由NB-IoT終端節點、NB-IoT基站、蜂窩物聯核心網、IoT業務平臺、應用服務器及人機交互系統組成。其中NB-IoT基站、蜂窩物聯核心網和IoT業務平臺由運營商負責管理維護,主要負責部署站點,優化通信接口和為應用層提供相關服務。

圖1 NB-IoT測控系統總體架構
NB-IoT終端節點、應用服務器和人機交互系統作為測控系統的主要部分,由系統開發者負責功能設計與實現,各部分之間相互配合完成數據采集、傳輸、顯示和控制的功能。NB-IoT終端節點采集信息發送到應用服務器存儲,用戶通過人機交互系統進行數據查看,也可通過人機交互系統發送控制命令,由終端節點解析后對執行機構進行控制。
在NB-IoT測控系統架構中引入組態的思想,對NB-IoT終端節點、應用服務器和人機交互系統進行可配置開發,形成了一種基于組態和NB-IoT通信的可配置開發軟件(NB-IoT embedded configuration software,NB-ECS)。NB-ECS架構如圖2所示,分為組態開發平臺和運行平臺兩個部分。

圖2 基于NB-IoT的可配置軟件架構
(1)組態開發平臺
組態開發平臺是可配置軟件架構的核心部分,負責提供對數據、界面、流程的可配置服務,包括對終端接入傳感器與執行機構的引腳功能配置、控制關系配置、設備信息配置;對應用服務器與人交互系統構成的監控軟件進行數據配置、功能界面配置與用戶信息配置,具有較強的可配置功能,能夠適用于大多數簡單監控場景。
(2)運行平臺
運行平臺包含NB-IoT終端節點、應用服務程序與人機交互系統的運行環境與程序,通過組態開發平臺對各個部分進行配置,運行平臺中的各部分內容通過加載相應的配置信息完成功能的初始化與運行,形成一套完整的NB-IoT測控系統架構。
針對NB-ECS架構的可配置特性,結合監控軟件的功能需求,對NB-IoT終端節點、組態開發平臺、監控平臺及數據通信協議進行設計開發。在此框架下,測控系統由組態開發平臺完成功能配置生成相應的應用軟件,下載至對應的運行環境中運行。同時運行狀態下,具備一定的可配置功能,配合不同的通信命令實現配置信息的動態更新。
NB-IoT終端節點的硬件部分由主控芯片最小系統、NB-IoT通信模組外圍電路,傳感器接口和其它輔助電路組成,與接入傳感器一同構成具有信息采集控制功能的硬件實體,如圖3所示。

圖3 NB-IoT終端硬件實體
主控芯片最小系統為芯片提供電源、晶振、寫入等服務,保證芯片的運行;通信模組外圍電路包含電源模塊,eSIM卡電路和GNSS天線電路,并利用電平轉換電路與主控芯片通過UART通信方式連接;主控芯片通過ADC、GPIO、PWM等接口電路對外提供引腳服務,與傳感器和執行機構進行連接,完成數據的采樣與控制功能,本文采用USB接口的形式便于傳感器的自由組合。
主控芯片提供軟件服務,負責數據采集、運算和控制等操作,并能配合相應的命令實現參數的動態可配置。針對以上功能,將主控芯片的Flash區分為4個部分:BootLoader區、用戶代碼區、更新代碼區和配置信息區。BootLoader區作為駐留在主控芯片中具有一定的硬件設備啟動及程序跳轉功能,能與更新代碼區配合實現對用戶程序的更新。用戶代碼區是用戶應用程序的存儲區域,與配置信息區相互配合,實現終端節點的可配置及數據采集控制等功能。
用戶程序作為終端節點軟件的核心模塊,其主程序運行流程如圖4所示。初始配置參數通過組態開發平臺存儲在對應Flash區域(即配置信息區),芯片啟動后讀取位于該區域中的配置信息,并對相關硬件模塊初始化和中斷使能,隨后進入NB-IoT通信模塊的啟動,獲取IMSI號,建立與基站及服務器的連接;啟動完畢后,進入主循環。主循環按照其數據采集、運算、控制和動態配置的功能,可劃分成6個任務:
(1)采集任務:隨著定時器中斷計時達到設定時間,執行該任務。該任務中,依次使用配置的傳感器對外界環境進行檢測,例如對溫濕度、開關狀態等模擬量與開關量的輸入狀態進行采集,并保存相應的采集結果。
(2)LCD顯示任務:針對需要使用LCD進行屏幕顯示的應用,支持LCD顯示功能,將采集信息與控制狀態顯示在LCD屏幕上。
(3)通信發送任務:使用NB-IoT作為通信方式,將當前采集信息、控制狀態等數據進行組幀,發送至應用服務器進行數據庫存儲與顯示。
(4)通信解析任務:隨著數據接收中斷接收到完整數據幀,在此任務中進行數據幀解析,根據不同命令執行控制任務或參數配置更新任務。
(5)控制任務:分為自動控制和遠程控制兩種,自動控制時可根據預先設置的控制關系,依照采集信息,對相應的執行機構進行控制;也可根據數據幀解析結果對執行機構進行遠程調控。
(6)參數配置更新任務:作為動態可配置功能的主要執行部分,此任務可根據解析的數據對各類參數進行動態的更新,并存入配置信息區保存,使得在程序運行過程中,兼具數據采集和參數可配置功能。

圖4 用戶主程序運行流程
除上述任務之外還包括兩個中斷服務例程:
(1)定時器中斷:用于計時,提供時間節拍,并為采集任務的執行提供服務;
(2)數據接收中斷:NB-IoT通信模組與UART之間通過AT指令進行通信,利用UART接收中斷完成數據接收與組幀操作,為通信解析任務提供服務。
各任務與中斷服務例程的相互配合,保證用戶程序的運行。根據終端節點的運行流程,對終端節點的可配置信息進行定義,結構體關系如圖5所示,包含設備信息與控制邏輯兩部分。設備信息結構體較為簡單,是對節點名稱、網絡服務地址等進行描述,該字段用于網絡連接地址設置和存儲設備唯一標識,用于區分不同節點;控制邏輯由多個結構體嵌套組成,表示的是傳感器與執行機構的模塊屬性及其之間的控制關系,涉及各類開關量與模擬量對應采集變量名稱以及運行狀態范圍。通過組態開發平臺進行參數配置,各參數值預先存儲在相應的Flash區域中,結合用戶代碼實現嵌入式終端節點的可配置開發以及配置參數的動態修改。
2.2.1 交互界面設計
組態開發平臺按照NB-ECS結構分為嵌入式配置與監控軟件配置,使用Microsoft Visual Studio作為開發工具進行C# WinForm應用窗體的開發,借助WeifenLuo.WinFormsUI.Docking實現多界面的組合布局,界面按照圖6劃分成4個部分,具體功能與實現如下:

圖5 組態信息結構體

圖6 組態開發平臺配置界面
(1)工具欄窗體。用于各類可配置模塊的展示,通過選擇對應的模塊完成相應的配置。根據測控系統的一般功能,按照終端節點與監控平臺進行區分,提取不同類型的可配置模塊,如開關量輸入配置、模擬量輸出配置、控制關系、通信連接等。
以TreeView控件作為展示平臺生成相應的可配置參數列表、終端節點與監控平臺作為控件父節點,各可配置模塊作為子節點,以圖元的形式呈現。每個圖元模塊包含模塊名稱、父節點分類,顯示圖標、單擊事件和對應可配置窗體。當選擇對應的可配置模塊時觸發相應的窗體創建事件,進行參數的配置。
(2)已配置信息窗體。在工具欄中選擇的模塊完成配置后,配置信息會顯示在已配置信息區。除此之外,還可以對已配置內容進行編輯修改。
(3)程序代碼或配置文件窗體。在完成配置后會自動生成相應的配置文件或程序代碼,對應文件將顯示在此窗體中,配置模式下不可被手動修改。
(4)信息輸出窗體。用于狀態提示,可以顯示運行狀態、編譯生成狀態信息等信息。
通過上述組態開發平臺各部分窗體的相互配合,可完成對具體項目及功能的配置,而項目相關的配置信息也會存儲在對應的配置文件中。
2.2.2 配置文件存儲格式
嵌入式端的配置信息在組態開發平臺中通過JSON文件按照鍵值對的方式存儲,結構較為簡單,易于解析[7]。不同芯片引腳及其可復用功能存在差異,pin.json文件記錄芯片型號、各引腳編號與引腳可復用功能,并保存當前引腳使用狀態,其對應格式如圖7所示。

圖7 pin.json文件配置格式
當選擇工具欄中對應的開關量輸入與輸出,模擬量輸入與輸出模塊時,根據引腳是否被使用狀態(use字段)及可復用功能(fun字段),與模塊名稱對比,篩選出相應的可配置引腳,配置成功后設置該引腳use字段為使用。
同時已配置信息窗體對應的控制邏輯關系數據使用配置參數文件config.json記錄,其結構如圖8所示,對已配置引腳及其屬性、控制關系、設備信息等進行保存。與pin.json文件相互配合,構成終端節點相應的可配置數據,實現引腳功能的可復用與可配置,也實現了終端節點功能、流程的可配置。

圖8 config.json文件配置格式
上述JSON文件用于在當前開發平臺中保存可配置信息,實際配置信息在相應編譯后按照相應結構體存儲在終端節點對應的Flash區域中,也可在運行過程中進行動態的修改。
服務器端程序和人機交互系統組成的監控軟件的可配置信息由工程樣式、通信連接設置、監聽設備、通信命令幀、數據類型定義5個部分。
(1)窗體/工程樣式。存儲簡單設置窗體名稱、圖標與設定樣式;
(2)通信連接設置。存儲服務器連接地址,由服務器IP和端口號構成。服務器程序使用不同的端口區分服務,對應于使用不同的通信協議與終端節點與人際交互系統進行通信,分別使用HCIComTarget和WebsocketTarget作為標簽進行區分。終端節點與人機交互系統分別使用設定地址進行連接;
(3)監聽設備。存儲終端節點的唯一標識——IMSI號,表明當前程序偵聽的終端設備;
(4)通信命令幀。存儲本程序使用的通信命令,不同通信命令的數據格式存在不同,通過此處進行定義數據幀各字段內容,便于區分與解析;
(5)數據類型定義。是對通信命令幀的補充,對通信命令中的各字段的詳細信息進行定義,包含多個標簽,如字段變量名稱、變量顯示名稱、數據類型、可讀可寫狀態。各標簽之前為并列關系,可進行動態的刪減,配合進行數據的可配置。
上述信息使用XML文件進行存儲,具有結構化和可擴展的特點,并可進行標簽的自定義[8],有助于數據節點的定義和動態增減,輸出的文件存儲格式如圖9所示。服務器程序根據XML文件進行動態解析,實現對服務器數據庫存儲格式,界面顯示設置以及數據可視化顯示等的動態修改,與通信協議相互配合實現了數據傳輸和界面顯示的可配置。

圖9 監控系統XML文件配置格式
監控平臺是對終端采集數據進行存儲與顯示的軟件,服務器程序在接收到來自終端節點發送的數據,解析后按照預定格式寫入數據庫,并將相關數據發送至連接的人機交互系統顯示。作為監控軟件的核心部分,數據庫中各數據表通過XML文件進行完善,各數據表名稱與功能見表1。

表1 數據
對XML文件的數據類型定義字段進行解析提取,將預先設定的變量名稱、變量類型等信息存儲寫入數據屬性表中。該數據表內容可隨配置數據進行動態修改,保證與通信命令一致。并利用橫縱表轉換存儲[9]的方式,自動完成上行數據表、下行數據表及采樣數據表的創建。
數據可配置的實現,也確定了人機交互系統的數據界面的動態可配置。人機交互系統通過獲取服務器程序發送的數據,解析生成相應的界面并進行數據的動態顯示,從而實現了界面的可配置。
數據在終端節點、組態開發平臺與監控平臺之間進行傳遞。終端節點的傳感器采集信息與執行機構執行情況在主控芯片進行整合,并通過通信模組發送至服務器端,再由服務器端進行數據推送給相應的人機交互系統。組態開發平臺的配置信息及人機交互系統返回的信息都將發送至服務器端解析,再返回給終端節點,完成配置或控制功能。對應于通信流程中的不同的階段使用不同的通信方式及數據格式。
終端節點使用NB-IoT通信方式,始終與服務器程序進行連接。其主要數據幀格式如圖10所示。

圖10 終端程序數據幀格式
幀頭、幀尾各為兩字節,確定一幀數據的開始與結束;幀長為不包含幀頭、幀長、CRC校驗、幀尾字段的數據長度,由于NB-IoT通信模組限制,單幀數據長度在500字節以內(即N不超過500字節);CRC校驗位的使用保證數據的完整性與準確性;命令、IMSI號、服務器IP、服務器端口及發送時間為通信固定字段。根據不同的命令,對應于不同的數據幀,其數據字段攜帶信息存在差異,一共分為4種情況。
“U0”,采集數據發送幀,數據由終端節點發送至服務器端,攜帶傳感器采集信息及執行結構當前執行狀態,以JSON數據格式存儲,轉換成字節數組存放在數據字段,由服務器程序完成數據解析與存儲。
“U1”,數據回發幀,由服務器端發送至終端節點,是對采集數據發送幀的反饋,用戶或服務器程序依據數據分析決定是否對當前控制狀態進行調整,數據同樣以JSON格式存在數據字段。
“C0”,信息配置幀,由服務器端發送至終端節點,組態開發平臺生成的配置信息發送至服務器端后,服務器端按照終端節點組態信息結構體生成數據字段,終端節點解析后完成對可配置參數的更新。
“C1”,設備信息幀,由服務器端發送至終端節點,組態開發平臺生成的設備信息發送至服務器端后,按照終端節點設備信息結構體生成數據字段,終端節點解析后,完成對設備信息的更新。
服務器端與組態開發平臺,人機交互系統之間使用WebSocket[10]通信方式,其消息推送功能,能夠保證數據的實時傳輸,而JSON數據格式的使用則實現了數據傳輸的動態性。其數據格式如圖11所示,包含命令名稱、數據發送方、數據接收方、傳輸密碼、實際數據等內容。通過對命令名稱區分組態開發平臺的數據配置命令,或人機交互系統與服務器程序之間的數據交互命令。并可根據數據字段完成界面顯示文本框的動態創建,或數據可視化分析等。

圖11 數據格式
使用基于NB-ECS框架開發出來的組態開發平臺,能夠較好實現可配置開發,目前已應用于某智能農業項目中,對農業大棚的墑情進行檢測。
農業大棚的墑情檢測反應土壤含水量的多寡,受到光照強度、大氣溫度、土壤濕度等因素的影響,對于不同農作物,其生存條件也存在差異,為向農作物提供適宜的生存環境,提高農作物的產量,選取如表2所示的傳感器與執行機構,對農作物的生長環境進行實時檢測,并根據檢測結果進行調整,保證農作物的生長。

表2 傳感器與執行機構
針對上述農業應用場景,將組態開發平臺、應用服務器程序與人機交互系統均運行于Windows操作系統中。終端節點使用ARM Cortex M4F內核的低功耗芯片STM32L431Rc,其對應的Flash為256 K,RAM大小為64 K[11],并具有豐富的通用I/O接口。選用ME3616作為NB-IoT通信模組,支持串口AT指令、支持TCP、UDP、MQTT和COAP協議,具有高性能和低功耗等特點[12]。
依據相應傳感器與執行機構選型,選擇合適的引腳接入終端節點,并使用組態開發平臺對各傳感器與執行機構進行引腳功能和控制關系的配置,并設置采集數據名稱,如環境溫度、土壤濕度等。將配置完成的軟硬件實體安裝至對應的運行環境中,其監控界面如圖12所示。實驗運行過程中,可根據農作物需求修改傳感器設定的閾值參數,保證作物處于合適環境下,也可增加如二氧化碳濃度、土壤pH值檢測的傳感器,增加對環境狀態的檢測與調節。長時間的運行實驗結果表明,該組態軟件開發的嵌入式監控系統可以根據不同農業檢測目標進行調整,快速應用于不同的農業場景中。
在對如工廠環境、水質狀態等應用場景進行監測時,也可依據需求進行傳感器與執行機構的選擇與接入,利用NB-ECS組態開發平臺進行配置開發,同樣能做到監控系統的快速開發與應用,體現了本文所述的配置軟件的普適性。

圖12 監控界面
本文提出一種面向NB-IoT測控系統的可配置軟件開發方法,在NB-IoT測控系統框架的基礎上引入組態的思想,對終端節點、應用服務器、人機交互系統進行可配置開發。并闡述了終端節點的運行流程、數據結構與存儲形式,組態開發平臺的可配置文件存儲,監控軟件的數據庫設計與界面生成,通信協議等的實現方法,從而完成對基于 NB-IoT 的測控軟件的流程、界面和數據的可配置,在不重新編寫程序的情況下,簡化軟件開發過程。最后以智能農業的可配置開發為例,驗證該開發方法的可行性和通用性。實驗結果表明,運用該方法開發的NB-IoT嵌入式監控軟件能夠滿足多變的用戶需求,也能提高開發效率,具有一定的通用性。