綦聲波,吳學(xué)英
(中國(guó)海洋大學(xué) 工程學(xué)院,山東 青島 266100)
我國(guó)沿海地區(qū)受臺(tái)風(fēng)、海浪、風(fēng)暴潮、海冰等多種災(zāi)害影響,是世界上海洋災(zāi)害最嚴(yán)重的國(guó)家之一。開發(fā)沿海環(huán)境數(shù)據(jù)采集和管理系統(tǒng)并為海洋災(zāi)害預(yù)警提供數(shù)據(jù)資源,已經(jīng)成為海洋開發(fā)、防災(zāi)減災(zāi)等戰(zhàn)略部署和社會(huì)發(fā)展的迫切需要。而沿海海洋自動(dòng)監(jiān)測(cè)臺(tái)站網(wǎng)絡(luò)則是海洋環(huán)境監(jiān)測(cè)系統(tǒng)中重要的一環(huán)。
目前海洋臺(tái)站監(jiān)測(cè)系統(tǒng)尚未形成有效的共享機(jī)制,往往自成體系,實(shí)時(shí)海洋信息監(jiān)測(cè)和智能預(yù)警在國(guó)內(nèi)的研究也相對(duì)滯后。為更好實(shí)現(xiàn)海洋信息數(shù)據(jù)資源共享,王振東[1]基于ARM7+uLinux設(shè)計(jì)了海洋臺(tái)站自動(dòng)觀測(cè)系統(tǒng),使用GPRS與監(jiān)測(cè)中心站進(jìn)行數(shù)據(jù)通信;秦明慧[2]設(shè)計(jì)了一套基于JSP的海洋臺(tái)站數(shù)據(jù)動(dòng)態(tài)發(fā)布系統(tǒng),較好實(shí)現(xiàn)了海洋氣象數(shù)據(jù)的動(dòng)態(tài)發(fā)布。上述研究雖然部分實(shí)現(xiàn)了數(shù)據(jù)的共享,但仍存在著現(xiàn)場(chǎng)復(fù)雜、開發(fā)成本高等問題。
本文將無線傳感器網(wǎng)絡(luò)和Web數(shù)據(jù)庫(kù)技術(shù)結(jié)合,設(shè)計(jì)了一套可應(yīng)用于海洋臺(tái)站的自動(dòng)監(jiān)測(cè)系統(tǒng),該系統(tǒng)由6LoWPAN無線傳感器采集子系統(tǒng)與云數(shù)據(jù)庫(kù)存儲(chǔ)子系統(tǒng)組成,利用低速無線個(gè)域網(wǎng)的優(yōu)點(diǎn)搭建了數(shù)據(jù)信息采集系統(tǒng),前端結(jié)合PHP,數(shù)據(jù)庫(kù)技術(shù),不但實(shí)現(xiàn)了海洋信息參數(shù)的網(wǎng)絡(luò)存儲(chǔ),實(shí)時(shí)發(fā)布,而且具有節(jié)點(diǎn)功耗低、成本低、傳感器可動(dòng)態(tài)添加等特點(diǎn)。
綜合性的海洋臺(tái)站監(jiān)測(cè)系統(tǒng)是一個(gè)集海洋監(jiān)測(cè)、數(shù)據(jù)收集、數(shù)據(jù)處理、產(chǎn)品對(duì)外發(fā)布于一體的監(jiān)測(cè)系統(tǒng)。如圖1所示,本文設(shè)計(jì)的監(jiān)測(cè)系統(tǒng)主要由搭建在海洋臺(tái)站的無線傳感器參數(shù)采集網(wǎng)絡(luò)與通過以太網(wǎng)連接的云服務(wù)器及數(shù)據(jù)存儲(chǔ)系統(tǒng)組成。
在傳感器網(wǎng)絡(luò)中,各傳感器由于安裝位置不同,例如,《海濱觀測(cè)規(guī)范》中對(duì)風(fēng)參數(shù)測(cè)量的周邊環(huán)境、安裝高度都有特殊的要求,與潮位、鹽度等水文參數(shù)測(cè)量地點(diǎn)往往距離較遠(yuǎn),現(xiàn)場(chǎng)布線安裝要求較高。針對(duì)上述問題,選用了6LoWPAN無線個(gè)域網(wǎng)搭建傳感器參數(shù)采集網(wǎng)絡(luò),這些無線節(jié)點(diǎn)運(yùn)行于精簡(jiǎn)、低功耗的6LoWPAN網(wǎng)絡(luò)協(xié)議棧之上,上電后自動(dòng)讀取節(jié)點(diǎn)MAC地址,并自動(dòng)配置好所需的IPv6地址。傳感器采集到的監(jiān)測(cè)數(shù)據(jù)如氣象參數(shù)、水文參數(shù)數(shù)據(jù)等通過多跳組網(wǎng)的方式發(fā)送到邊界路由進(jìn)行數(shù)據(jù)的轉(zhuǎn)發(fā),最后接入互聯(lián)網(wǎng),將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中,管理用戶與普通用戶可通過Web端訪問。采用上述設(shè)計(jì)方案,不但省去了布線問題,而且可以實(shí)現(xiàn)對(duì)氣象水文參數(shù)信息的實(shí)時(shí)共享。
6LoWPAN無線傳感器網(wǎng)絡(luò)由負(fù)責(zé)采集數(shù)據(jù)的傳感器節(jié)點(diǎn)與負(fù)責(zé)數(shù)據(jù)轉(zhuǎn)發(fā)的邊界路由節(jié)點(diǎn)組成。基于海洋環(huán)境復(fù)雜多變性與傳感器接口多樣性的特點(diǎn),節(jié)點(diǎn)嵌入式處理器需滿足性能穩(wěn)定、功耗小、處理能力強(qiáng)等需求,本文選用了TI公司的CC2538,該芯片基于ARM Cortex-M3內(nèi)核,具備高達(dá)32 KB的片上RAM和高達(dá)512 KB的片上閃存,提供了2個(gè) UART,2 個(gè) SPI,1 個(gè) I2C 接口,內(nèi)置 2.4 GHz IEEE 802.15.4 兼容 RF 收發(fā)器,在睡眠模式下電流僅為 1.3 μA。
在考慮低成本,低功耗,易拓展等因素之后,傳感器節(jié)點(diǎn)與邊界路由采用模塊化設(shè)計(jì),以方便針對(duì)不同應(yīng)用場(chǎng)合自由增減,如圖2所示。節(jié)點(diǎn)由電源模塊,采集模塊與網(wǎng)絡(luò)模塊三部分組成,傳感器節(jié)點(diǎn)與邊界路由節(jié)點(diǎn)在硬件設(shè)計(jì)上基本相同,不同之處在于傳感器節(jié)點(diǎn)可以實(shí)現(xiàn)無線自組網(wǎng),故較之邊界路由節(jié)點(diǎn)去掉了網(wǎng)絡(luò)模塊。
無線傳感器節(jié)點(diǎn)需在無人管理的情況下連續(xù)運(yùn)行,本文設(shè)計(jì)了太陽能電池板與蓄電池供電的電源模塊,保證了傳感器節(jié)點(diǎn)穩(wěn)定長(zhǎng)時(shí)間工作,同時(shí)本文還通過降低節(jié)點(diǎn)能耗和傳輸能耗實(shí)現(xiàn)了低功耗。
(1)傳感器節(jié)點(diǎn)基于Contiki操作系統(tǒng),該操作系統(tǒng)和ProtoThreads輕量級(jí)線程模型和事件機(jī)制完美結(jié)合,ProtoThreads輕量級(jí)線程的使用使得系統(tǒng)占用內(nèi)存極小,而事件驅(qū)動(dòng)內(nèi)核機(jī)制則降低了系統(tǒng)的功耗;MAC層采用ContikiMAC RDC機(jī)制,在該機(jī)制的作用下,節(jié)點(diǎn)工作占空比低于1%,大部分時(shí)間下都處于休眠狀態(tài),整體上降低了節(jié)點(diǎn)能耗。
(2)傳感器節(jié)點(diǎn)運(yùn)行6LoWPAN中的精簡(jiǎn)IPv6協(xié)議棧,可將IPv6頭部壓縮到4 byte,極大地降低了傳感器節(jié)點(diǎn)的數(shù)據(jù)傳輸量;網(wǎng)絡(luò)層基于RPL路由協(xié)議,通過使用目標(biāo)函數(shù)和度量集合構(gòu)建一種類似樹形拓?fù)鋱D,確立最優(yōu)路徑,從而減少數(shù)據(jù)在整個(gè)傳感器網(wǎng)絡(luò)中的傳輸能耗[4]。
云技術(shù)目前在網(wǎng)絡(luò)服務(wù)中已得到廣泛運(yùn)用,云技術(shù)采用分布式架構(gòu),可以根據(jù)數(shù)據(jù)的規(guī)模來靈活伸縮和擴(kuò)大。在海洋臺(tái)站快速增加時(shí),可以非常方便地通過增加云服務(wù)器規(guī)模來迅速滿足功能需求。為匹配云服務(wù)系統(tǒng)的可拓展性,服務(wù)器語言架構(gòu)必須具有高度的拓展性,本文選用了純開源,支持分布式部署,能支持?jǐn)?shù)百萬甚至更高的并發(fā)連接的Workerman服務(wù)器框架作為云服務(wù)系統(tǒng)的研發(fā)技術(shù)棧。
云服務(wù)系統(tǒng)為監(jiān)測(cè)系統(tǒng)提供后端支持,主要功能包括與無線傳感器通訊,數(shù)據(jù)存儲(chǔ),與監(jiān)測(cè)用戶Web端實(shí)時(shí)傳輸數(shù)據(jù)等。本文基于Workerman框架,設(shè)計(jì)了用于監(jiān)聽處理硬件數(shù)據(jù)的UDP服務(wù)器,用于與用戶Web端保持長(zhǎng)連接的Websocket服務(wù)器,用于之前實(shí)現(xiàn)發(fā)布-訂閱的推送服務(wù)器,服務(wù)器架構(gòu)如圖3所示。Master Workerman服務(wù)是Workerman框架中的主進(jìn)程,以守護(hù)進(jìn)程的形式運(yùn)行,自動(dòng)檢查服務(wù)器環(huán)境,創(chuàng)建并管理自定義的UDP、WebSocket、推送服務(wù)器。
圖3 云服務(wù)器架構(gòu)設(shè)計(jì)
無線傳感器節(jié)點(diǎn)為了達(dá)到低功耗需求,需長(zhǎng)時(shí)間處于休眠狀態(tài),無法采用長(zhǎng)連接的方式,因此選用了UDP數(shù)據(jù)傳輸方式。云服務(wù)器接收無線傳感器節(jié)點(diǎn)發(fā)送的數(shù)據(jù)包時(shí),搭建了UDP服務(wù)器進(jìn)程來實(shí)時(shí)監(jiān)聽端口,以便數(shù)據(jù)包到達(dá)時(shí)能及時(shí)接收。UDP數(shù)據(jù)包在傳輸過程中有可能丟失或者錯(cuò)誤,在數(shù)據(jù)接收之后對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),確定數(shù)據(jù)包的完整性,校驗(yàn)正確之后進(jìn)行下一步的數(shù)據(jù)存儲(chǔ)工作。基于上述設(shè)計(jì),關(guān)鍵偽代碼如下:
$udp=new UDP(udp://localhost');
//創(chuàng)建UDP服務(wù)
$udp->port=9090;
//指定UDP端口
$ws_worker->onMessage($data)
{
//當(dāng)有UDP數(shù)據(jù)包到來時(shí)調(diào)用
Check($data)//數(shù)據(jù)校驗(yàn)
Dump($data)//數(shù)據(jù)解析
}
接收并解析無線傳感器節(jié)點(diǎn)發(fā)來的數(shù)據(jù)包之后,將數(shù)據(jù)按照一定的格式及時(shí)存儲(chǔ)在數(shù)據(jù)庫(kù)中便于后續(xù)使用?;跀?shù)據(jù)分析可實(shí)現(xiàn)數(shù)據(jù)的報(bào)表顯示、歷史數(shù)據(jù)查詢、數(shù)據(jù)走勢(shì)曲線、實(shí)時(shí)預(yù)警等功能。
根據(jù)現(xiàn)場(chǎng)無線傳感器的實(shí)際情況,設(shè)計(jì)兩個(gè)字段(TYPE與ID)來區(qū)分不同傳感器類型與不同地區(qū)的同類傳感器。為了減小網(wǎng)絡(luò)數(shù)據(jù)包的大小,數(shù)據(jù)被整合為一條字符串。為節(jié)省現(xiàn)場(chǎng)開支,根據(jù)數(shù)據(jù)包到達(dá)服務(wù)器的時(shí)間,服務(wù)器以時(shí)間戳的方式存儲(chǔ)到達(dá)時(shí)間?;谏鲜雒枋?,數(shù)據(jù)字符串設(shè)計(jì)如表1所示。
表1 數(shù)據(jù)字符串設(shè)計(jì)
字段以逗號(hào)隔開,DATA中不同參數(shù)以‘|’分割,以西安中銘電氣有限公司的WXA100-06M六合一氣象傳感器為例,一條典型的數(shù)據(jù)如下:
0x0A,0x00,22.6|30.3|10.7|244.2|957.7|101.9,1477550996
在接收到無線傳感器節(jié)點(diǎn)的數(shù)據(jù)之后,云服務(wù)器首先需要調(diào)用與數(shù)據(jù)庫(kù)之間的連接,然后將數(shù)據(jù)插入數(shù)據(jù)庫(kù)。關(guān)鍵偽代碼如下:
//數(shù)據(jù)解析之后
$con->connect(mysql)
//云服務(wù)連接數(shù)據(jù)庫(kù)
mysql->query(insert$data)
//執(zhí)行插入數(shù)據(jù)庫(kù)語句
$con->disconnect()
//操作完畢后關(guān)閉連接
3.3.1 Websocket服務(wù)器設(shè)計(jì) WebSocket是 HTML5一種新的協(xié)議,它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信,可以非常方便地實(shí)現(xiàn)跨平臺(tái)。而且該協(xié)議具有實(shí)時(shí)性,可以保證監(jiān)測(cè)系統(tǒng)用戶的實(shí)時(shí)使用。為保證監(jiān)測(cè)用戶端與服務(wù)器保持長(zhǎng)連接,服務(wù)器建立了一個(gè)監(jiān)聽接口,來管理Websocket客戶端的連接。通訊方案實(shí)現(xiàn)關(guān)鍵偽代碼如下:
$ws=new ws("ws://localhost");
//建立 WebSocket服務(wù)
$ws->port=9292
//指定WebSocket監(jiān)聽端口
$ws->onWebSocketConnect()
//有連接時(shí)進(jìn)行連接握手
$ws->onMessage()
//連接上后進(jìn)行其他操作
用戶端發(fā)出查詢數(shù)據(jù)請(qǐng)求,WebSocket服務(wù)器根據(jù)用戶發(fā)送來的查詢指令通過數(shù)據(jù)庫(kù)進(jìn)行查詢,并將結(jié)果反饋給用戶。關(guān)鍵偽代碼如下:
$con->connect(mysql)
//云服務(wù)連接數(shù)據(jù)庫(kù)
mysql->query(selecet$data)
//執(zhí)行查詢數(shù)據(jù)庫(kù)語句并返回?cái)?shù)據(jù)
$con->disconnect()
//操作完畢后關(guān)閉連接
3.3.2 長(zhǎng)連接的斷線重連心跳機(jī)制 本文引入了心跳機(jī)制用于解決長(zhǎng)時(shí)間連接過程中意外發(fā)生的斷線與斷線重連問題,以保證用戶意外斷線后系統(tǒng)能夠自動(dòng)重連恢復(fù)工作??蛻舳硕〞r(shí)給服務(wù)器發(fā)送固定心跳包,避免連接由于長(zhǎng)時(shí)間沒有通訊而被某些節(jié)點(diǎn)的防火墻關(guān)閉導(dǎo)致連接斷開的情況發(fā)生。服務(wù)端可以通過心跳包來判斷客戶端是否在線,如果客戶端在規(guī)定時(shí)間內(nèi)沒有發(fā)來任何心跳包,就認(rèn)定客戶端意外下線,發(fā)起重連。實(shí)現(xiàn)關(guān)鍵偽代碼如下:
//設(shè)置心跳間隔25 s
$HEARTBEAT_TIME=25
//設(shè)置一個(gè)lastMTime,用來記錄上次收到消息的時(shí)間
$connection->lastMTime=time()
//記錄時(shí)間
//進(jìn)程啟動(dòng)后設(shè)置一個(gè)每秒運(yùn)行一次的定時(shí)器
$ws->onStart($connection)
{
//若該connection還沒收到過消息,則lastMTime設(shè)置為當(dāng)前時(shí)間
if(empty($connection->lastMTime))
{
$connection->lastMTime=$time_now;continue;
}
//上次通訊時(shí)間間隔大于心跳間隔,則認(rèn)為客戶端已經(jīng)下線,關(guān)閉連接
if($time_now-$connection->lastMTime
>HEARTBEAT_TIME)
{
$connection->close();
}
}
3.3.3 推送服務(wù)器設(shè)計(jì) 本文設(shè)計(jì)推送服務(wù)器負(fù)責(zé)保持與UDP和Websocket服務(wù)器的長(zhǎng)連接,Websocket服務(wù)器向推送服務(wù)器訂閱UDP服務(wù)器“消息到達(dá)”的事件,當(dāng)UDP服務(wù)器接收到氣象數(shù)據(jù)時(shí),向訂閱服務(wù)器發(fā)布“消息到達(dá)”消息,推送服務(wù)器將該消息推送給Websocket服務(wù)器。通過上述設(shè)計(jì)實(shí)現(xiàn)了無線傳感器節(jié)點(diǎn)與用戶的實(shí)時(shí)通訊。關(guān)鍵偽代碼如下:
Chanel_Server=new ChannelServer();//創(chuàng)建推送服務(wù)器
ChannelServer()::on{}
//收到廣播后向訂閱該事件的客戶端發(fā)送
ChannelClient::on($udp){}
//收到無線傳感器端的數(shù)據(jù)后向推送服務(wù)器廣播
ChannelClient::on($ws){}
//訂閱“收到無線傳感器端的數(shù)據(jù)”事件
//當(dāng)收到無線傳感器端數(shù)據(jù)的時(shí)候會(huì)收到來自推送服務(wù)器的廣播
為了驗(yàn)證本文設(shè)計(jì)的監(jiān)測(cè)系統(tǒng)的有效性,搭建包含水文參數(shù)采集節(jié)點(diǎn)和氣象參數(shù)節(jié)點(diǎn)的無線傳感網(wǎng)絡(luò),設(shè)備實(shí)物如圖4所示。
以上節(jié)點(diǎn)通過多跳組網(wǎng)將數(shù)據(jù)發(fā)送至服務(wù)器,服務(wù)器同步推送至Web端,此時(shí)瀏覽器顯示界面如圖5所示。當(dāng)用戶點(diǎn)擊主界面的左側(cè)按鈕選擇“表層海水溫度”一項(xiàng),將進(jìn)入下一層菜單(即為該單一數(shù)據(jù)的詳細(xì)界面)。在“表層海水溫度”單一界面中,用戶可選擇查看當(dāng)天數(shù)據(jù)、最近7 d數(shù)據(jù)、最近1個(gè)月數(shù)據(jù)、最近1 a數(shù)據(jù)等內(nèi)容,Web端會(huì)根據(jù)用戶需求通過服務(wù)器訪問數(shù)據(jù)庫(kù)調(diào)取對(duì)應(yīng)時(shí)間數(shù)據(jù)顯示在表層海水溫度單一數(shù)據(jù)折線圖6中。
圖4 設(shè)備實(shí)物圖
圖5 多節(jié)點(diǎn)Web端顯示界面
圖6 表層海水溫度單一數(shù)據(jù)折線圖
用戶可以通過具體時(shí)間區(qū)間的折線圖,直觀地觀察海洋平臺(tái)附近海水表層溫度的變化趨勢(shì)。同時(shí),數(shù)據(jù)折線圖底部也支持拖動(dòng)來縮放時(shí)間軸,用戶可以操作并獲得更短時(shí)間內(nèi)海水表層溫度的變化趨勢(shì),保證所需數(shù)據(jù)在某一時(shí)間段的精確性和適用性。
上述圖示結(jié)果證明本系統(tǒng)能夠及時(shí)準(zhǔn)確地接收傳感器數(shù)據(jù),并同步推送至Web端,實(shí)現(xiàn)了環(huán)境參數(shù)的動(dòng)態(tài)添加以及數(shù)據(jù)在網(wǎng)絡(luò)的動(dòng)態(tài)發(fā)布及數(shù)據(jù)處理。
本文設(shè)計(jì)了一種基于6LoWPAN的近海環(huán)境監(jiān)測(cè)系統(tǒng),針對(duì)目前海洋臺(tái)站監(jiān)測(cè)系統(tǒng)共享渠道差,現(xiàn)場(chǎng)搭建成本較高等問題,將低速無線個(gè)域網(wǎng)的成本低、組網(wǎng)靈活、易拓展的優(yōu)點(diǎn)引入到環(huán)境監(jiān)測(cè)當(dāng)中,提出了一種可行的解決方案。實(shí)驗(yàn)結(jié)果表明了設(shè)計(jì)的有效性。
[1]王振東.基于ARM的海洋臺(tái)站自動(dòng)觀測(cè)系統(tǒng)的設(shè)計(jì)[D].青島:中國(guó)海洋大學(xué),2009.
[2]秦明慧,李平,戴永壽,等.海洋臺(tái)站數(shù)據(jù)管理及動(dòng)態(tài)發(fā)布系統(tǒng)的設(shè)計(jì)[J].海洋預(yù)報(bào),2010,03:66-71.
[3]李立立.基于海洋臺(tái)站和浮標(biāo)的近海海洋觀測(cè)系統(tǒng)現(xiàn)狀與發(fā)展研究[D].青島:中國(guó)海洋大學(xué),2010.
[4]王靜涵.基于Contiki操作系統(tǒng)的RPL路由協(xié)議能耗均衡的研究[D].蘭州:蘭州大學(xué),2015.
[5]G Oikonomou,I Phillips.Stateless multicast forwarding with RPL in 6LoWPAN sensor networks[C]//Proceedings of IEEE International Conference on Pervasive Computing and Communications Workshops,2012:272-277.
[6]何世鈞,陳中華,張雨,等.基于物聯(lián)網(wǎng)的海洋環(huán)境監(jiān)測(cè)系統(tǒng)的研究[J].傳感器與微系統(tǒng),2011,03:13-15.
[7]盛平,丁波.基于WebSocket協(xié)議的智能溫室測(cè)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].軟件導(dǎo)刊,2016,08:65-68.
[8]王曉喃,殷旭東.基于6LoWPAN無線傳感器網(wǎng)絡(luò)的農(nóng)業(yè)環(huán)境實(shí)時(shí)監(jiān)控系統(tǒng)[J].農(nóng)業(yè)工程學(xué)報(bào),2010,10:224-228.
[9]袁紅春,汪辰,梅海彬.一種適用于近海環(huán)境監(jiān)測(cè)的WSNs節(jié)點(diǎn)設(shè)計(jì)方法[J].傳感器與微系統(tǒng),2015,04:85-88.
[10]M Jung,P Raich,W Kastner.The relevance and impact of IPv6 multicasting for Wireless Sensor and Actuator Networks based on 6LoWPAN and constrained RESTful environments[C]//2014 International Conference on the Internet of Things(IOT),Oct.2014.