,2
(華東理工大學自動化系1,上海 200237;化工過程先進控制與優化技術教育部重點實驗室2,上海 200237)
隨著物聯網[1]、泛在網的蓬勃發展,如何實現異構網絡之間的有效融合,成為物聯網、泛在網發展的關鍵性問題。異構網絡融合就是將各種不同通信模式連接在一起、實現不同模式通信設備之間的互聯互通[2]。異構網絡下空氣質量監測系統的設計與實現,從屬于物理網及泛在網實踐應用研究的一部分,具有一定的實踐意義。
本文在空氣質量成為社會熱點的背景下,在多種無線接入技術[3]蓬勃發展的基礎上,提出了基于異構網絡融合構建空氣質量監測系統。分別從硬件和軟件方面進行研究,主要對空氣中CO2濃度、CO濃度、溫度及濕度進行分析,闡述了空氣質量檢測終端、嵌入式無線網關和上位機監測軟件具體實現過程。
由于空氣質量數據的采集和地理環境具有不確定性,而且對空氣質量的檢測也具有長期性,因此,現場數據采集、布線、能耗及可靠性需要首先得到滿足。此外,從經濟上考慮,我們盡量選擇成本低且能較好完成檢測任務的技術。鑒于此,選用了ZigBee技術。ZigBee技術[4]具有以下特點。
① 無線傳輸:可以省去布線的麻煩,節約成本。
② 網絡時延短:一般從睡眠切換為工作狀態只需15 ms,節點連接入網絡只需30 ms。相比較,WiFi需要3 s,而藍牙需要3~10 s。
③ 模塊功耗低:配備10 Ah電池的ZigBee水表,可工作8年。
④ 可靠性好:采用碰撞避免機制,避免了發送數據時的競爭和沖突。
⑤ 成本低:ZigBee模塊工作于2.4 GHz全球免費頻段,只需要支付前期模塊費用,不用支付以后使用的費用。
顯然,ZigBee技術非常符合我們所提出的現場數據采集的要求,采用ZigBee技術構建現場無線傳感網絡進行現場數據的采集及發送,就可以解決布線、供能、實時性、可靠性及成本問題,以應對不同的地理環境。
考慮到ZigBee網絡中的節點處理能力有限,需要利用外部網絡中的資源對監測數據進行更復雜的處理;同時,其他網絡用戶也需要對ZigBee網絡進行訪問,以得到監測區域的空氣質量信息。考慮到WiFi技術普遍受到移動終端的支持,高速率、頻帶免收費、投資低,且易于與其他網絡融合構建更大的異構網絡,符合網絡向泛在網發展的趨勢。因此,采用WiFi技術構建檢測系統的外部網絡,完成對現場采集數據的處理與顯示。
空氣質量監測系統由若干ZigBee檢測終端、嵌入式無線網關及遠程監控終端組成。ZigBee檢測終端完成現場數據的采集及向嵌入式無線網關發送;嵌入式無線網關構成ZigBee網絡與WiFi網絡之間的橋梁[5];遠程監控終端從無線網關接收數據,在Qt界面上以柱狀圖的形式直觀顯示現場空氣質量。系統網絡拓撲圖如圖1所示。

圖1 系統網絡拓撲圖
數據采集ZigBee終端由CC2530EM核心板模塊、傳感器模塊、LED指示電路、電源電路等組成,完成現場空氣質量數據的采集及發送。
CC2530EM核心板模塊, 采用德州儀器(TI)的ZigBee射頻芯片CC2530-F256,片上集成高性能、低功耗8051內核、12 bit ADC、2個USART以及DMA功能等,支持ZigBee 2007/Pro協議棧。
CO2傳感器選用的是韓國SOHA公司進口的雙光束紅外二氧化碳傳感器模塊,SH-300-N量程為0~3 000×10-6,與CC2530EM核心板模塊的P0.0口連接。
CO傳感器選用的是由日本NEMOTO公司生產的型號為NE-CO-BL的一氧化碳電化學傳感器,與CC2530EM核心板模塊的P0.1口連接。
空氣質量傳感器是一款對空氣中的多種有毒或可燃氣體都具有一定的靈敏性的半導體氣體傳感器,其型號為QS-01,與CC2530EM核心板模塊的P0.2口連接。
濕度傳感器選用的是美國Honeywell公司生產的集成濕度傳感器,其型號為H- 4000-003,量程為0~100%RH,與CC2530EM核心板模塊的P0.3口連接。
溫度傳感器選用的是美國Dallas半導體公司生產的,型號為DS18B20的數字式溫度傳感器。傳感器測量范圍為-55~+125 ℃,精度為±0.5 K,與CC2530EM核心板模塊的P0.5口連接。CC2530EM核心板模塊電路如圖2所示。

圖2 CC2530EM核心板模塊電路圖
嵌入式無線網關硬件設計圖如圖3所示。

圖3 嵌入式無線網關硬件設計圖
嵌入式無線網關可以看成是銜接ZigBee網絡與WiFi網絡的橋梁。它以S3C6410嵌入式微處理器為中心,由CC2530 ZigBee收發模塊、雷凌WiFi模塊及觸摸顯示屏等共同組成。其中,S3C6410嵌入式微處理器完成數據的轉發、協議轉換、任務調度、設備管理及界面顯示等任務。 CC2530 ZigBee收發模塊主要完成ZigBee終端的數據接收。雷凌WiFi模塊具備軟接入點AP(access point)的功能,可以將嵌入式無線網關切換至AP模式[6],通過WiFi網絡將數據發送到遠處監控終端[7]。觸摸顯示屏可以直觀顯示空氣質量狀況,從而可以在空氣質量狀態不好的情況下迅速采取必要的措施。
由于本文設計的系統要使用WiFi模塊,但是Linux內核本身并不提供該驅動,那么要先進行WiFi驅動移植,并下載最新的WiFi驅動,在虛擬機下編譯生成能夠在OK6410開發板下安裝的模塊文件。
使用飛凌提供的Linux-3.0.1內核源碼,解壓放在指定的目錄下面,并且修改其Makefile文件,重新指定編譯器及目標平臺;然后在該目錄下執行make menuconfig命令,指定以模塊的形式加載驅動在Device Drivers-->Network Device Support-->Wireless LAN下,將Ralink Driver Support選為M。重新編譯內核,生成zImage,通過bootloader燒寫到開發板的Nandflash中[8]。
3.2.1 Qt介紹及應用
Qt是一個跨平臺的C++圖形用戶界面應用程序框架。它為應用程序開發者提供建立藝術級圖形用戶界面所需的所用功能,并且很容易擴展允許組件編程。
為了給用戶呈現良好的操作界面,需要移植Qt到嵌入式無線網關和遠程監控終端。嵌入式無線網關下Qt程序實現從協調器中讀取數據、在Qt界面中顯示并且轉發到遠程監控終端。遠程終端Qt程序實現從無線網關接收數據并且在Qt界面顯示[9]。
在Qt中,提供了QUdpSocket類來進行用戶數據報協議[10](user datagram protocol,UDP)數據報的發送和接收。網關向遠程監控終端發送數據報可以看做客戶端,而遠程監控終端可以看做服務端。Qt程序運行后,客戶端從協調器獲得有效數據,向廣播地址和指定的端口號廣播要發送的數據,而服務器端監聽廣播地址和相應的端口號。當有數據到來時,就接收數據并且通過檢驗碼校驗數據是否正確。下面分別從服務器端Qt程序和客戶端Qt分析WiFi網絡上的數據收發過程。
3.2.2 主要功能函數介紹
① connect( )函數
原型:bool QObject::connect(const QObject * sender,const char * signal,constQObject * receiver,const char * member)
功能:信號發送者sender對象中的信號signal與接收者receiver中的member槽函數聯系起來。當指定信號signal時,必須使用宏SIGNAL( );當指定槽函數時,必須使用宏SLOT( )。如果發送者和接收者屬于一個對象,那么在connect調用中接收者可以忽略。
② bind( )函數
原型:bool QUdpSocket::bind (const QHostAddress & address, quint16 port, BindMode mode)
功能:將套接字綁定到指定的IP地址和端口號,當UDP數據包到來時觸發readyRead信息。
③ writeDatagram( )函數
原型:qint64 QUdpSocket::writeDatagram (const QByteArray & datagram, const QHostAddress & host, quint16 port)
功能:向指定IP的端口號寫入數據。寫入成功,則返回寫入的數據長度;失敗,則返回-1。
UDP主要用來支持需要在計算機之間傳輸數據的網絡應用。UDP協議與TCP(傳輸控制協議)協議一樣,位于IP(網際協議)協議的頂層,都屬于傳輸層協議。UDP是一個面向數據報和無連接的簡單傳輸層協議。它不像TCP那樣通過握手過程建立服務器與客戶端的連接才可以工作,避免占用大量的系統開銷,使速度受到嚴重的影響。
Linux系統是通過套接字結構來進行網絡編程的,應用程序通過對套接字的幾個函數調用,會返回一個用于通信的套接字描述符。Linux應用程序在進行任何形式的I/O操作時,程序實際上是在讀寫一個文件描述符。因此,Linux下的套接字編程,可以看成是對普通文件描述符的操作,這些操作與被使用的硬件平臺無關,這是Linux設備無關性的優點。
客戶端程序分析如下。
① 使用第三方寫的qextserialport類,完成串口參數設置以及打開,主要使用下面4個文件。
qextserialbase.cpp和qextserialbase.h以及posix_qextserialport.cpp和posix_qextserial.h。
串口設置程序如下。
myCom = new Posix_QextSerialPort("/dev/ttySAC3",
QextSerialBase::Polling);
myCom ->open(QIODevice::ReadWrite);
//以讀寫方式打開串口
myCom->setBaudRate(BAUD9600);
//波特率設置為9 600 bit/s
myCom->setDataBits(DATA_8);
//數據位設置為8位
myCom->setParity(PAR_NONE);
//奇偶校驗設置為無校驗
myCom->setStopBits(STOP_1);
//停止位設置為1位
myCom->setFlowControl(FLOW_OFF);
//數據流控制設置為無數據流
myCom->setTimeout(200);
② UDP Socket定義使用QUdpSocket類
udpSocket=new QUdpSocket(this);
③ 定時讀取串口使用connect 函數,在程序中,定時器每次定時時間到就觸發timeout信號,然后去執行關聯的讀取串口的槽函數。
④ 客戶端使用writeDatagram函數向服務器端發送數據。
客戶端流程圖如圖4所示。

圖4 客戶端程序流程圖
服務器端流程圖如圖5所示。

圖5 服務器端流程圖
服務器端程序分析如下。
① 使用bind函數將套接字綁定到客戶端指定的IP地址和端口,當UDP報文到達就會觸發readyRead信號。然后使用信號與槽函數connect,當readyRead信號觸發,便執行讀取數據的槽函數。
② 按照數據格式,經過處理,提取出CO濃度、CO2濃度、空氣質量、溫度、濕度數據,在Qt界面顯示。
本文設計的空氣質量監控系統,采用ZigBee技術組成現場數據采集,WiFi技術完成數據向監控終端發送。在硬件方面設計了嵌入式網關,構建了異構網絡間的橋梁。在軟件方面,實現了ZigBee協議數據包與TCP/IP協議包數據轉換,并且完成數據處理與在Qt用戶界面顯示。系統完成了ZigBee網絡與WiFi網絡融合,實現了異構網絡互連互通,在一定程度上為構建泛在傳感網提供了參考。整個系統具有功耗低、移動性強、人機界面美觀、復雜度低等優點,且空氣質量與人體健康息息相關,因此該系統應用前景廣闊。
[1] 孫其博,劉杰,黎羴,等.物聯網概念、架構與關鍵技術研究綜述[J].北京郵電大學學報:自然科學版,2010,33(3):2-7.
[2] 黃川,鄭寶玉.多無線電協作技術與異構網絡融合[J].中興通迅技術,2008,14(3):27-31.
[3] 張方奎,張春業.短距離無線通信技術及其融合發展研究[J].電測與儀表,2007,44(10):48-52.
[4] Lee J S,Su Y W,Shen C C.A comparative study of wireless protocols:bluetooth,UWB,ZigBee,and Wi-Fi[C]∥The 33rd Annual Conference of the IEEE Industrial Electronics Society,2007:46-51.
[5] 李佳,謝琦,王慶華.基于網關的ZigBee網絡與Internet互聯框架[J].計算機工程與設計,2012,33(9):2-4.
[6] 劉懿.室內無線接入點設計與實現[D].成都:西南交通大學,2008.
[7] 王春,張良棟,孫國祥,等.基于ZigBee的焊接環境有毒氣體監測系統[J].化工自動化及儀表,2011,38(12):1479-1480.
[8] 范艷開.基于ARM的嵌入式Linux操作系統移植[D].西安:西北工業大學,2005.
[9] 殷松遷,郭培源,王建華.基于嵌入式及ZigBee技術的居室環境監測系統[J].電子技術應用,2012,38(8):24-25.
[10]劉暢,彭楚武.Linux下的UDP協議編程[J].儀表技術,2006(1):62-63.