王東 楊杰
摘要:針對溫室大棚上位機采用LabVIEW、OneNet等公有云平臺開發(fā)存在需要授權(quán)、需要公網(wǎng)支持或者數(shù)據(jù)不受控等問題,文章介紹了一種基于插件的上位機開發(fā)方式,根據(jù)軟件界面的功能特點,將界面劃分成內(nèi)容展示區(qū)、菜單和按鈕功能區(qū)、PAD區(qū)等通用模塊,利用C#的反射功能,將通用模塊設計為插件掛載到工作臺上,實現(xiàn)功能與界面的分離,提高系統(tǒng)的穩(wěn)定性和可擴展性。經(jīng)實踐驗證,該系統(tǒng)穩(wěn)定可靠。
關鍵詞:插件;上位機;MQTT;C#
中圖分類號:TP311.5
文獻標志碼:A
0 引言
近年來,隨著經(jīng)濟的不斷發(fā)展,人們對各類經(jīng)濟作物的需求越來越大,為提高經(jīng)濟作物的產(chǎn)量以及應對四季變化,各種農(nóng)業(yè)設施投入也越來越大,溫室大棚也由傳統(tǒng)的簡易溫室大棚向智能化大棚轉(zhuǎn)變。伴隨著信息技術的高速發(fā)展,我國已通過信息技術實現(xiàn)對溫室大棚的遠程管理,從而提高了溫室大棚環(huán)境監(jiān)測的效率,降低了工作人員的勞動強度,也使環(huán)境監(jiān)測更加準確和及時。大量研究人員對此進行了研究,如陳煒明等[1]采用單片機控制傳感器采集大棚內(nèi)環(huán)境參數(shù),并通過CC1101 射頻模塊將數(shù)據(jù)傳輸?shù)街锌貑纹瑱C,實現(xiàn)對各類設施的控制和相關信息的顯示;黃力等[2]設計了由各類硬件設施采集溫室大棚的環(huán)境參數(shù),并通過智能綜合網(wǎng)關將數(shù)據(jù)上傳到中國移動打造的PaaS物聯(lián)網(wǎng)開放平臺,實現(xiàn)數(shù)據(jù)的管理及交互;舒丹丹等[3]在溫室大棚中組建了ZigBee無線傳感網(wǎng)絡,將采集的數(shù)據(jù)統(tǒng)一匯總后再經(jīng)WiFi網(wǎng)關上傳到上位機和手機App客戶端;李國利等[4]基于ESP32監(jiān)控系統(tǒng)的下位機,并使用Blinker 作為物聯(lián)網(wǎng)接入方案,設計上位機手機App,實現(xiàn)了溫室大棚數(shù)據(jù)的監(jiān)測;侯波等[5]將GSM作為無線數(shù)據(jù)傳輸?shù)耐?,LabVIEW作為上位機數(shù)據(jù)處理平臺實現(xiàn)溫室大棚的環(huán)境監(jiān)測系統(tǒng);楊青青等[6]通過Arduino UNO 為系統(tǒng)主控板采集環(huán)境參數(shù),并通過通信模塊將數(shù)據(jù)上傳到OneNet云平臺,實現(xiàn)了上位機微信小程序的數(shù)據(jù)展示效果;張君雁等[7]利用.Net Framework4.0、開源數(shù)據(jù)庫MySQL5.5和串口通信開發(fā)了溫室大棚的HMI程序;周萬禹等[8]利用STM32單片機開發(fā)了溫室大棚的下位機系統(tǒng),并通過NB-IoT通信模塊將數(shù)據(jù)上傳到華為OceanConnet物聯(lián)網(wǎng)平臺,實現(xiàn)了對溫室大棚環(huán)境的監(jiān)測;熊琰等[9]利用C#語言開發(fā)了基于ZigBee的校園火災防范系統(tǒng)上位機軟件,利用串口通信可以展示各監(jiān)測點的狀態(tài)。從以上的文獻中可知,溫室大棚監(jiān)控系統(tǒng)主要分為上位機和下位機兩部分,下位機采用單片機對環(huán)境參數(shù)進行采集,通過無線或串口通信將數(shù)據(jù)上傳到上位機實現(xiàn)展示,而上位機的開發(fā)主要包括由中國移動開發(fā)的OneNet等現(xiàn)成物聯(lián)網(wǎng)平臺或采用LabVIEW等軟件進行自定義開發(fā)。雖然OnetNet等公有云平臺功能強大,運行穩(wěn)定,但必須有外網(wǎng)支持,同時還受限于平臺的各類規(guī)范,數(shù)據(jù)可能存在安全隱患。自定義的開發(fā)方式能利用已有的開發(fā)模塊和開發(fā)模式,數(shù)據(jù)管理能夠受控,容易形成自有的知識產(chǎn)權(quán),且運行環(huán)境可以根據(jù)項目的需要選擇因特網(wǎng)或局域網(wǎng)。因此本文介紹一種基于插件的溫室大棚監(jiān)控系統(tǒng)上位機軟件開發(fā)方式,軟件利用插件實現(xiàn)界面與功能的分離,同時基于MQTT通信協(xié)議,能夠及時接收和向客戶端發(fā)送溫室大棚的實時數(shù)據(jù),使系統(tǒng)具有良好的穩(wěn)定性和可擴展性。
1 總體方案介紹
溫室大棚監(jiān)控系統(tǒng)的主要目的是監(jiān)控溫室大棚的環(huán)境參數(shù),并根據(jù)情況對溫室大棚內(nèi)的設施設備進行控制,整個系統(tǒng)包括用于數(shù)據(jù)采集和控制的下位機及數(shù)據(jù)存儲處理的上位機兩個部分,如圖1所示。
下位機由單片機和用于環(huán)境監(jiān)測的傳感器如光照、濕度、溫度等傳感器和無線通信模塊等構(gòu)成。上位機主要用于接收和存儲由下位機上傳的數(shù)據(jù)、歷史數(shù)據(jù)展示、用戶管理、客戶端實時數(shù)據(jù)展示等。為了提高上位機軟件的穩(wěn)定性和可維護性,系統(tǒng)采用插件的方式進行設計開發(fā),所有的功能模塊都掛接到系統(tǒng)的工作臺上,由工作臺對所有的模塊統(tǒng)一管理。
2 上位機功能介紹
根據(jù)總體方案,上位機主要實現(xiàn)三大部分功能:一是與下位機對接,對下位機進行管理及控制;二是對終端用戶管理,并向用戶提供數(shù)據(jù)查詢和展示;三是基礎功能,即各類通信協(xié)議對接及數(shù)據(jù)存儲。為方便各終端與上位機之間的及時通信,上位機選擇基于TCP的MQTT通信協(xié)議,各模塊如圖2所示。
3 上位機系統(tǒng)設計
本系統(tǒng)設計的運行環(huán)境為Windows 7及以上系統(tǒng),采用運行于.NET Framework和.NET Core(完全開源,跨平臺)的高級程序設計語言C#開發(fā)。移動客戶端單獨進行開發(fā),只需要通過網(wǎng)絡與上位機進行交互即可。
為提高系統(tǒng)的可靠性、穩(wěn)定性和可維護性,未來在不修改現(xiàn)有源代碼的基礎上能夠進行功能擴展,本文設計了基于插件的框架,并在此基礎上實現(xiàn)上位機的各種功能。
3.1 插件框架設計
根據(jù)上位機總體框圖,上位機分為不同的功能模塊,因此插件框架主要實現(xiàn)各類功能模塊的管理,實現(xiàn)各功能與界面之間的分離,降低偶合。根據(jù)常用軟件的界面布局和功能特點,將軟件的主要界面抽象為內(nèi)容展示區(qū)、菜單和按鈕功能區(qū)、PAD區(qū)等通用模塊,利用C#的反射功能,將通用模塊設計為插件掛載到工作臺上,實現(xiàn)功能與界面的解耦。菜單和工具欄主要用于啟動命令,而中間的內(nèi)容展示區(qū)和PAD區(qū)分別代表了兩種典型的界面:VIEW和PAD。VIEW顯示主要內(nèi)容,PAD顯示日志、屬性等簡要信息,且可以隱藏。菜單和工具欄上的命令,需要由用戶點擊或者設置為由插件框架在啟動時自動調(diào)用,而VIEW和PAD的顯示需要由其他命令來啟動或者在啟動時由框架自動調(diào)用。
菜單或工具按鈕在用戶點擊時,等同于調(diào)用某一功能函數(shù)。為規(guī)范和統(tǒng)一調(diào)用,所有菜單和工具欄按鈕的執(zhí)行函數(shù)都由一個ICommand接口來對應,包括一個Run成員函數(shù),對應該命令需要執(zhí)行的功能。每個按鈕或者菜單項都有相應的圖標、名稱、是否有效等屬性,在接口中只有一個Run函數(shù)是不足以表達的,因此定義抽象類AbstractMenuCommand繼承于ICommand,以便默認實現(xiàn)一些相應的屬性。每個實際的菜單項或工具欄按鈕都對應一個具體的繼承于AbstractMenuCommand的實現(xiàn)類,并在其中實現(xiàn)ICommand接口的成員,以實現(xiàn)具體要執(zhí)行的功能。
框架中的內(nèi)容展示區(qū)是軟件的主要界面,根據(jù)軟件的功能定義,它們顯示的界面各不相同,但主框架并不知道該區(qū)域應加載的內(nèi)容,若直接定義各類控件,無法將界面和功能進行分離,也無法對其進行擴展,因此,將主界面抽象成一個IViewContent接口,里面的用戶自定義控件(自定義控件中的子控件由用戶自行設計,即具體顯示的界面),使得主框架只需要維護一個IViewContent列表,便能知道當前打開的主界面窗口,而具體的用戶自定義控件由接口規(guī)范為ViewContentControl屬性。當其他插件要與該界面進行交互時,只要找到某個IViewContent,將其屬性ViewContentControl轉(zhuǎn)換成對應的用戶自定義控件的具體實現(xiàn),即可對其中的成員或函數(shù)等進行操作,實現(xiàn)無需修改主界面的代碼就可通過其他插件對其進行操作,從而實現(xiàn)了用戶功能和界面的相互分離,更加符合軟件工程的要求,使開發(fā)的軟件具有更好的穩(wěn)定性和可維護性。具體的類圖如圖3所示。
為便于所有插件能在不同的地方對框架中的插件進行操作,本文利用單例模式設計工作臺類,即WorkBenchSingleTon類,并在其成員中增加靜態(tài)WorkBench屬性,代表整個軟件的界面框架,在此類中加載所有其他功能插件。而此靜態(tài)屬性也方便其他模塊調(diào)用以實現(xiàn)相互通信,從而使其他所有插件都可以通過該屬性對工作臺上的各類插件進行查詢和操作。
軟件具體的功能則由具體的配置文件進行配置,框架在啟動時讀取該配置文件,并根據(jù)具體的信息在相應的執(zhí)行文件中進行反射調(diào)用生成。如在生成過程中程序設置全局錯誤捕捉,遇到錯誤彈出對話框提示錯誤信息,并退出程序。
3.2 上位機功能設計
3.2.1 客戶端管理模塊
根據(jù)上位機的總體框架可知,本軟件主要實現(xiàn)客戶端管理(MQTT)、數(shù)據(jù)儲存管理、用戶管理、數(shù)據(jù)查詢等功能。其中,客戶端管理需要MQTT服務,應在軟件啟動時啟動該服務,確保軟件打開后,MQTT客戶端能連接。在本框架中,自啟動的服務有兩種方式,一種是沒有界面要求的插件,可以直接集成在框架的工作臺中(WorkBench)中,另一種是有界面的插件,使用一個VIEW來承載,在軟件啟動時,自動啟動該VIEW,兩種方式各有優(yōu)缺點。如果集成在工作臺中,將導致功能與框架集成,不利用模塊的重復使用;如果集成在VIEW中,那么該窗口可能被關閉,需要做好關閉VIEW時清理對象,避免重新打開時報錯。本軟件采用在工作臺中集成MQTT通信模塊,降低各模塊與MQTT之間交互的難度。
MQTT服務采用MQTTnet模塊,該通信模塊使用C#語言開發(fā),目前還支持.net core,因此能夠?qū)崿F(xiàn)跨平臺,是一款同時支持服務端和客戶端的高性能MQTT通信模塊。在實現(xiàn)MQTTServer時,該模塊只需要應用MqttServer OptionsBuilder類初始化mqttServer類,同時設置服務器啟動、停止、客戶端連接、斷開,訂閱主題、取消訂閱主題、消息到達等事件處理函數(shù)。由于消息處理函數(shù)為單獨的線程,在收到數(shù)據(jù)進行界面更新時需要使用委托進行,最終的效果如圖4所示。
3.2.2 用戶管理和數(shù)據(jù)存儲模塊
用戶管理主要記錄各客戶端的用戶名和密碼,確保上傳的數(shù)據(jù)都經(jīng)過授權(quán),避免數(shù)據(jù)遭到破壞以及登錄本軟件的用戶信息。
數(shù)據(jù)存儲模塊的主要功能是將用戶數(shù)據(jù)和MQTT模塊接收到的數(shù)據(jù)存儲到數(shù)據(jù)庫,在MQTT服務的信息到達事件中將接收到的數(shù)據(jù)保存到數(shù)據(jù)庫。由于節(jié)點上報的環(huán)境數(shù)據(jù)是按約定協(xié)議傳輸?shù)?,因此,中心基站在上傳MQTT報文時,直接將每次上報的數(shù)據(jù)作為一條MQTT報文的載荷即可,在上位機軟件保存時再對載荷進行解析后保存到數(shù)據(jù)庫。為了提高開發(fā)的效率,本軟件使用MSSQL Server存儲數(shù)據(jù),使用Entity Framework作為數(shù)據(jù)庫訪問中間件,并將所有的表都使用自增主鍵。
3.2.3 數(shù)據(jù)查詢模塊
數(shù)據(jù)查詢模塊和前面幾個模塊類似,都設計成一個ViewContent,在其上放置自定義用戶控件。在用戶控件上,根據(jù)需要將曲線繪制模塊作為該控件的主要控件,添加其他條件查詢的控件,本模塊相對比較獨立,只需要與數(shù)據(jù)庫進行交互,而無需與其他模塊進行交互,具體布局如圖5所示。
4 結(jié)語
利用C#的反射功能和配置文件,設計插件框架,讓軟件所有的功能都以插件的形式加載到軟件的工作臺中,對軟件主要功能界面和操作功能進行歸類抽象為按鈕(菜單)、主界面、PAD區(qū)等,并通過單例模式可以方便查找到工作臺中的所有功能插件,實現(xiàn)功能與界面的分離,各功能模塊可以根據(jù)接口獨立開發(fā),實現(xiàn)面向接口的開發(fā),提高軟件的穩(wěn)定性和可靠性以及在不修改源代碼的情況下對軟件進行擴展。本文在此基礎上開發(fā)的溫室大棚監(jiān)控系統(tǒng)上位機軟經(jīng)實際長時間運行,穩(wěn)定可靠,達到了預期目的。
參考文獻
[1]陳煒明,李水峰,林穎意,等.基于無線通信的溫室大棚數(shù)據(jù)采集系統(tǒng)設計[J].電子設計工程,2017(12):72-76.
[2]黃力,魏文沖.基于OneNET云平臺的農(nóng)業(yè)溫室大棚上限閾值遠程監(jiān)控的實現(xiàn)[J].信息與電腦(理論版),2020(1):163-165.
[3]舒丹丹,許鐘,強大壯,等.基于ZigBee的溫室大棚監(jiān)控系統(tǒng)的設計[J].遼寧師專學報(自然科學版),2020(3):80-84.
[4]李國利,周創(chuàng),牟福元.基于ESP32的溫室大棚環(huán)境遠程監(jiān)控系統(tǒng)設計[J].中國農(nóng)機化學報,2022(3):47-52.
[5]侯波,徐小華,胡曉飛.基于LabVIEW和GSM的溫室大棚環(huán)境遠程監(jiān)控系統(tǒng)設計[J].江蘇農(nóng)業(yè)科學,2015(1):393-395.
[6]楊青青,秦芹,鞏倩倩,等.基于云平臺的溫室大棚環(huán)境數(shù)據(jù)采集與控制系統(tǒng)研究[J].無線互聯(lián)科技,2022(5):45-46.
[7]張君雁,楊晨輝,張志強.溫室大棚環(huán)境控制系統(tǒng)研究[J].成都大學學報(自然科學版),2018(1):67-70.
[8]周萬禹,胡乃瑞,楊美琪,等.溫室大棚環(huán)境監(jiān)測及控制系統(tǒng)的設計[J].電子測試,2020(5):45-47.
[9]熊琰.基于ZigBee的校園火災防范系統(tǒng)設計與實現(xiàn)[J].現(xiàn)代信息科技,2021(12):168-171,176.
(編輯 王雪芬)
Design of upper computer software of greenhouse monitoring system
Wang Dong1, Yang Jie2
(1.School of Intelligent Manufacturing, Chongqing Industry & Trade Polytechnic, Chongqing 408000, China;
2.School of Artificial Intelligence, Chongqing Industry & Trade Polytechnic, Chongqing 408000, China)
Abstract: Aiming at the problems of authorization, public network support or uncontrolled data when the upper computer in the greenhouse is developed using LabVIEW or public cloud platforms such as OneNet ,etc. This paper introduces a plugin based upper computer development method. According to the functional characteristics of the software interface, the interface is divided into general modules such as content display area, menu and button functional area, PAD area and so on. Design a universal module as a plugin to be mounted on the workbench, achieving separation of functions and interfaces, and improving system stability and scalability. After practical verification, the system is stable and reliable.
Key words: plugins; upper computer; MQTT; C#