摘 要: 根據農田環(huán)境的水、空氣、土壤環(huán)境的需求,設計了基于ZigBee無線傳感器網絡的智能灌溉系統(tǒng)。具體分析了系統(tǒng)功能,設計了總體結構。探討了基于.Net的智能灌溉系統(tǒng)上位機的功能需求、系統(tǒng)架構、實現(xiàn)方案及關鍵技術等。
關鍵詞: ZigBee; 無線傳感器; .Net; 智能灌溉系統(tǒng); 上位機
中圖分類號:TP315 文獻標志碼:A 文章編號:1006-8228(2012)12-61-04
Design and implementation of PC software for intelligent irrigation system
Zhao Zhenqi
(Wuxi Machinery and Electron Higher Professional and Technical School, Wuxi, Jiangsu 214028, China)
Abstract: According to the requirements of water, air and soil in farmland environment, an intelligent irrigation system is designed, based on wireless sensor network ZigBee. The system function is analyzed and overall structure is designed. The function demand, system architecture, concrete implementation scheme and key technology of intelligent irrigation system principal machine based on .Net are discussed.
Key words: ZigBee; wireless sensor; .Net; intelligent irrigation system; PC
0 引言
在水資源緊缺的條件下,要實現(xiàn)灌溉農業(yè)的可持續(xù)發(fā)展,就需要灌溉更加精確智能。在不影響農作物生長發(fā)育的前提下,按照農作物需水要求準確及時地預報,并實現(xiàn)水量的自動控制,精確施予。目前,主要采用先進的物聯(lián)網技術與傳統(tǒng)農業(yè)生產相結合的辦法,通過研發(fā)先進的傳感器、灌溉控制設備、功能強大的計算機灌溉管理軟件等來實現(xiàn)科學灌溉,提高農業(yè)效益[1]。
由于全球氣候的惡化和水污染等原因,水資源短缺已經成為全球性的問題。在各大園林、農業(yè)及高爾夫灌溉項目中,越來越多的人認識到了節(jié)水灌溉的重要性。為了保證人工植被和農作物的正常生長,節(jié)水灌溉系統(tǒng)起到了至關重要的作用。
1 系統(tǒng)主要功能
我們設計并制作出具有監(jiān)視、控制、環(huán)境數(shù)據的不間斷采集、整理、統(tǒng)計、繪圖功能的智能灌溉系統(tǒng),以實現(xiàn)優(yōu)化科學灌溉。該系統(tǒng)適用于庭院、園林、農田等灌溉場所。主要包括以下功能:
⑴ 根據CO2濃度自動控制電磁閥的開關,與CO2發(fā)生器配套使用;
⑵ 根據土壤的干濕度自動控制電磁閥的開關,與噴灌、微灌、滴灌等管道系統(tǒng)配套使用;
⑶ 根據空氣的干濕度自動控制電磁閥的開關,與加/降溫、加/除濕等設備配套使用。
2 總體結構設計
Zigbee是基于IEEE802.15.4標準的低功耗局域網協(xié)議。根據這個協(xié)議規(guī)定的技術是一種短距離、低功耗的無線通信技術。其特點是近距離、低復雜度、自組織、低功耗、低數(shù)據速率、低成本。主要適合用于自動控制和遠程控制領域,可以嵌入各種設備。
無線網關實現(xiàn)了ZigBee、GPRS、以太網、串口的網絡互聯(lián)和協(xié)議轉換,集成了符合ZigBee協(xié)議標準的JN5121系列通訊模塊,GPRS模塊,以太網接口,RS232接口。并具有通訊距離遠、抗干擾能力強、組網靈活等優(yōu)點和特性;可實現(xiàn)一點對多點、多點對多點的串口設備間的數(shù)據透明傳輸,也可以根據用戶的需要定制軟件;可按照星形網絡、網狀網絡以及樹狀網絡組網。兼容FCC Part 15, ETSI ETS 300-328和日本的ARIB STD-T16標準。主要應用領域:煤礦/油田設備遠程監(jiān)控、電力/水利設備遠程監(jiān)控、遠程智能抄表/線纜取代、工業(yè)、農業(yè)自動化控制、樓宇、路燈智能控制[2]。
本系統(tǒng)設計由三個部分組成:監(jiān)控中心、無線網關、無線路由節(jié)點。其中,監(jiān)控中心主體是服務器和上位機;無線網關集成了符合ZigBee協(xié)議標準的JN5121系列通訊模塊,GPRS模塊,以太網接口,RS232接口,負責將各節(jié)點的數(shù)據發(fā)送給上位機處理,或接收上位機發(fā)送的指令并傳送給各節(jié)點;無線路由節(jié)點可以有多個,集成了CO2濃度傳感模塊、土壤的干濕度傳感模塊、空氣的干濕度傳感模塊和ARM模塊。系統(tǒng)組成框圖如圖1所示。
3 硬件原理
本系統(tǒng)的傳感節(jié)點硬件采用CC2530,如圖2所示。CC2530是用于2.4-GHz IEEE 802.15.4、ZigBee和RF4CE應用的一個真正的片上系統(tǒng)(SoC)解決方案。它能夠以非常低的總材料成本建立強大的網絡節(jié)點。CC2530結合了領先的RF 收發(fā)器的優(yōu)良性能,業(yè)界標準的增強型8051 CPU,系統(tǒng)內可編程閃存,8-KB RAM和許多其他強大的功能。CC2530有四種不同的閃存版本:CC2530F32/64/128/256,分別具有32/64/128/256KB的閃存。CC2530具有不同的運行模式,使得它特別適應超低功耗要求的系統(tǒng)。運行模式之間的轉換時間短,進一步確保了低能源消耗[3]。
4 上位機的設計
4.1 功能需求
以太網通信方式是物聯(lián)網智能灌溉系統(tǒng)與計算機最主要的通信方式,采用UDP通信協(xié)議層,多線程方式進行數(shù)據交互。
上位機需要單獨具備以太網通信界面,除了實現(xiàn)物聯(lián)網智能灌溉系統(tǒng)以太網通信命令中列出的各項命令之外,還需要以下幾個重要功能。
⑴ 網絡拓撲,顯示物聯(lián)網智能灌溉系統(tǒng)所有已經注冊的設備節(jié)點物理區(qū)域視圖,主要用于直觀地反映設備節(jié)點的分布概況,用于設備故障定位。在視圖上,雙擊設備節(jié)點圖標能夠自動顯示該節(jié)點的實時數(shù)據信息;如果設備有故障或告警,節(jié)點圖標應該改變自身顏色警示操作人員。
⑵ 數(shù)據查詢,實時記錄物聯(lián)網智能灌溉系統(tǒng)的當前和歷史數(shù)據,提供用戶對數(shù)據按日期和設備標識查詢的功能。根據數(shù)據容量和數(shù)據訪問并發(fā)性的要求,建議數(shù)據庫采用專用的數(shù)據庫管理軟件,例如SQL Server 2005。
⑶ 數(shù)據分析,根據數(shù)據庫內查詢的數(shù)據繪制圖表(折線圖或餅圖等),顯示數(shù)據的分布和趨勢,提供用戶環(huán)境參數(shù)的歷史數(shù)據和做出灌溉決策的參考信息。
⑷ 分布式軟件,可以在多個計算機上同時打開上位機軟件,軟件之間相互協(xié)調,每個上位機作出的參數(shù)修改都能在其他上位機軟件上顯示出操作記錄,參數(shù)設置具有并發(fā)性,多個上位機軟件進行同一參數(shù)的設置不會沖突,參數(shù)設置完成后,其他上位機界面會同步更新。
4.2 上位機架構
本系統(tǒng)采用.Net三層架構。三層架構(3-tier application) 通常意義上的三層架構就是將整個業(yè)務應用邏輯上劃分為:表示層(USL)、業(yè)務邏輯層(BLL)、數(shù)據訪問層(DAL)。三層架構是一個支持可抽取、可替換的“抽屜”式架構,符合“高內聚,低耦合”的思想,所以這些層可以單獨開發(fā),單獨測試[4]。具體的三層架構的分層結構圖,如圖3所示。
4.3 開發(fā)工具的選擇
.NET是一個開發(fā)平臺,它定義了一種公用語言子集(Common Language Subset, CLS)。.NET統(tǒng)一了編程類庫,提供了對下一代網絡通信標準,可擴展標記語言(XML)的完全支持,使軟件的開發(fā)變得容易。.NET與Windows平臺緊密集成,是一種面向網絡、支持各種用戶終端的開發(fā)平臺環(huán)境。
SQL SERVER 2005對SQL Server 2000中已經存在的特性進行了加強。加強了T-SQL(事務處理SQL),整合了符合.NET規(guī)范的語言(可以在數(shù)據庫管理系統(tǒng)中執(zhí)行.NET代碼以充分利用.NET功能),使自身帶有支持對用戶自定義數(shù)據庫中存儲的數(shù)據進行加密的功能,生成多活動結果集(允許從單個的客戶端到數(shù)據庫保持一條持久的連接,以便在每個連接上擁有超過一個的活動請求)等。
基于上述原因,我們選擇.NET架構C#語言開發(fā),作為系統(tǒng)開發(fā)的工具。開發(fā)人員必須掌握的預備知識和工具有:①UDP通訊編程(UDP包測試工具的使用);②多線程;③Chart控件的使用;④調試工具的使用。
5 數(shù)據庫表結構
數(shù)據庫名稱:ZigDB。主要包括設備狀態(tài)信息表(如表1所示)、設備信息表(如表2所示)、設備類別表(如表3所示)、系統(tǒng)設置表、權限表、用戶表等。
6 系統(tǒng)功能模塊
系統(tǒng)上位機模塊包括四個主要功能模塊:實時監(jiān)測模塊、數(shù)據查詢分析模塊、權限管理模塊和系統(tǒng)管理模塊。每一個模塊中設計了若干子模塊。系統(tǒng)上位機功能模塊圖,如圖4所示。
[系統(tǒng)上位機模塊][實時檢測模塊][數(shù)據查詢模塊][權限管理模塊][系統(tǒng)管理模塊][設備分布概況][節(jié)點實時信息][讀寫上下閾值][實時圖形顯示][歷史數(shù)據查詢][圖表報表分析][角色管理][權限管理][用戶管理][備份還原數(shù)據][設備注冊維護][設備采樣維護]
圖4 系統(tǒng)上位機功能模塊圖
7 上下位機通信的方式
本系統(tǒng)主要采用兩種與上位機通信的方式。
⑴ 本地調試端口,采用RS232串口通信方式,用于和計算機直連后進行數(shù)據通信,同時,對智能灌溉系統(tǒng)進行設備注冊和網絡參數(shù)配置也使用該通信方式。
⑵ 遠程通信端口,采用以太網通信方式,用于和遠端計算機進行數(shù)據通信,主要功能是上報智能灌溉系統(tǒng)各傳感器的數(shù)據,以及獲取修改相關參數(shù)的上下限閾值。
8 主要窗口與關鍵技術
8.1 主要窗口
上位機軟件主要包括以下幾個窗口。
⑴ 主窗口(FormMain):主要包括監(jiān)聽線程Run()方法,用于實現(xiàn)輪詢,先采樣放入緩沖區(qū)然后入庫。
⑵ 網絡拓撲窗口(FormNetworkTop):顯示AP結點拓撲位置,主要包括AP結點圖標的類型和位置,鼠標MouseDown()、MouseUp()、MouseMove()事件處理等。
⑶ 設備狀態(tài)窗口(FormOneEq):主要包括發(fā)送信息給傳感器sendThreshold()、跨線程訪問控件UpdateUI()、設置最大閾值和最小閾值。
⑷ 設備序列號的設置窗口(FormEqpSN):主要包括一些按鈕事件處理btnSave_Click()、btnDel_Click()、btnUpdate_Click(),實現(xiàn)對設備序列號的增刪改查的操作。
⑸ 數(shù)據查詢窗口(FormBrowseHisData):主要包括根據查詢條件顯示查詢結果和CHART圖表。涉及btnBrow_Click()、dgvBrowResult_DataBindingComplete()等事件處理。
8.2 關鍵技術
8.2.1 輪詢監(jiān)聽
主程序(FormMain)中監(jiān)聽線程Run()方法代碼,主要根據通訊協(xié)議的要求,通過輪詢方式,主要采用基于System.Net,System.Net.Sockets空間的UdpClient類實現(xiàn)UDP通信,向設備發(fā)送命令,從而獲取傳感器數(shù)據信息,然后解析數(shù)據(包括進制轉換),并記錄到數(shù)據庫表中。
部分代碼如下:
private void Run()
{ byte [] buffer=new byte[9];
while (true)
{ Try
{ strEqSn=StaticCommon.EqSn[ii];
buffer[0]=buffer[1]=0xef; //發(fā)送標識符
buffer[2]=0x06; //發(fā)送長度
//序列號組的規(guī)則為拆封設備序列號為3個字節(jié)
buffer[3]=Convert.ToByte(strEqSn.Substring(0,2));
buffer[4]=Convert.ToByte(strEqSn.Substring(2,2));
buffer[5]=Convert.ToByte(strEqSn.Substring(4,2));
buffer[6]=0x10; //命令字為單字節(jié)表示
//命令選項為命令字的輔助標記部分,區(qū)分同一類型命令的不同功能
//命令參數(shù)的長度不定,在設置類命令中為需要設置的具體參數(shù)數(shù)值
buffer[7]=0x00;
//校驗和為從應答標識符到應答參數(shù)包含的字節(jié)內數(shù)值累加和
byte x=0;
for (int i=0; i<8; i++) x+=buffer[i];
buffer[8]=x;
StaticCommon.lstbuffer[ii]=buffer; //送到臨時緩沖區(qū)
udp.Send(buffer, buffer.Length, ipp); //UDP方式發(fā)送
Thread.Sleep(200);
StaticCommon.lstrev[ii]=udp.Receive(ref ipp); //間隔0.2秒接受數(shù)據
AddData(StaticCommon.lstrev[ii]); //記錄到數(shù)據庫表
Thread.Sleep((int)StaticCommon.ssi.SpanTime);
//間隔用戶指定時間
ii++;
if (ii>=StaticCommon.EqSn.Count) ii=0;
//在指定的設備數(shù)中循環(huán)
}
catch (Exception ex) //異常處理
{……}
}
}
以上各傳感器數(shù)據信息參數(shù)的計算公式如下:
二氧化碳濃度:CO2數(shù)據=CO2數(shù)據1×256+CO2數(shù)據2
土壤濕度:SOIL數(shù)據=SOIL數(shù)據
日照度:SUN數(shù)據=SUN數(shù)據1×256×256×256+SUN數(shù)據2×256×256+SUN數(shù)據3×256+SUN數(shù)據4
空氣溫度:TEMP數(shù)據=TEMP數(shù)據-40
空氣濕度:HUMI數(shù)據=HUMI數(shù)據
8.2.2 跨線程訪問控件
在多線程編程中,經常要在工作線程中去更新界面顯示,而在多線程中直接調用界面控件的方法是錯誤的做法,一般采用Invoke和BeginInvoke解決這個問題。它們的共同之處是參數(shù)為delegate(委托),委托的方法是在Control的線程上執(zhí)行的,也就是UI線程,這樣確保在多線程中安全地更新界面顯示。Invoke在擁有此控件的基礎窗口句柄的線程上執(zhí)行指定的委托;而BeginInvoke則在創(chuàng)建控件的基礎句柄所在線程上異步執(zhí)行指定委托。本系統(tǒng)主要采用Invoke方法。
實現(xiàn)輪詢式訪問多節(jié)點設備,調用UpdateUI方法多線程實時更新采樣數(shù)據,圖形化各設備各傳感器的參數(shù)狀態(tài),如果當前某參數(shù)值超出上下限閾值范圍,及時顯示警告信息,并記錄在庫表中,供操作者進行分析。
while (true)
{ Try
{ this.Invoke(new System.EventHandler(UpdateUI),
StaticCommon.lstrev[StaticCommon.num]);
Thread.Sleep((int)StaticCommon.ssi.SpanTime);
}
catch (Exception ex) //異常處理
{…… } }
9 調試效果
在歷史數(shù)據查詢界面操作中,用戶根據條件查詢,圖形化顯示不同時間段及不同設備的CO2濃度、空氣溫濕度、土壤濕度和日照強度等歷史信息。數(shù)據查詢顯示結果圖,如圖5所示。
10 結束語
經過學校、企業(yè)、農業(yè)部門的共同努力,智能灌溉系統(tǒng)順利通過了驗收,在省農業(yè)廳進行了應用推廣,效果良好。在系統(tǒng)地、不間斷地采集環(huán)境數(shù)據后,上體機軟件對這些數(shù)據進行整理、統(tǒng)計、繪圖。使用者不但能實時掌握田間農作物的信息,而且能根據設置的參數(shù)自動控制設備,達到了農業(yè)的智能化和高效化。隨著我國移動互聯(lián)網的發(fā)展,我們將進一步研發(fā)本系統(tǒng)的智能移動客戶端應用軟件,使用戶更方便地掌控作物環(huán)境,更好地為農業(yè)現(xiàn)代化服務。
參考文獻:
[1] 顧建華,嚴國軍.遠程控制農田自動灌溉系統(tǒng)研制[J].軟件,2012.6:10
[2] 牛新征,梁帆,周明天.基于無線傳感器的物聯(lián)網網絡拓撲發(fā)現(xiàn)算法
研究[J].計算機科學,2012.36(4):118-122
[3] 倪瑛,傅大梅.基于無線傳感器網絡的溫室監(jiān)測系統(tǒng)的設計[J].南京
工業(yè)職業(yè)技術學院學報,2010.4:39-41
[4] 傅仁軒.基于無線傳感器網絡的遠程自動抄表系統(tǒng)設計[J].現(xiàn)代電子
技術,2011.5:150-152