孫曉冬 王慶賀 黎蕾 鄭利華
(中國(guó)電子科技集團(tuán)公司第五十八研究所 江蘇省無(wú)錫市 214072)
氣象數(shù)據(jù)在人們?nèi)粘I?、農(nóng)業(yè)工業(yè)生產(chǎn)以及軍事等領(lǐng)域都十分重要,及時(shí)的氣象數(shù)據(jù)能夠?yàn)槿藗冊(cè)谏a(chǎn)生活決策中提供重要的指導(dǎo)依據(jù)。無(wú)線傳感網(wǎng)是大量無(wú)線傳感網(wǎng)節(jié)點(diǎn)組成的網(wǎng)絡(luò),節(jié)點(diǎn)功耗低,數(shù)據(jù)傳輸穩(wěn)定,應(yīng)用前景十分廣闊。本文是用ZigBee通信技術(shù)實(shí)現(xiàn)氣象采集節(jié)點(diǎn)數(shù)據(jù)的局域網(wǎng)的傳輸,使用4G網(wǎng)絡(luò)通信技術(shù)實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)的傳輸。無(wú)線傳感網(wǎng)氣象監(jiān)測(cè)系統(tǒng)需要專(zhuān)用的上位機(jī)軟件實(shí)現(xiàn)對(duì)多個(gè)氣象采集節(jié)點(diǎn)的控制和氣象數(shù)據(jù)的存儲(chǔ)、處理,因此設(shè)計(jì)了該專(zhuān)用的上位機(jī)軟件。
本文闡述的上位機(jī)根據(jù)無(wú)線傳感網(wǎng)氣象監(jiān)測(cè)系統(tǒng)的特點(diǎn)和要求設(shè)計(jì)而成。使用高效的C#編程語(yǔ)言實(shí)現(xiàn)了上位機(jī)軟件,采用Access數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)所采集的氣象數(shù)據(jù)。測(cè)試結(jié)果表明,上位機(jī)軟件能夠?qū)崿F(xiàn)對(duì)氣象采集節(jié)點(diǎn)的控制以及對(duì)氣象數(shù)據(jù)的獲取、存儲(chǔ)和處理,上位機(jī)軟件達(dá)到了設(shè)計(jì)要求。
圖1是無(wú)線傳感網(wǎng)氣象監(jiān)測(cè)系統(tǒng)的整體結(jié)構(gòu)圖,主要分成了三個(gè)部分,分別是氣象采集節(jié)點(diǎn)、無(wú)線網(wǎng)絡(luò)傳輸系統(tǒng)和上位機(jī)軟件,每個(gè)部分實(shí)現(xiàn)不同的功能。
圖1:無(wú)線傳感網(wǎng)氣象監(jiān)測(cè)系統(tǒng)結(jié)構(gòu)圖
氣象采集節(jié)點(diǎn)主要實(shí)現(xiàn)風(fēng)速、風(fēng)向、溫度等氣象信息的采集,通過(guò)ZigBee終端模塊將數(shù)據(jù)傳輸?shù)絑igBee無(wú)線網(wǎng)絡(luò)中,由于該節(jié)點(diǎn)的能量是有限的,所以盡可能的降低功耗以延長(zhǎng)節(jié)點(diǎn)工作時(shí)長(zhǎng);無(wú)線網(wǎng)絡(luò)傳輸系統(tǒng)由ZigBee路由器、無(wú)線傳輸網(wǎng)關(guān)(ZigBee協(xié)調(diào)器和4G DTU模塊組成)組成,ZigBee終端、ZigBee路由器和ZigBee協(xié)調(diào)器組成的網(wǎng)絡(luò)實(shí)現(xiàn)ZigBee局域網(wǎng)內(nèi)的數(shù)據(jù)傳輸,4G DTU傳輸模塊將ZigBee局域網(wǎng)連接到互聯(lián)網(wǎng)中,實(shí)現(xiàn)了遠(yuǎn)程數(shù)據(jù)的傳輸;氣象監(jiān)測(cè)系統(tǒng)上位機(jī)軟件負(fù)責(zé)控制整個(gè)氣象監(jiān)測(cè)系統(tǒng),對(duì)氣象節(jié)點(diǎn)進(jìn)行控制,獲取氣象節(jié)點(diǎn)的數(shù)據(jù),對(duì)氣象數(shù)據(jù)進(jìn)行處理、存儲(chǔ)、顯示以及統(tǒng)計(jì)分析。
一般上位機(jī)總體功能包括數(shù)據(jù)的接收和數(shù)據(jù)的處理兩大部分,包含的功能有通信、指令的發(fā)送、數(shù)據(jù)接收、數(shù)據(jù)顯示、存儲(chǔ)以及后期對(duì)數(shù)據(jù)的各種處理。而編寫(xiě)上位機(jī)軟件需要合適的編程語(yǔ)言實(shí)現(xiàn),C#是微軟公司發(fā)布的一種由C語(yǔ)言和C++語(yǔ)言衍生出來(lái)的面向?qū)ο蟮摹⑦\(yùn)行于.NET Framework之上的高級(jí)編程語(yǔ)言,有許多組件、封裝的函數(shù)可以使用,編程比較高效,可以節(jié)約開(kāi)發(fā)時(shí)間,本文所介紹的上位機(jī)就是使用C#語(yǔ)言編寫(xiě)的。
本文所述上位機(jī)軟件主要包含如下功能:通信配置、節(jié)點(diǎn)管理、數(shù)據(jù)上傳、統(tǒng)計(jì)分析以及用戶(hù)管理等。不同的功能模塊通過(guò)不用的軟件界面來(lái)實(shí)現(xiàn)。
由于氣象監(jiān)測(cè)系統(tǒng)上位機(jī)的功能比較復(fù)雜,在單個(gè)軟件窗體上實(shí)現(xiàn)所有功能過(guò)于擁擠繁雜,故采用多文檔界面(Multiple Document Interface,MDI)窗體來(lái)組織軟件的界面,軟件的界面如圖2所示。
圖2:氣象監(jiān)測(cè)系統(tǒng)上位機(jī)軟件界面
整個(gè)界面主要分為四部分。區(qū)域(1)是菜單區(qū),可根據(jù)不同的菜單選擇不同的功能,區(qū)域(2)是主窗口區(qū)域,是用來(lái)放置子窗口的地方,該區(qū)域放著一個(gè)Panel控件,當(dāng)單擊不同的菜單時(shí),相應(yīng)功能的子窗口就會(huì)切換并顯示在該P(yáng)anel控件中。區(qū)域(3)是節(jié)點(diǎn)列表信息的展示區(qū),每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)顯示子模塊,每個(gè)顯示子模塊都顯示了當(dāng)前節(jié)點(diǎn)的狀態(tài)信息:實(shí)時(shí)數(shù)據(jù)定時(shí)上傳功能是否打開(kāi)、實(shí)時(shí)數(shù)據(jù)上傳間隔是多少、歷史數(shù)據(jù)存儲(chǔ)功能是否打開(kāi)、歷史數(shù)據(jù)存儲(chǔ)間隔是多少,低功耗模式是否打開(kāi)。區(qū)域(4)是運(yùn)行監(jiān)視區(qū),這是一種實(shí)時(shí)的日志監(jiān)視器,可以實(shí)時(shí)顯示上位機(jī)的運(yùn)行信息,可以監(jiān)視軟件的運(yùn)行狀況,對(duì)于該上位機(jī)軟件的使用是很有幫助的。
2.3.1 通信協(xié)議
為了實(shí)現(xiàn)無(wú)線傳感網(wǎng)監(jiān)測(cè)系統(tǒng)各種功能的實(shí)現(xiàn)以及上位機(jī)軟件和多個(gè)氣象采集節(jié)點(diǎn)的正常通信,必須制定上位機(jī)軟件和氣象采集節(jié)點(diǎn)的通信協(xié)議。通訊協(xié)議的格式從左往右如下所示:
節(jié)點(diǎn)編號(hào)(2字節(jié))+讀寫(xiě)(1字節(jié))+命令(1字節(jié))+數(shù)據(jù)長(zhǎng)度(1字節(jié),值為N)+數(shù)據(jù)(N字節(jié))+校驗(yàn)(2字節(jié))。
每個(gè)氣象采集節(jié)點(diǎn)都有一個(gè)唯一的節(jié)點(diǎn)編號(hào),節(jié)點(diǎn)編號(hào)占用2字節(jié);讀寫(xiě)域占用1個(gè)字節(jié),只有兩個(gè)值0x01和0x03,0x01表示上位機(jī)軟件向氣象采集節(jié)點(diǎn)寫(xiě)入數(shù)據(jù),0x03表示上位機(jī)軟件從氣象采集節(jié)點(diǎn)讀出數(shù)據(jù);命令域占用1個(gè)字節(jié),不同的命令對(duì)應(yīng)不同的值;數(shù)據(jù)長(zhǎng)度域占用1個(gè)字節(jié),表示數(shù)據(jù)域有多少個(gè)字節(jié)的數(shù)據(jù);數(shù)據(jù)域是存儲(chǔ)有效數(shù)據(jù)的區(qū)域;校驗(yàn)域占用2個(gè)字節(jié),用于對(duì)整幀數(shù)據(jù)進(jìn)行校驗(yàn),使用CRC16校驗(yàn)的方式,防止傳輸過(guò)程數(shù)據(jù)出現(xiàn)錯(cuò)誤。上位機(jī)和氣象采集節(jié)點(diǎn)之間采用應(yīng)答式的通信方式,上位機(jī)發(fā)送指令后,氣象采集節(jié)點(diǎn)會(huì)返回相應(yīng)的應(yīng)答數(shù)據(jù),如果上位機(jī)沒(méi)有收到氣象采集節(jié)點(diǎn)的應(yīng)答數(shù)據(jù),上位機(jī)可以重新發(fā)送命令。
2.3.2 通訊機(jī)制的設(shè)計(jì)
對(duì)于實(shí)時(shí)數(shù)據(jù)采集的上位機(jī)軟件,通訊部分始終是軟件的重要環(huán)節(jié),實(shí)時(shí)性和可靠性必須有保證,但是由于無(wú)線傳感網(wǎng)氣象監(jiān)測(cè)系統(tǒng)的氣象采集節(jié)點(diǎn)為了減少功耗并不是時(shí)時(shí)在線,可能處于休眠狀態(tài),用常規(guī)的發(fā)送指令的方式可能會(huì)產(chǎn)生許多無(wú)效指令,可靠性低,效率低,因而必須設(shè)計(jì)一種特殊的通訊方式來(lái)提供通信的可靠性和高效性。本文所述的上位機(jī)軟件采用了一種特殊的異步通訊方式,如圖3所示。
圖3:上位機(jī)和下位機(jī)的異步通訊方式
使用上位機(jī)軟件時(shí),單擊某些命令按鈕,上位機(jī)軟件會(huì)產(chǎn)生某些指令,但是并不立刻發(fā)送,而是將指令放到指令雙向鏈表中,另外有一個(gè)線程根據(jù)指令的標(biāo)志決定是否將指令立刻發(fā)出去,對(duì)于不立刻發(fā)出去的指令,根據(jù)氣象節(jié)點(diǎn)休眠時(shí)間表來(lái)發(fā)送指令數(shù)據(jù),只有在判斷當(dāng)前指令要送達(dá)的節(jié)點(diǎn)處于非休眠狀態(tài)時(shí),才會(huì)將指令發(fā)送出去,減少指令發(fā)送的無(wú)效次數(shù)。例如1-1號(hào)節(jié)點(diǎn)被設(shè)置為低功耗模式后,其每分鐘的前10秒處于正常工作狀態(tài),后50秒處于休眠模式,當(dāng)用戶(hù)發(fā)送“實(shí)時(shí)數(shù)據(jù)上傳”命令時(shí),上位機(jī)會(huì)判斷當(dāng)前系統(tǒng)時(shí)間是否處于每分鐘的前10秒鐘,如果處于則將命令立刻發(fā)送,否則等待節(jié)點(diǎn)處于非休眠模式時(shí)才會(huì)將命令發(fā)送出去。用戶(hù)每次可以選中多個(gè)氣象采集節(jié)點(diǎn)進(jìn)行相關(guān)的操作,提高效率。例如如果用戶(hù)想使用上位機(jī)軟件使得氣象采集節(jié)點(diǎn)將實(shí)時(shí)氣象數(shù)據(jù)傳輸?shù)缴衔粰C(jī)軟件,那么用戶(hù)可以選中多個(gè)氣象采集節(jié)點(diǎn),然后下達(dá)上傳實(shí)時(shí)數(shù)據(jù)的指令,選中的這些氣象采集節(jié)點(diǎn)的數(shù)據(jù)就會(huì)陸續(xù)上傳到上位機(jī)。上位機(jī)軟件異步監(jiān)聽(tīng)到數(shù)據(jù)后,進(jìn)行接收操作,將接收到的數(shù)據(jù)放到接收數(shù)據(jù)隊(duì)列中,會(huì)有一個(gè)單獨(dú)的線程對(duì)接收數(shù)據(jù)隊(duì)列中的數(shù)據(jù)進(jìn)行數(shù)據(jù)的分發(fā)、處理等。該通訊方式可以被動(dòng)接收數(shù)據(jù),應(yīng)用靈活,對(duì)于上傳到上位機(jī)的數(shù)據(jù)都會(huì)進(jìn)行有效處理。
無(wú)線傳感網(wǎng)氣象監(jiān)測(cè)系統(tǒng)上位機(jī)軟件包含以下模塊:通信配置模塊、節(jié)點(diǎn)管理模塊、數(shù)據(jù)上傳模塊、統(tǒng)計(jì)分析模塊以及用戶(hù)管理模塊等,不同的模塊對(duì)應(yīng)不同的界面,方便用戶(hù)的使用。上位機(jī)軟件功能模塊圖如圖4所示。
圖4:上位機(jī)軟件功能模塊圖
2.4.1 通信配置模塊
上位機(jī)軟件和無(wú)線傳輸網(wǎng)關(guān)既可以通過(guò)移動(dòng)4G網(wǎng)絡(luò)進(jìn)行通信,也可以直接通過(guò)RS232串口進(jìn)行通信。通信配置模塊就是來(lái)配置這兩種通信方式的。如果使用串口,需要進(jìn)行串口選擇,配置波特率、數(shù)據(jù)位、是否奇偶校驗(yàn)和停止位;如果使用4G網(wǎng)絡(luò)通信,需要配置本地IP、端口號(hào)以及注冊(cè)包。
2.4.2 節(jié)點(diǎn)管理模塊
節(jié)點(diǎn)管理模塊包含節(jié)點(diǎn)信息管理和遠(yuǎn)程節(jié)點(diǎn)管理與維護(hù)兩個(gè)子模塊。節(jié)點(diǎn)信息管理模塊主要實(shí)現(xiàn)添加、刪除、修改和查詢(xún)節(jié)點(diǎn)信息的功能,是對(duì)存儲(chǔ)在PC機(jī)端的節(jié)點(diǎn)信息數(shù)據(jù)的維護(hù)。節(jié)點(diǎn)信息主要包含氣象信息采集節(jié)點(diǎn)的編號(hào)、名稱(chēng)、節(jié)點(diǎn)ZigBee地址以及節(jié)點(diǎn)所處的位置等信息,這些信息都存儲(chǔ)在Access數(shù)據(jù)庫(kù)中。遠(yuǎn)程節(jié)點(diǎn)管理與維護(hù)模塊主要實(shí)現(xiàn)遠(yuǎn)程節(jié)點(diǎn)時(shí)間的校準(zhǔn)和節(jié)點(diǎn)氣象數(shù)據(jù)存儲(chǔ)間隔的設(shè)置, 上位機(jī)通過(guò)無(wú)線傳輸網(wǎng)絡(luò)向氣象采集節(jié)點(diǎn)下達(dá)命令來(lái)實(shí)現(xiàn)節(jié)點(diǎn)時(shí)間的校準(zhǔn)和存儲(chǔ)間隔的設(shè)置。
2.4.3 數(shù)據(jù)上傳模塊
數(shù)據(jù)上傳模塊包括了節(jié)點(diǎn)實(shí)時(shí)數(shù)據(jù)上傳和節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)上傳兩個(gè)子模塊。節(jié)點(diǎn)實(shí)時(shí)數(shù)據(jù)上傳模塊允許用戶(hù)選擇多個(gè)氣象信息采集節(jié)點(diǎn)每隔一定時(shí)間上傳氣象數(shù)據(jù),允許選擇其中一個(gè)節(jié)點(diǎn)來(lái)顯示實(shí)時(shí)接收到的數(shù)據(jù),上位機(jī)軟件會(huì)自動(dòng)繪制今日風(fēng)速曲線、今日溫度曲線等曲線圖。節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)上傳模塊主要功能是允許用戶(hù)獲取節(jié)點(diǎn)存儲(chǔ)的氣象數(shù)據(jù),可以將節(jié)點(diǎn)存儲(chǔ)的所有氣象數(shù)據(jù)上傳,也可以根據(jù)時(shí)間區(qū)間選擇部分氣象數(shù)據(jù)上傳,上位機(jī)軟件會(huì)以列表的形式展示收到的數(shù)據(jù),并將收到的氣象數(shù)據(jù)存儲(chǔ)到Access數(shù)據(jù)庫(kù)中。
2.4.4 統(tǒng)計(jì)分析模塊
統(tǒng)計(jì)分析模塊的功能是對(duì)存儲(chǔ)到電腦端數(shù)據(jù)庫(kù)中的氣象數(shù)據(jù)按照特定的條件進(jìn)行查詢(xún)統(tǒng)計(jì),可以根據(jù)氣象采集節(jié)點(diǎn)的編號(hào)、時(shí)間區(qū)間和氣象要素的大小來(lái)查詢(xún)氣象數(shù)據(jù),符合條件的數(shù)據(jù)會(huì)顯示到窗口的ListView控件中;通過(guò)導(dǎo)出功能,可以將查詢(xún)的數(shù)據(jù)導(dǎo)出到Excel表格中,方便用戶(hù)對(duì)數(shù)據(jù)進(jìn)一步分析。
2.4.5 用戶(hù)信息管理模塊
用戶(hù)信息管理模塊的主要功能是管理和維護(hù)用戶(hù)信息,可以修改用戶(hù)登錄密碼,實(shí)現(xiàn)用戶(hù)賬戶(hù)的增加、刪除以及相關(guān)信息的修改。
Access數(shù)據(jù)庫(kù)存儲(chǔ)方式簡(jiǎn)單,界面友好、容易操作,易于管理和維護(hù),使用面向?qū)ο蟮拈_(kāi)發(fā)方式,使得開(kāi)發(fā)應(yīng)用程式更為簡(jiǎn)單。本設(shè)計(jì)選用Access數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù),上位機(jī)軟件通過(guò)ADO.NET方式連接Access數(shù)據(jù)庫(kù)。
數(shù)據(jù)庫(kù)中有3張表,包括db_UserInfo(用戶(hù)信息表)、db_ NodeInfo(節(jié)點(diǎn)信息表)和db_WeatherData(氣象數(shù)據(jù)表),分別存儲(chǔ)用戶(hù)信息、節(jié)點(diǎn)信息和氣象數(shù)據(jù)。用戶(hù)信息表中有UserName(用戶(hù)名)、UserPwd(用戶(hù)密碼)、User ContactInformation(用戶(hù)聯(lián)系方式)、UserOtherInfor(用戶(hù)其他信息)等字段;節(jié)點(diǎn)信息表中有NodeNo(節(jié)點(diǎn)編號(hào))、NodeName(節(jié)點(diǎn)名字),NodeZigBeeAddress(節(jié)點(diǎn)ZigBee模塊的地址)以及NodeLocation(節(jié)點(diǎn)所處的位置)等字段;氣象數(shù)據(jù)表中有NodeNo(節(jié)點(diǎn)編號(hào)),Datetime(時(shí)間)、WindSpeed(風(fēng)速)、WindDirection(風(fēng)向)、Temperature(溫度)、Humidity(濕度)和AirPressure(氣壓)等字段。數(shù)據(jù)庫(kù)文件以“.mdb”為后綴。
在編寫(xiě)完上位機(jī)軟件后,對(duì)軟件的各項(xiàng)功能進(jìn)行了測(cè)試,軟件運(yùn)行良好。
使用通信配置模塊,配置好IP地址、端口號(hào)和注冊(cè)包后,使用上位機(jī)對(duì)網(wǎng)絡(luò)進(jìn)行監(jiān)聽(tīng),很快便通過(guò)網(wǎng)絡(luò)連接上無(wú)線傳輸網(wǎng)關(guān),實(shí)現(xiàn)了遠(yuǎn)程通信的功能。
通過(guò)上位機(jī)軟件的遠(yuǎn)程節(jié)點(diǎn)管理與維護(hù)界面,可以實(shí)現(xiàn)對(duì)遠(yuǎn)程節(jié)點(diǎn)時(shí)間的校準(zhǔn)和節(jié)點(diǎn)氣象數(shù)據(jù)存儲(chǔ)時(shí)間間隔的設(shè)置。
為了驗(yàn)證節(jié)點(diǎn)實(shí)時(shí)數(shù)據(jù)上傳的功能,實(shí)驗(yàn)過(guò)程中選擇節(jié)點(diǎn)1-1每隔1分鐘上傳一次數(shù)據(jù),這樣接收到的數(shù)據(jù)就顯示到界面中。風(fēng)速、風(fēng)向、溫度、濕度、氣壓都有對(duì)應(yīng)的文本控件顯示和圖形控件顯示。由類(lèi)似表盤(pán)的控件顯示風(fēng)速和風(fēng)向,由類(lèi)似溫度計(jì)的控件形象的顯示溫度、濕度、氣壓。在界面的下方,有自動(dòng)生成的今日風(fēng)速、溫度、濕度和氣壓的變化曲線。使用上位機(jī)軟件的節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)上傳界面可以獲取氣象采集節(jié)點(diǎn)存儲(chǔ)的氣象數(shù)據(jù),氣象數(shù)據(jù)以列表的形式展示氣象數(shù)據(jù)。上位機(jī)軟件后臺(tái)自動(dòng)將上傳的氣象數(shù)據(jù)保存到Access數(shù)據(jù)庫(kù)中,便于用戶(hù)以后查看和處理。
通過(guò)上位機(jī)軟件的統(tǒng)計(jì)分析模塊用戶(hù)可以對(duì)存儲(chǔ)到電腦端數(shù)據(jù)庫(kù)中的數(shù)據(jù)按照節(jié)點(diǎn)編號(hào)、起始截止時(shí)間、氣象要素?cái)?shù)值范圍來(lái)查詢(xún)數(shù)據(jù),所查詢(xún)的數(shù)據(jù)通過(guò)列表的形式展示出來(lái),所查詢(xún)的數(shù)據(jù)可以導(dǎo)出到Excel表格中。
本文提出并設(shè)計(jì)了無(wú)線傳感網(wǎng)氣象監(jiān)測(cè)系統(tǒng)上位機(jī)軟件。根據(jù)無(wú)線傳感網(wǎng)氣象信息采集節(jié)點(diǎn)工作的特點(diǎn)、無(wú)線傳感網(wǎng)絡(luò)的特性以及效率方面的要求設(shè)計(jì)了特殊的通信機(jī)制并實(shí)現(xiàn)了該通信機(jī)制;對(duì)上位機(jī)軟件的功能進(jìn)行了分析,實(shí)現(xiàn)了通信配置、節(jié)點(diǎn)管理、數(shù)據(jù)上傳、統(tǒng)計(jì)分析以及用戶(hù)管理等多個(gè)功能,軟件界面簡(jiǎn)潔,操作簡(jiǎn)單,人機(jī)交互性好;使用數(shù)據(jù)庫(kù)作為存儲(chǔ)數(shù)據(jù)的方式,可以存儲(chǔ)海量氣象數(shù)據(jù),也便于對(duì)氣象數(shù)據(jù)的查詢(xún)和分析。測(cè)試結(jié)果表明:本文所設(shè)計(jì)的上位機(jī)軟件可以有效地獲取無(wú)線傳感網(wǎng)氣象節(jié)點(diǎn)的數(shù)據(jù)并對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)、處理和分析,符合設(shè)計(jì)要求。