任崇浩,張繼軍
灌溉系統(tǒng)輔助開發(fā)平臺的設計與實現(xiàn)
任崇浩,張繼軍*
山東農(nóng)業(yè)大學信息科學與工程學院, 山東 泰安 271018
針對灌溉系統(tǒng)項目受限于硬件環(huán)境導致開發(fā)效率低的問題,基于Aardio語言和SQLite數(shù)據(jù)庫,采用MVC設計模式及多線程技術,面向客戶端/服務器架構(gòu)灌溉系統(tǒng),設計了可提供虛擬測試環(huán)境的輔助開發(fā)平臺。首先分析了客戶端/服務器架構(gòu)灌溉系統(tǒng)的組網(wǎng)特點以及平臺功能的實現(xiàn)原理,然后依據(jù)上述分析設計了虛擬硬件模型、虛擬硬件數(shù)據(jù)庫及硬件環(huán)境模擬器,最后完成平臺構(gòu)建并將其應用于某灌溉系統(tǒng)項目的開發(fā)。經(jīng)測試,平臺可實現(xiàn)對傳感控制設備輸入輸出特性的模擬,減少開發(fā)人員對真實硬件環(huán)境的依賴,提高開發(fā)效率與靈活性。
灌溉系統(tǒng); 平臺開發(fā); 軟件設計
隨著物聯(lián)網(wǎng)技術的日益普及,以灌溉系統(tǒng)為代表的農(nóng)業(yè)信息化系統(tǒng)正逐步發(fā)展,為傳統(tǒng)的農(nóng)業(yè)灌溉提供了信息化手段,提高了生產(chǎn)效率,節(jié)省了水利資源。由于此類項目的開發(fā)及部署需要依賴硬件設備環(huán)境,因此存在開發(fā)環(huán)境搭建復雜、問題排查困難、開發(fā)靈活性差等問題。
針對上述問題,目前有兩種解決方案:第一種方案是采用Mock技術,例如基于Java的JMock,基于C++的Google Mock和Cpputest等技術[1-3]。這些技術通過偽造接口的方式輔助項目的開發(fā)與測試,僅適用于與其采用同種編程語言的項目。由于偽造的接口與項目存在耦合,且不同項目采用的編程語言或技術有所不同[4,5],因此Mock技術缺乏通用性,不適合作為首選方案。第二種方案是采用硬件環(huán)境模擬方法,主要分為三類:第一類是虛擬傳感技術[6,7],實現(xiàn)難度大且缺少通用性;第二類是以Matlab為代表的硬件在環(huán)仿真和以LabVIEW為代表的虛擬儀器[8-10],仿真能力強但配置復雜,且屬于商業(yè)產(chǎn)品,存在經(jīng)濟成本;第三類是用于輔助軟件開發(fā)的虛擬硬件環(huán)境[11-15],多應用于特定領域,特別是用于嵌入式應用軟件系統(tǒng)的開發(fā)。前兩類研究傾向于“仿真”,而本文則屬于第三類的研究,更關注對硬件環(huán)境輸入輸出特性的模擬。
基于上述分析,提出一種面向客戶端/服務器(C/S)架構(gòu)灌溉系統(tǒng)的輔助開發(fā)平臺(Auxiliary Development Platform,簡稱ADP),通過模擬灌溉系統(tǒng)所需要的硬件環(huán)境輸入輸出(I/O)特性,為灌溉系統(tǒng)的開發(fā)提供虛擬測試環(huán)境,提高開發(fā)效率和靈活性。
C/S架構(gòu)灌溉系統(tǒng)運行在基于網(wǎng)絡路由器組建的局域網(wǎng)中,通過TCP/IP通信遠程控制硬件設備(例如繼電器、各類相關的傳感器等,我們統(tǒng)稱為“被控硬件設備”),從而實現(xiàn)對灌溉環(huán)境的監(jiān)控,一個灌溉系統(tǒng)的組網(wǎng)結(jié)構(gòu)如圖1所示。
圖 1 灌溉系統(tǒng)組網(wǎng)結(jié)構(gòu)
為了便于說明與描述,我們將“被控硬件設備”分為“主設備”和“子設備”兩大類。主設備是指具有獨立IP,可直接作為客戶端的硬件設備,如串口服務器、網(wǎng)絡繼電器、網(wǎng)絡傳感器等;而子設備是指不具有獨立IP,需依靠主設備中繼才能與服務器通信的硬件設備,如普通傳感器、普通繼電器等。
我們將上述設備接收服務器指令并返回執(zhí)行結(jié)果的過程稱為響應。通常來說,存在兩種響應路徑:一是經(jīng)過網(wǎng)絡路由器和主設備,由子設備負責響應;二是經(jīng)過網(wǎng)絡路由器到達主設備,由網(wǎng)絡繼電器、網(wǎng)絡傳感器等主設備負責響應。由于服務器只關注響應結(jié)果,并不關心經(jīng)過哪種路徑,因此主設備與子設備的組合仍可視為主設備,如串口服務器與普通傳感器的組合可視為網(wǎng)絡傳感器。這里稱這類組合為“抽象主設備”,并與主設備統(tǒng)稱為客戶端,則響應路徑可抽象為:經(jīng)網(wǎng)絡路由器至客戶端,由客戶端負責響應。如圖2大括號左側(cè)所示。
由于服務器根據(jù)IP識別客戶端并進行通信,因此可利用本地環(huán)回網(wǎng)絡作為虛擬局域網(wǎng),并創(chuàng)建與真實客戶端(主設備或抽象主設備)具有相同IP、端口及響應行為的虛擬客戶端(統(tǒng)稱虛擬硬件),從服務器的角度看,兩種客戶端沒有實質(zhì)區(qū)別,唯一的區(qū)別僅在于:前者的響應數(shù)據(jù)來源于真實硬件環(huán)境(如圖2實線框區(qū)域所示),后者的響應數(shù)據(jù)來源于用戶定義的響應規(guī)則(如圖2虛線框區(qū)域所示)?;谏鲜鲈恚蓸?gòu)建ADP,使開發(fā)人員能夠批量創(chuàng)建虛擬硬件以模擬真實硬件環(huán)境的I/O特性,實現(xiàn)虛擬測試環(huán)境,輔助灌溉系統(tǒng)的開發(fā)與測試。
圖 2 ADP功能原理
ADP主要包括虛擬硬件模型、虛擬硬件數(shù)據(jù)庫、硬件環(huán)境模擬器三大功能主體。虛擬硬件模型是一種可編程的、允許自定義響應規(guī)則的程序模板,分為通信層、翻譯層和內(nèi)核層(詳細內(nèi)容見第2節(jié)虛擬硬件模型的設計);虛擬硬件數(shù)據(jù)庫用于存放用戶定義的虛擬硬件數(shù)據(jù),包括硬件數(shù)據(jù)表和規(guī)則模塊表(詳細內(nèi)容見第3節(jié)虛擬硬件數(shù)據(jù)庫的設計);硬件環(huán)境模擬器以虛擬硬件模型為依據(jù),以虛擬硬件數(shù)據(jù)庫內(nèi)的硬件數(shù)據(jù)為基礎,啟動虛擬硬件實例并對其運行狀態(tài)進行監(jiān)控,分為運行環(huán)境層和數(shù)據(jù)交互層(詳細內(nèi)容見第4節(jié)硬件環(huán)境模擬器的設計)。ADP為功能主體提供可視化界面,主要包括讀寫虛擬硬件數(shù)據(jù)庫、命令硬件環(huán)境模擬器啟動或關閉虛擬硬件實例、接收硬件環(huán)境模擬器反饋的虛擬硬件運行狀態(tài)等功能??傮w設計如圖3所示。
圖 3 ADP總體設計
虛擬硬件模型本質(zhì)上是根據(jù)輸入響應輸出的映射。針對硬件設備指令及通信協(xié)議不統(tǒng)一的特點,為提高模型通用性,采用通信層(Message Layer,簡稱M層)、翻譯層(Translation Layer,簡稱T層)、內(nèi)核層(Core Layer,簡稱C層)三層架構(gòu)模式,其中,M層負責消息轉(zhuǎn)發(fā),T層負責消息解碼和編碼,C層負責消息響應。具體結(jié)構(gòu)流程如圖4所示。
圖 4 虛擬硬件模型結(jié)構(gòu)流程圖
為方便表述,定義為虛擬硬件輸入(Input)消息所組成的向量,為虛擬硬件輸出(Output)消息所組成的向量。
=[1,2,3,…,i] (1)
=[1,2,3,…,o] (2)
則對于i?,?{1,2,…,},存在o?,?{1,2,…,},使得映射(i)=o成立。
對于T層,定義、分別代表解碼(Decode)與編碼(Encode)結(jié)果組成的向量,對于C層,定義代表響應(Response)結(jié)果組成的向量。
由于M層僅負責收發(fā)消息,不進行其它處理,因此M(i)=i,M(o)=o,則對任意的i?,存在T(i)=d,(d)=r,T(r)=e,d?,r?,e?,,,?{1,2,…,}。由于T編碼的結(jié)果由M直接轉(zhuǎn)發(fā),因此e=o,可推得,對于任意i?,都可由公式(6)得出o?。
由于灌溉項目的開發(fā)會涉及多個硬件設備,為實現(xiàn)虛擬硬件的重用,避免重復創(chuàng)建,需要利用虛擬硬件數(shù)據(jù)庫保存用戶定義好的虛擬硬件,以供隨時調(diào)用。數(shù)據(jù)庫主要包括硬件數(shù)據(jù)表和規(guī)則模塊表,具體如下。
(1)硬件數(shù)據(jù)表。用于存放虛擬硬件完整信息,分為兩類數(shù)據(jù):一是內(nèi)部識別數(shù)據(jù),包括硬件ID、名稱、類型和描述信息,用于ADP識別和管理;二是行為規(guī)則數(shù)據(jù),包括通信規(guī)則、翻譯規(guī)則、響應規(guī)則,對應虛擬硬件模型的通信層、翻譯層和內(nèi)核層,用于存放各層接口的實現(xiàn)函數(shù)。具體結(jié)構(gòu)如表1所示,具體接口函數(shù)及其說明見第5節(jié)表3。
表 1 硬件數(shù)據(jù)表
(2)規(guī)則模塊表。用于存放規(guī)則名稱、規(guī)則內(nèi)容、規(guī)則類型等數(shù)據(jù),用戶創(chuàng)建虛擬硬件時,可從規(guī)則模塊表中直接選用已有規(guī)則,或在所選規(guī)則基礎上進行編輯,實現(xiàn)通信、翻譯、響應規(guī)則的重用,具體結(jié)構(gòu)如表2所示。
表 2 規(guī)則模塊表
為保證擴展性,虛擬硬件啟動時會動態(tài)加載數(shù)據(jù)庫中各層接口函數(shù)的實現(xiàn)代碼并執(zhí)行。因此,雖然ADP目前實現(xiàn)的接口函數(shù)主要針對C/S架構(gòu)灌溉系統(tǒng),但開發(fā)人員可以自行編寫接口實現(xiàn)代碼并存儲在虛擬硬件數(shù)據(jù)庫中,使其可應用于其它系統(tǒng)架構(gòu)或通信協(xié)議。
硬件環(huán)境模擬器負責虛擬硬件的啟動、監(jiān)控和關閉,由于虛擬硬件需要實時偵聽服務器指令,因此采用多線程技術防止阻塞。模擬器分為運行環(huán)境層、數(shù)據(jù)交互層兩層,其中,運行環(huán)境層負責接收并執(zhí)行來自ADP的命令,數(shù)據(jù)交互層負責接收虛擬硬件報告的運行狀態(tài)并轉(zhuǎn)發(fā)給ADP。模擬器各層、ADP以及虛擬硬件均為獨立線程,主要通過消息循環(huán)實現(xiàn)線程通信。具體設計如下。
(1)啟動虛擬硬件。當運行環(huán)境層接到啟動虛擬硬件的命令時,會依據(jù)虛擬硬件模型創(chuàng)建獨立線程,在線程中動態(tài)加載通信層、翻譯層、內(nèi)核層接口實現(xiàn)函數(shù),完成虛擬硬件實例化,并記錄虛擬硬件ID及線程ID,此時灌溉系統(tǒng)服務器將與實例建立連接。
(2)監(jiān)控虛擬硬件。虛擬硬件在響應服務器指令的同時,會向數(shù)據(jù)交互層的消息循環(huán)發(fā)送線程消息,報告運行狀態(tài),數(shù)據(jù)交互層會將虛擬硬件的信息和運行狀態(tài)統(tǒng)一提交至ADP監(jiān)控界面。
(3)關閉虛擬硬件。由于虛擬硬件對服務器指令的持續(xù)監(jiān)聽本質(zhì)上也是一種循環(huán),與消息循環(huán)存在沖突,因此無法通過消息循環(huán)控制虛擬硬件,這里利用以虛擬硬件ID命名的線程標志位進行控制:當硬件環(huán)境模擬器接到關閉虛擬硬件的命令時,首先將標志位設置為假,然后等待虛擬硬件線程ID返回停止信號(虛擬硬件內(nèi)部通過標志位判斷是否需要停止,由用戶在通信層接口函數(shù)內(nèi)實現(xiàn),見第5節(jié)圖6),若超時,則直接終止目標線程。
硬件環(huán)境模擬器具體運行結(jié)構(gòu)如圖5所示。
圖 5 硬件環(huán)境模擬器運行結(jié)構(gòu)圖
技術選型主要包括編程語言的選擇和數(shù)據(jù)庫的選擇。對于數(shù)據(jù)庫的選擇,由于ADP屬于單機程序,無需考慮高并發(fā)情況,因此輕量級的開源數(shù)據(jù)庫SQLite是最優(yōu)方案;對于編程語言的選擇,綜合考慮資源占用、執(zhí)行速度、可擴展性以及可視化界面的開發(fā)效率,國產(chǎn)編程語言Aardio具有明顯的優(yōu)勢,尤其是其允許在運行時動態(tài)執(zhí)行代碼的特性,為ADP的擴展性提供了良好的基礎,因此選擇Aardio作為開發(fā)語言。
對于ADP的整體實現(xiàn),我們采用MVC的設計方式進行,因篇幅有限不便展示代碼,本小節(jié)僅討論ADP的核心功能,即虛擬硬件實例化的實現(xiàn)方式,主要包括三項內(nèi)容。
(1)為虛擬硬件實例創(chuàng)建單獨的線程。這里需用到Aardio提供的thread.create()函數(shù)。
(2)動態(tài)執(zhí)行接口函數(shù)。虛擬硬件實例化時,首先通過loadcodex()為預留接口動態(tài)加載用戶定義的通信層、翻譯層、內(nèi)核層接口函數(shù)代碼,供主函數(shù)調(diào)用,具體接口說明如表3所示。
表 3 虛擬硬件實例化預留接口
(3)引入纖程機制,使三層接口分工合作。通信層作為纖程,在偵聽指令時擁有線程控制權(quán),接收指令后通過fiber.yield()將控制權(quán)和指令數(shù)據(jù)交給主函數(shù),主函數(shù)調(diào)用翻譯層和內(nèi)核層處理完成后,調(diào)用fiber.resume()將響應數(shù)據(jù)以及線程控制權(quán)返回給通信層。
實例化過程中所采用的關鍵函數(shù)的說明如表4所示,虛擬硬件實例的代碼執(zhí)行流程如圖6所示(有關圖中“標志位”的解釋詳見第4節(jié)“關閉虛擬硬件”)。
表 4 采用的Aardio關鍵函數(shù)
圖 6 虛擬硬件實例代碼執(zhí)行流程
我們所開發(fā)的灌溉系統(tǒng)主要包括灌溉控制、氣象監(jiān)測、土壤墑情監(jiān)測等功能,共涉及2種主設備和5種子設備(如表5所示)。根據(jù)開發(fā)需要,利用ADP創(chuàng)建了5個虛擬硬件(如表6所示),其中,通信層接口函數(shù)基于TCP/IP協(xié)議實現(xiàn);翻譯層接口函數(shù)分兩類實現(xiàn):針對子設備,基于Modbus協(xié)議實現(xiàn),針對主設備,由于其采用字符串格式AT指令,可直接轉(zhuǎn)發(fā);內(nèi)核層接口函數(shù)基于設備指令手冊實現(xiàn),實現(xiàn)代碼不再贅述。
此處以土壤墑情監(jiān)測為例演示ADP,所涉及的虛擬硬件(ID為SQFWQ,詳見表6)以串口服務器和土壤溫濕度電導率傳感器所組成的整體(抽象主設備)為模擬對象,負責向服務器反饋各墑情點的土壤溫度、濕度及電導率。
表 5 設備信息表
表 6 虛擬硬件配置表
啟動灌溉系統(tǒng)服務器以及ID為SQFWQ的虛擬硬件,此時ADP監(jiān)控區(qū)域顯示該虛擬硬件收到了來自服務器的實時指令消息,這些指令已通過翻譯層解碼為字符串格式,如圖7所示。同時,服務器接收并顯示了虛擬硬件的響應消息,共包含4個墑情點的數(shù)據(jù),如圖8所示。
目前,基于ADP開發(fā)的灌溉系統(tǒng)原型產(chǎn)品已投入使用,軟件部分的工作量約2人/月,開發(fā)周期內(nèi)用于現(xiàn)場測試的工作量約6人/日。與傳統(tǒng)的開發(fā)方式相比,利用ADP創(chuàng)建的虛擬測試環(huán)境,85%以上的開發(fā)工作可遠程進行,具有較高的靈活性和效率。圖9和圖10展示了項目實際部署情況。
圖 7 ADP界面
圖 9 灌溉系統(tǒng)主控設備部署圖
圖 10 灌溉系統(tǒng)外景圖
針對灌溉系統(tǒng)項目受限于硬件環(huán)境導致開發(fā)效率低的問題,通過分析C/S架構(gòu)灌溉系統(tǒng)通信特點,提出一種具有三層架構(gòu)的虛擬硬件模型,基于模型構(gòu)建了可提供虛擬測試環(huán)境的輔助開發(fā)平臺,并將其應用到某灌溉系統(tǒng)項目的開發(fā)中,顯著提高了開發(fā)效率和靈活性。與現(xiàn)有硬件仿真模擬的研究成果相比,主要優(yōu)點表現(xiàn)在三點:一是無耦合,利用平臺輔助開發(fā)的項目,無需修改代碼即可直接遷移至真實硬件環(huán)境進行實際測試和部署;二是易使用,用戶可根據(jù)項目需要,通過可視化界面創(chuàng)建并執(zhí)行多種不同規(guī)則的虛擬硬件;三是可編程,允許用戶根據(jù)需要自行實現(xiàn)虛擬硬件通信層、翻譯層、內(nèi)核層的接口函數(shù),使平臺不僅適用于C/S架構(gòu)項目,也可以應用于其它架構(gòu)的項目中。平臺不足之處在于,當前虛擬硬件數(shù)據(jù)庫中的硬件數(shù)據(jù)較少,如果新增不同廠家的設備可能需要重新定義虛擬硬件,針對此問題,下一步的研究工作將主要圍繞豐富虛擬硬件數(shù)據(jù)庫中的硬件數(shù)據(jù)進行,進一步提高平臺的易用性和適用性。
[1] 馮俊池,連堯,董超,等.軟件測試中的Mock輔助生成技術研究[J].電子測量技術,2019,42(6):48-51
[2] 劉小雙,鄧文,王燕.使用Google測試框架的軟件單元測試[J].單片機與嵌入式系統(tǒng)應用,2019,19(10):9-11,15
[3] 羅峰,徐金鵬.基于單元測試的車載時鐘同步協(xié)議開發(fā)方法[J].汽車技術,2019(5):1-5
[4] 田添.基于4G網(wǎng)絡的農(nóng)田灌溉遠程監(jiān)控系統(tǒng)設計與實現(xiàn)[J].山東農(nóng)業(yè)大學學報(自然科學版),2019,50(6):977-979
[5] 姚引娣,王磊,花靜云,等.基于B/S架構(gòu)的LoRa遠程溫室監(jiān)測系統(tǒng)[J].傳感器與微系統(tǒng),2021,40(1):78-80,84
[6] 胡瑾秋,郝笑笑,張來斌.基于虛擬傳感技術的工業(yè)數(shù)據(jù)錯誤診斷方法[J].儀器儀表學報,2018,39(3):29-36
[7] 馮智睿,馬令坤,黃苑玉.一種基于虛擬傳感的雙通道主動降噪方法[J].科學技術與工程,2021,21(6):2242-2247
[8] 吳應新,吳劍橋,楊雨航,等.油電混合果園自動導航車控制器硬件在環(huán)仿真平臺設計與應用[J].智慧農(nóng)業(yè)(中英文),2 020,2(4):149-164
[9] 付春流,陳德旺,尚艷艷,等.基于IAP的硬件在環(huán)測試系統(tǒng)升級研究[J].電子測量技術,2020,43(7):157-160
[10] 周奇勛,李鵬博,劉娜,等.基于LabVIEW的雙余度伺服測控系統(tǒng)設計[J].儀表技術與傳感器,2019(3):72-76
[11] 章陽,華皛,于偉,等.動車組制動系統(tǒng)軟件開發(fā)集成測試平臺研制[J].鐵道機車車輛,2020,40(4):13-20
[12] 成正林,李學明,黃明明,等.機車傳動系統(tǒng)控制邏輯純軟件仿真測試平臺開發(fā)[J].機車電傳動,2016(2):71-74
[13] 王洋,薛靜,劉春龍,等.一種高速系統(tǒng)級虛擬測試環(huán)境實現(xiàn)技術[J].航天控制,2019,37(2):49-54
[14] 曲明成,崔乃剛,吳翔虎,等.嵌入式軟件虛擬化測試技術標準框架研究[J].哈爾濱工業(yè)大學學報,2017,49(5):49-55,121
[15] Sinha S, Goyal NK, Mall R. Reliability and availability prediction of embedded systems based on environment modeling and simulation [J]. Simulation Modelling Practice and Theory, 2020,108(2088–8708):102246
Design and Realization of Auxiliary Development Platform for Irrigation System
REN Chong-hao, ZHANG Ji-jun*
271018,
This paper aims to address the problem of inefficient development of irrigation system projects due to the limitation of hardware environment. Based on the Aardio language and SQLite database, this paper adopts an MVC design pattern and multi-threading technology to design an auxiliary development platform for irrigation systems with client/server architecture, which provides a virtual test environment. First, we analyze the networking characteristics of the client/server architecture irrigation system and the principle of implementing the platform functions. We then design the virtual hardware model, virtual hardware database, and hardware environment simulator based on the above analysis. Finally, we built the platform and applied it to the development of the irrigation system project. We find that the platform can realize the simulation of input and output characteristics of sensing control devices, reduce developers' reliance on actual hardware environments, and improve development efficiency and flexibility.
Irrigation system; platformdevelopment; software design
TP391.9
A
1000-2324(2021)06-1002-07
2021-11-21
2021-11-28
任崇浩(1993-),男,碩士研究生,主要研究方向為農(nóng)業(yè)信息服務技術與工程. E-mail:totomusic@qq.com
通訊作者:Author for correspondence.E-mail:zhangjijun@sdau.edu.cn