基于無線傳感器網絡的橋梁監測系統研究
5.1 CTP協議的實現
CTP協議是基于樹的多跳協議。把網絡中的節點抽象為樹,每棵樹有一個根節點, 負責收集這棵樹所有節點的信息。網絡中節點通過路由梯度值(ETX)逐跳地選擇路由, 直至到達根節點。根節點的ETX為0, 每個子節點的ETX值等于父節點的ETX值加上該節點到它父節點的路徑ETX值。因此, ETX值是沿著往根節點的方向遞減的, CTP選擇路徑ETX值最小的路徑作為路由。
CTP的實現是基于下層鏈路估計結果的。鏈路估計會維護一個鄰節點表, 表中存儲了每個鄰節點的路徑ETX 值。CTP協議中的CtpRoutingEngine 組件實現了路由的選擇, 它根據鄰節點的ETX值為數據傳輸選擇下一個路由。另一個關鍵的組件函數CtpForwardingEngine, 該組件主要是維護一個消息發送隊列, 往下層發送本地產生的或者轉發過來的數據包; 該組件還能夠檢測重復發送的數據包, 以抑制重復發包。
實現的四個關鍵函數是: 數據包接收(SubReceive.receive())、數據包轉發(forward())、包傳輸(sendTask())和發送完成事件(SubSend.sendDone())。
函數SubReceive.receive ()決定是否要轉發包。通過維護一個最近收到的包緩存來檢查是否有重復包。如果判定一個包不是重復包, 則調用forward()函數。
forward()函數封裝好要發送的包。這個函數同時檢查是否有回環。發送時將包放到發送隊列中去, 若隊列滿了, 就丟棄該包, 并把C位置1。如果隊列為空, 則立即post 發送任務。
sendTask()檢查發送隊列頭部的數據包, 封裝好后提交給AM層。發送完成后, sendDone()函數檢查發送的結果。如果該數據包已經被確認過了, 則將該包從隊列中取出。如果是本地的包, 發送事件通知給上層的客戶。如果是轉發來的包, 則將它放到轉發消息池中。如果隊列中還有包的話, 就啟動一個隨機時鐘, 重新post發送任務。
5.2 LEEP協議的實現
LEEP 是一種鏈路估計交換協議, 主要是用來計算某節點與鄰節點之間的雙向鏈路質量。節點A→B的鏈路質量是指B成功接收到A發送的數據包的概率。節點(A, B)間的雙向鏈路質量是A→B的鏈路質量(in-bound 鏈路質量)與B→A的鏈路質量(out-bound 鏈路質量) 的乘積。
6 結束語
基于無線傳感器網絡的橋梁結構健康監測系統,我們對傳感器節點的設計和支持系統運行的嵌入式操作系統TinyOS的移植問題進行了研究。還有兩個問題需要進一步深入研究,一個是傳感器網絡的休眠節能技術需要解決網絡各節點的同步問題;第二個問題是建立橋梁結構健康*估專家系統,能夠根據傳感器網絡匯總的大量橋梁結構信息作出準確的分析判斷,從而實現事故預報警,預防突發性災難,確保橋梁安全。
光纖傳感器相關文章:光纖傳感器原理
評論