張曉慧,李松松,趙國平,陳曉明
(1. 沈陽工程學院電氣工程系,沈陽110136;2. 大連海洋大學信息工程學院,遼寧大連116023;3. 大連理工大學電子科學與技術(shù)學院,遼寧大連116024)
隨著通信技術(shù)、嵌入式計算技術(shù)和傳感器技術(shù)的飛速發(fā)展和日益成熟,人們研制出了各種具有感知能力、計算能力和通信能力的微型傳感器.由部署在監(jiān)測區(qū)域內(nèi)的大量廉價的這種微型傳感器節(jié)點通過無線通信技術(shù)自組織構(gòu)成的無線傳感器網(wǎng)絡(WSN)引起了人們極大的關(guān)注[1-2].WSN 不僅彌補了有線技術(shù)的布線復雜、維護困難、傳感器節(jié)點不能靈活部署等不足,而且對擴充監(jiān)控范圍,提高監(jiān)控水平,降低監(jiān)控成本起著不可替代的重要作用[3]. 另一方面,隨著個人計算機普及和開放系統(tǒng)概念的推廣,基于個人計算機的監(jiān)控系統(tǒng)開始走入市場并迅速發(fā)展. 工控組態(tài)軟件因其性能穩(wěn)定可靠、人機界面友善、硬件配置方便以及編程簡單易用并且其驅(qū)動程序豐富等優(yōu)點成為個人計算機監(jiān)控系統(tǒng)的重要組成部分[4].而目前實現(xiàn)工控組態(tài)軟件與無線傳感器網(wǎng)路多節(jié)點的多變量交換的通信方法有3 種,①利用工控組態(tài)軟件的驅(qū)動程序開發(fā)包進行驅(qū)動開發(fā)自己的通訊驅(qū)動程序,該方法適用于專業(yè)廠商;②通過動態(tài)數(shù)據(jù)交換(DDE)方式進行通訊,該方法近期得到了廣泛的應用,但是比較復雜;③利用工控組態(tài)軟件提供的與單片機的通用通訊協(xié)議,有HEX 和ASCII 通訊協(xié)議,該方法簡單且實時性好,適用于一般用戶[5].這里采用的是第三種基于ASCII 的通訊方法,有關(guān)該方法早期趙學軍、朱小超和雷鈞等人曾做過組態(tài)王和單片機的簡單通訊設計研究[6-7],而介紹無線傳感器網(wǎng)絡和工控組態(tài)軟件變量交換通訊這方面的文獻非常少.在2010 年汪玉鳳和王勝輝曾成功實現(xiàn)了多節(jié)點的單變量的二者之間的通訊[8],設計了一套基于新興ZigBee 技術(shù)的多節(jié)點的多變量無線傳感器網(wǎng)絡,并使用工控組態(tài)軟件之一的組態(tài)王來設計上位機監(jiān)測系統(tǒng).但在實現(xiàn)組態(tài)王與多節(jié)點的多變量交換通訊過程中,發(fā)現(xiàn)了通訊協(xié)議中對變量交換設定支持不足.由此提出一種基于標志位的變量交換設定的方法,成功實現(xiàn)了組態(tài)王KingView 與ZigBee 的多節(jié)點的多變量傳感數(shù)據(jù)的交換,完成了對多節(jié)點的物理地址、溫度、濕度、風速、電壓傳感數(shù)據(jù)的監(jiān)測系統(tǒng)設計.
目前,5 種短距離無線網(wǎng)絡技術(shù)正在成為業(yè)界的談論熱點,它們分別是ZigBee、無線局域網(wǎng)(Wi-Fi)、藍牙(Bluetooth)、超寬頻(UWB)和近距離無線傳輸(NFC)[9].其中ZigBee 是一種新興的短距離、低速率的無線網(wǎng)絡技術(shù),它因具有低功耗、低成本、可靠性高、時延短、網(wǎng)絡容量大、保密性高等特點,在現(xiàn)代工業(yè)、農(nóng)業(yè)、醫(yī)療和環(huán)境監(jiān)測等領(lǐng)域得到了廣泛的應用,特別適合應用于邊遠山區(qū)和沿海灘涂的農(nóng)業(yè)設施群的環(huán)境參數(shù)的采集[10-13]. 在ZigBee 通信協(xié)議下,設備分為3類:協(xié)調(diào)器、路由器和終端設備. 這里搭建1 個串行的對多節(jié)點的多個變量傳感數(shù)據(jù)的采集系統(tǒng),使用1 個協(xié)調(diào)器節(jié)點,3 個路由器節(jié)點和1 個終端節(jié)點.其中協(xié)調(diào)器節(jié)點的作用是負責啟動建立網(wǎng)絡和接收并處理各個采集節(jié)點的數(shù)據(jù)以及通過串口RS232 數(shù)據(jù)線完成與上位機進行變量交換的設定;路由器節(jié)點的作用是起到中繼的同時負責采集多個節(jié)點的物理地址、溫度、濕度、風速、電壓傳感數(shù)據(jù)以及接收協(xié)調(diào)器節(jié)點發(fā)送的讀命令;終端節(jié)點主要負責采集多個節(jié)點的物理地址、溫度、濕度、風速、電壓傳感數(shù)據(jù)以及接收協(xié)調(diào)器節(jié)點發(fā)送的命令.
為了實時地監(jiān)測無線傳感器網(wǎng)絡采集的數(shù)據(jù),上位機監(jiān)測系統(tǒng)采用工控組態(tài)軟件之一的組態(tài)王. 它是一款全中文的工控組態(tài)軟件,具有高度的實用性,組態(tài)靈活,可生成復雜、友好的交互式圖形界面,而且提供了各種可編程邏輯控制器(PLC)等現(xiàn)場設備的驅(qū)動軟件,使得上位機與現(xiàn)場控制系統(tǒng)之間的連接變得簡單[14].圖1 是系統(tǒng)整體設計的示意圖.
圖1 系統(tǒng)的整體設計
上位機使用組態(tài)王智能監(jiān)控軟件設計出可視化監(jiān)控系統(tǒng),需要根據(jù)硬件的實際情況自行設計組態(tài)王與下位機的串行通信協(xié)議才可完成變量交換設定,下面詳細解析組態(tài)王與單片機ASCII 通訊協(xié)議. 首先在組態(tài)王中定義設備之前必須要先設置通信參數(shù),如波特率、數(shù)據(jù)位、停止位、奇偶校驗位等,這些必須與單片機編程中的通訊參數(shù)一致. 其次組態(tài)王中定義設備地址的格式為“##. #”,前面的2 個字符是設備地址,范圍為0 ~255,此地址為單片機的地址,由單片機中的程序決定,后面的1 個字符是用戶設定是否打包,“0”為不打包、“1”為打包.最后在組態(tài)王中定義變量寄存器格式,1 個X 寄存器根據(jù)所選數(shù)據(jù)類型(BYTE,UINT,F(xiàn)LOAT)的不同分別占用1 個、2 個、4 個字節(jié),定義不同的數(shù)據(jù)類型要注意寄存器后面的地址,同一數(shù)據(jù)區(qū)內(nèi)不可交叉定義不同數(shù)據(jù)類型的變量,為提高通訊速度需使用連續(xù)的數(shù)據(jù)區(qū). 組態(tài)王與單片機(ASCII)通信協(xié)議的讀命令格式和應答格式如表1 所示.
除字頭、字尾外所有字符均為ASCII 碼,每個字符表示1 個十六進制數(shù). 上位機中定義的每個變量都和下位機的多節(jié)點的多變量一一對應. 下位機只有按照通信協(xié)議命令格式在通訊超時之前正確回應上位機的讀命令才可以完成變量交換的設定. 如果通訊超時還沒有回應,上位機就會在嘗試恢復時間間隔里一直發(fā)送嘗試恢復讀命令試著和下位機再一次通訊. 由此可知上位機對同一變量的讀命令形式不是1 種,至少應該區(qū)分出正常讀命令和嘗試恢復讀命令2 種. 從表1中可知同一變量的讀命令格式除了標志位其余都相同,標志位字段一定是區(qū)別不同讀命令的標志,表2 是標志位字段在通信協(xié)議中的解釋說明.從表2 中可知:標志位只給出了后4 位的解釋說明,而這4 位根本無法區(qū)別不同的讀命令,所以前四位一定是區(qū)別不同讀命令的字段,只有區(qū)分出不同的讀命令,下位機才可能正確應答,否則不可能實現(xiàn)對多節(jié)點的多變量的交換設定,因此標志位所描述的特殊意義是實現(xiàn)無線傳感網(wǎng)絡和工控組態(tài)軟件之間變量交換設定的重要理論依據(jù).
表1 讀命令格式和應答格式
表2 標志位字段說明
通過對組態(tài)王與單片機通訊協(xié)議解析,需要根據(jù)硬件的實際情況來設計上位機監(jiān)測系統(tǒng). 首先要在上位機監(jiān)測系統(tǒng)中建立4 個設備,每個設備添加5 個I/O 浮點型寄存器變量,如表3 所示.
表3 組態(tài)王中多節(jié)點的多變量寄存器設置
上位機所有變量要和下位機所有采集節(jié)點之間進行變量交換,可是實際與上位機通訊的只有協(xié)調(diào)器節(jié)點,所以協(xié)調(diào)器節(jié)點就起到中轉(zhuǎn)站的作用.一方面接收上位機讀命令后發(fā)送給指定采集節(jié)點,另一方面得到采集節(jié)點的數(shù)據(jù)后上傳給上位機,從而實現(xiàn)上位機和下位機之間的變量交換. 可是無線傳感器網(wǎng)絡的節(jié)點很可能因為功耗有限或者外界干擾等因素導致節(jié)點無法工作,如果下位機中某個或多個采集節(jié)點無法工作,那么上位機對應的設備就無法完成變量交換設定,這時上位機監(jiān)測系統(tǒng)會一直發(fā)送嘗試恢復讀命令,這樣一來,監(jiān)測系統(tǒng)就無法實現(xiàn)與其他節(jié)點的多變量交換.為了解決這一問題,協(xié)調(diào)器節(jié)點必須能夠判斷節(jié)點的工作情況,如果某節(jié)點無法工作,就要自行響應上位機對已壞節(jié)點的讀命令,從而實現(xiàn)所有節(jié)點的實時采集.協(xié)調(diào)器判斷節(jié)點工作的情況只有通過讀命令標志位來判斷,所以設計了4 個實驗:實驗一讓下位機所有節(jié)點都不工作;實驗二讓下位機所有節(jié)點都能正常工作;實驗三讓某2 個節(jié)點不工作;其他節(jié)點正常工作,實驗四讓協(xié)調(diào)器替代已壞節(jié)點響應上位機讀命令;通過觀察這4 個實驗上位機的工作情況以及上位機發(fā)送的讀命令形式,來得出標志位所描述的信息.這里使用2 個輔助工具,分別是串口協(xié)調(diào)助手和VSPD XP 5,串口協(xié)調(diào)助手用來模擬ZigBee 模塊負責接收組態(tài)王發(fā)送的讀寫信號以及響應組態(tài)王的讀寫命令,以方便觀察上位機發(fā)送的讀命令形式. 為了能在1 臺PC 機上模擬實驗,使用VSPD XP 5 工具,它是個虛擬串行驅(qū)動程序,是可在計算機Windows 下操作的程序,此驅(qū)動程序會創(chuàng)造數(shù)個“虛擬”的串行埠,用它來模擬上位機組態(tài)王和下位機串口協(xié)調(diào)助手串口連接.
在上位機組態(tài)王監(jiān)控系統(tǒng)中,當下位機不做任何響應的時候,上位機監(jiān)測畫面一開始顯示初始值,最終以問號形式顯示,串口協(xié)調(diào)助手接收到上位機的每個設備發(fā)送的讀命令形式有3 種,如表4 所示的是設備1 的3 種讀命令形式.
表4 設備1 的3 種讀命令格式
從表格中可以看出,同一個設備的3 種讀命令形式的標志位各不相同,當標志位是第一種情況時,上位機顯示初始值;當標志位是第二種情況時,上位機以問號形式顯示;當標志位是第三種情況時,所有設備都顯示問號.具體的上位機發(fā)送的讀命令形式如下圖2 所示.由圖2 可知:上位機最后會一直不斷發(fā)送標志位為3530 的各個設備的讀命令.
圖2 設備1 的5 個變量讀命令格式
在上位機組態(tài)王監(jiān)控系統(tǒng)中,當用串口協(xié)調(diào)助手模擬下位機做正確回應上位機所有讀命令時,上位機畫面將依次完成所有I/0 變量交換,如表5 所示的是對設備1 的各個變量的讀命令形式.
表5 設備1 的5 個變量讀命令形式
從表5 中可以看出,同一個設備的讀命令形式的標志位都是相同的.具體的上位機發(fā)送的讀命令形式如下圖3 所示.從圖3 中可知:當所有變量都采集成功之后,間隔1 個采集周期后繼續(xù)依次采集所有變量,達到實時監(jiān)測的目的.
圖3 上位機發(fā)送讀命令形式
在上位機組態(tài)王監(jiān)控系統(tǒng)中,模擬2#節(jié)點和3#節(jié)點無法工作,此時上位機畫面中設備1 和4 會完成變量交換,而設備2 和3 所有變量都以問號形式顯示.此時串口協(xié)調(diào)助手接收到的上位機設備1 和4 的讀命令形式和實驗二中相同,所有讀命令標志位都是一致的,而設備2 和3 的讀命令形式和實驗一中相同,每個設備有3 種不同標志位的讀命令形式. 具體的上位機發(fā)送的讀命令形式如下圖4 所示.從圖4 中可知:對正常工作的設備只是一開始發(fā)送過一次讀命令,之后上位機一直在對已壞設備發(fā)送標志位為3530 的讀命令.
在實驗三基礎(chǔ)之上,用串口協(xié)調(diào)助手模擬已壞2#和3#節(jié)點正確回應上位機發(fā)送的標志位為3530 的讀命令,此時上位機監(jiān)測畫面會把實驗三中的以問號顯示的設備2 和3 喚醒,顯示之前的初始值,此時串口協(xié)調(diào)助手接收到的是所有設備的4138 形式的讀命令,具體的上位機發(fā)送的讀命令形式如下圖5 所示. 從圖5中可知:只有當所有已壞節(jié)點都被喚醒,才能恢復對所有節(jié)點的采集,達到實時監(jiān)測的目的.
圖4 上位機發(fā)送讀命令形式
圖5 上位機發(fā)送讀命令形式
通過以上4 個實驗可以得到標志位有3 種命令形式,每種命令形式有其特殊的重要意義.第一種形式的標志位為4138,只有在下位機回應該標志的讀命令才能完成上位機組態(tài)王中的變量和ZigBee 無線節(jié)點中的變量交換;第二種形式的標志位為4330,當上位機發(fā)送該讀命令時,上位機畫面以問號形式顯示,代表通訊失敗;第三種形式的標志位是3530,當上位機發(fā)送該讀命令時,下位機必須回應,只有這樣才可以喚醒組態(tài)王對所有變量的采集,否則它將一直發(fā)送該標志的讀命令,嘗試與已壞設備通信,這樣就無法實現(xiàn)對所有節(jié)點實時監(jiān)測的目的.由此得出一種基于標志位的變量交換設定的方法,即上位機所有設備的變量與下位機多節(jié)點的多個變量通過標志位來進行變量交換的設定,協(xié)調(diào)器節(jié)點通過標志位來判斷設備的工作狀況以及中轉(zhuǎn)采集節(jié)點發(fā)送的數(shù)據(jù),從而來完成二者數(shù)據(jù)交換.
通過實驗得出ASCII 通信協(xié)議命令格式中標志位有讀寫命令、通訊失敗、嘗試恢復3 種形式,提出了一種基于標志位的變量交換設定的方法,用該方法對協(xié)調(diào)器節(jié)點和采集節(jié)點進行程序設計,完成了上位機多設備的多變量與下位機多節(jié)點的多變量的交換設定,最終實現(xiàn)工控組態(tài)軟件對無線傳感器網(wǎng)絡的監(jiān)測,具有廣泛的推廣意義.
[1]李建中,高 宏.無線傳感器網(wǎng)絡的研究進展[J].計算機研究與發(fā)展,2008,45(1):1-15.
[2]李春杰,劉瑞霞,王繼志.基于無線傳感器網(wǎng)絡的監(jiān)控平臺設計[J].傳感技術(shù)學報,2006,19(1):13-15.
[3]何 蓉,陳東義,韓 露.基于WSN 的工業(yè)設備運行狀況監(jiān)控平臺的研究[J]. 電子科技大學學報,2010,39:71-75.
[4]葛 玻,沈文杰,趙 旎. 工控組態(tài)軟件的對比及應用[J].計算機測量與控制,2002,10(8):550-552.
[5]趙學軍.單片機與組態(tài)王的通訊程序設計[J]. 工業(yè)控制計算機,2006,19(9):35-37.
[6]雷 鈞,徐洪勝.基于ASCII 的單片機與組態(tài)王通訊設計[J].工業(yè)控制計算機,2010,23(12):17-19.
[7]朱小超,徐雪春.單片機與組態(tài)王基于ASCII 型通訊程序設計[J].工業(yè)控制計算機,2010,23(12):34-36.
[8]汪玉鳳,王勝輝.基于組態(tài)王的無線溫度采集系統(tǒng)[J].微計算機信息,2010,26(9):65-66.
[9]李文仲,段朝玉. ZigBee2006 無線網(wǎng)絡與無線定位實戰(zhàn)[M].北京:北京航空航天大學出版社,2008.
[10]包長春,石瑞珍,馬玉泉.基于ZigBee 技術(shù)的農(nóng)業(yè)設施測控系統(tǒng)的設計.農(nóng)業(yè)工程學報,2007,23(8):160-164.
[11]李戰(zhàn)明,李振興. ZigBee 技術(shù)在人員搜救系統(tǒng)中的應用[J].電子測量與儀器學報,2011,25(2):186-190.
[12]鄭 凱,趙宏偉,張孝臨.基于ZigBee 心電監(jiān)護網(wǎng)絡的定位位系統(tǒng)的研究[J].儀器儀表學報,2008,29(5):1001-1005.
[13]牛海軍,樊瑜波,楊松巖,等.基于ARM 和DSP 的超聲膀胱容積檢測與預警系統(tǒng)的設計[J].儀器儀表學報,2011,32(8):1858-1863.
[14]李安伏,崔亞量. 基于OPC 的Matlab 與組態(tài)王的數(shù)據(jù)通信[J].電力自動化設備,2007,27(7):113-115.