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