ZigBee和3G的遠(yuǎn)程無線測光系統(tǒng)設(shè)計
以“連續(xù)高分辨率模式”為例,測量步驟如下:
① 發(fā)送“上電”指令。
② 發(fā)送“連續(xù)高分辨率模式”指令。
③ 等待完成第一次高分辨率模式的測量(最大時間為180 ms)。
④ 發(fā)送讀指令。
⑤ 讀測量結(jié)果。
3.2 ZigBee 網(wǎng)絡(luò)無線傳送程序設(shè)計
ZigBee 協(xié)調(diào)器節(jié)點上電后,ZDO層首次進(jìn)行一系列的初始化工作,然后調(diào)用ZDO層的初始化設(shè)備函數(shù),最終觸發(fā)網(wǎng)絡(luò)初始化函數(shù),開始構(gòu)建一個新的網(wǎng)絡(luò)。建立網(wǎng)絡(luò) 時,協(xié)調(diào)器節(jié)點首先逐個對各個信道進(jìn)行掃描,根據(jù)各個信道的能量值進(jìn)行排序,選擇能量值達(dá)到一定大小的信道為可用信道。其次,由網(wǎng)絡(luò)層在可用信道中選定信 道,并隨機選擇一個在所選信道中唯一的16位網(wǎng)絡(luò)標(biāo)識符(PANID)分配給這個新建的網(wǎng)絡(luò)[8]。協(xié)調(diào)器的軟件設(shè)計流程圖如圖4所示。
終 端采集節(jié)點上電以后進(jìn)行設(shè)備初始化,然后檢測周圍是否有網(wǎng)絡(luò)存在,當(dāng)發(fā)現(xiàn)有網(wǎng)絡(luò)存在時,網(wǎng)絡(luò)層將給予ZDA層發(fā)現(xiàn)網(wǎng)絡(luò)反饋信息,然后由網(wǎng)絡(luò)層向能量強度相 對較大的網(wǎng)絡(luò)發(fā)出加入網(wǎng)絡(luò)請求;加入網(wǎng)絡(luò)成功,則網(wǎng)絡(luò)層將給予ZDA層加入網(wǎng)絡(luò)反饋。成功加入網(wǎng)絡(luò)之后開始向協(xié)調(diào)器發(fā)出綁定請求,綁定成功后開始對光照數(shù) 據(jù)進(jìn)行采集,將采集到的數(shù)據(jù)進(jìn)行預(yù)處理并無線發(fā)送至協(xié)調(diào)器節(jié)點。傳感器終端采集節(jié)點軟件流程圖如圖5所示。
3.3 3G網(wǎng)絡(luò)無線傳送部分設(shè)計
3.3.1 usb_modeswitch的移植
usb_modeswitch 是一種在Linux系統(tǒng)下對USB設(shè)備的工作模式進(jìn)行轉(zhuǎn)換的工具,用于控制含有多個USB子設(shè)備的USB設(shè)備。在Linux環(huán)境下,廠家一般不會提供 USB設(shè)備在Linux系統(tǒng)上的驅(qū)動,所以需要用usb_modeswitch工具來進(jìn)行模式轉(zhuǎn)換。設(shè)備模式依賴usbstorage和 usbserial,所以在開發(fā)板上需要有這兩種模塊的支持,設(shè)備小能夠正常工作于這兩種模式下。
usb_modeswitch依賴于libusb提供的一系列庫文件,首先需要安裝libusb。解壓并進(jìn)入libusb1.0.6目錄,使用如下命令建立子目錄install,用于存放最后生存的庫文件與頭文件。usb_modeswitch移植過程略——編者注。
3.3.2 PPPD的移植
Linux在內(nèi)核中已經(jīng)支持3G模塊驅(qū)動和PPP網(wǎng)絡(luò)協(xié)議棧,需要做的工作是在內(nèi)核中配置3G模塊驅(qū)動和PPP網(wǎng)絡(luò)協(xié)議棧的相關(guān)選項。PPPD的移植過程略——編者注。
在開發(fā)板文件系統(tǒng)/etc/ppp/peers目錄下邊創(chuàng)建三個文件,代碼略——編者注。
3.3.3 主節(jié)點與上位機通信程序設(shè)計
通 過PPPD的撥號,可以建立數(shù)據(jù)鏈路層的連接,數(shù)據(jù)鏈路層采用PPP協(xié)議,它是一種面向字符的協(xié)議,是為在兩個對等實體間傳輸數(shù)據(jù)包連接而設(shè)計的,使用可 擴展的鏈路控制協(xié)議LCP來建立、配置和測試數(shù)據(jù)鏈路。網(wǎng)絡(luò)程序還需要TCP/IP協(xié)議的支持,Linux內(nèi)核已經(jīng)保留了對TCP/IP以及其他的網(wǎng)絡(luò)協(xié) 議的支持。最后編寫嵌入式Linux上的網(wǎng)絡(luò)客戶端應(yīng)用程序和Windows網(wǎng)絡(luò)服務(wù)器端應(yīng)用程序,傳送想要傳送的數(shù)據(jù)。主節(jié)點主控制器與上位機服務(wù)器通 信的程序流程圖如圖6所示。
圖6 主節(jié)點與上位機通信程序流程圖
3.4 服務(wù)器上位機監(jiān)測部分
服 務(wù)器上位機軟件的開發(fā)采用Microsoft Visual C++6.0開發(fā)環(huán)境,采用的是面向?qū)ο蟮某绦蛟O(shè)計方法,對于每一個窗口都建立了相應(yīng)的類,在類的基礎(chǔ)上創(chuàng)建對象,對對象的操作就是對其對應(yīng)的窗口的操 作。監(jiān)控中心軟件主要實現(xiàn)以下功能:建立服務(wù)器端并接收客戶端的連接;接收客戶端發(fā)送過來的數(shù)據(jù)并顯示;實時曲線顯示;歷史數(shù)據(jù)查詢。
4 調(diào)試測試
4.1 系統(tǒng)調(diào)試
在 系統(tǒng)調(diào)試過程中,傳輸數(shù)據(jù)時上位機接收到的數(shù)據(jù)有個別是錯誤的,通過查看二進(jìn)制代碼發(fā)現(xiàn)0x11、0x13字符沒有接收到??s小范圍查看問題出在哪個環(huán) 節(jié),檢驗發(fā)現(xiàn)主節(jié)點控制器S5PV210沒有接收到0x11、0x13字符,而主節(jié)點CC2530單片機已經(jīng)接收到了0x11、0x13字符,那么問題一 定出現(xiàn)在串口上。
在Linux串口編程中都沒對c_iflag(termios成員變量)這個變量進(jìn)行有效的設(shè)置,這樣傳送 ASCII碼時沒有問題,但傳送二進(jìn)制數(shù)據(jù)時遇到0x0d、0x11和0x13卻會被丟掉。這幾個字符是特殊字符,被用作特殊控制了,只需要關(guān)掉 ICRNL和IXON選項即可。
具體做法是在主控制器Linux串口初始化函數(shù)中添加以下語句:
options.c_iflag &= ~(ICRNL | IXON | IXOFF);
options是之前定義的termios類型的結(jié)構(gòu)體。通過以上設(shè)置就可以屏蔽掉0x11、0x13字符的特殊功能,從而能正常傳送以上字符。
4.2 系統(tǒng)功能測試
連接好硬件設(shè)備后,配置編譯內(nèi)核,將編譯好的內(nèi)核通過USB下載到開發(fā)板上,然后重啟。再將編譯好的應(yīng)用程序通過串口終端下載到開發(fā)板上。將3G上網(wǎng)卡插到USB接口上,使用如下命令建立3個TTY設(shè)備文件節(jié)點,代碼略——編者注。
我 們可以看到PING新浪的WEB服務(wù)器可以PING通,說明已經(jīng)成功接入因特網(wǎng)了。然后將4個終端分節(jié)點放在不同的光照環(huán)境下,啟動上位機軟件,建立服務(wù) 器端,開始等待接收主節(jié)點客戶端的連接請求和發(fā)送過來的數(shù)據(jù)并且顯示。啟動主節(jié)點客戶端程序來連接服務(wù)器,最后啟動分節(jié)點的采集傳送程序。上位機接收到并 顯示的監(jiān)測數(shù)據(jù)圖略——編者注。
結(jié)語
本文闡述了一種將低成本、低功耗的短距離無線ZigBee 技術(shù)與遠(yuǎn)距離3G移動通信技術(shù)相結(jié)合的遠(yuǎn)程無線測光系統(tǒng),并完成了對采集終端節(jié)點、協(xié)調(diào)器主節(jié)點的軟硬件設(shè)計,通過編寫Windows平臺上位機軟件對采集到的數(shù)據(jù)進(jìn)行實時顯示與分析。
評論