PHOENIX 火警系統是透過基地台以及部署於建築物內部的諸多感測 器硬體所共同構築而成的無線感測網路,基地台與感測器均必須遵守共通 的無線網路協定(protocol),才能彼此交換控制訊息與資料封包。一般而 言,在網路協定的描述當中,首先談到的就是「分層(layer)」概念,這 是指網路運作時依照功能項目,將網路諸多程序規劃成不同的模組區塊,
每個模組之間互相搭配與支援,進而堆砌成龐大且細膩的系統架構,即所 謂「協定堆疊(protocol stack)」,這項概念是現代化系統設計的一個重要 技巧,例如在網際網路上早已盛行許久的 OSI 七層式網路架構就是一個典 型的示範,然而礙於無線感測網路對於省電、計算及有限資源等限制考 量,我們必須針對本系統量身打造一套合適的協定推疊,下面進而闡述本 系統中所設計的推疊架構。
整體來說,PHOENIX 系統的網路協定堆疊可分為四層,如下頁圖(九) 中所示,包含了實體層(Physical Layer)、媒介存取控制層(Medium Access Control Layer)、網路層(Network Layer)以及應用層(Application Layer)
等四個層面;其中實體層與媒介存取控制層分別負責底層的載波傳輸與媒 介控制等基礎通訊功能,搭配專門定義網路訊息交換行為的網路層以及制 定 系 統 服 務 流 程 的 應 用 層 。 PHOENIX 系 統 屬 於 一 種 任 務 導 向
(mission-centric)的應用型架構,在規劃上,我們將應用層再細分為兩項 次層次,即物件層(PHOENIX Object)與應用支援層(Application Support Sub-Layer),裡面描述了所有火警應用時需要參照的元件模組,以及針對 物件層所提供的特殊輔助功能模組。
圖(九)、PHOENIX 系統之通訊協定堆疊。
在微型作業系統 TinyOS 上實作所設計的協定堆疊,必須使用一套稱 為「NesC」的程式語言,這套程式語言本身是由柏克萊大學所負責維護,
具備有類似 C 語言的文法結構,支援客戶端撰寫與編譯程式,下圖(十)為 我們所實作的協定堆疊模組配置圖,配合上頁圖(九)中所設計的堆疊架 構,可分為四大項模組,由上至下分別為 PhoenixAPL、PhoenixNWK、
PhoenixMAC 及 PhoenixCOM,各自對應於上述的四個協定堆疊層次,在 圖(十)中亦表現出資料與控制訊號的聯接關係。
圖(十)、協定堆疊模組之連接關係圖。
搭配著協定堆疊的佈局,接著再介紹 PHOENIX 系統中的「訊息封裝
(massage encapsulation)」之前,首先得談及在 TinyOS 中所制定的訊息結 構 TOS_Msg,如下表(六)所示,TOS_Msg 訊息結構的大小僅為具有十三個 位元組大小,包含一般通訊傳輸時的基本資訊,諸如: addr(目地端位址 資訊)、type(訊息型態)、length(訊息長度)、crc(錯誤校驗碼)等等資 訊,特別值得一提的是其中一項用來存放 data(資料)的欄位,這個欄位 是一個整數型態的指標,指向另外一處長度為 TOSH_DATA_LENGTH6的
6 依據 TinyOS 中 AM.h 的定義:
#define TOSH_DATA_LENGTH 29
陣列位置,在 PHOENIX 系統中的所有訊息將利用這個 data 的部份加以封 裝,封裝的技巧在於明確地區分出資料所屬的堆疊層次。
Declaration Structure of TOS_Msg in TineOS Source Code 1: typedef struct TOS_Msg {
2: uint16_t addr;
3: uint8_t type;
4: uint8_t group;
5: uint8_t length;
6: int8_t data[TOSH_DATA_LENGTH];
7: uint16_t crc;
8: uint16_t strength;
9: uint8_t ack;
10: uint16_t time;
11: } TOS_Msg;
表(六)、訊息封裝格式。
PHOENIX 系統中訊息封裝主要分為 type、srcaddr、destaddr、hopcnt、
seqno 以及 data 等,型別依據所有堆疊層次共分 31 種,如下表(七)所示,
其中以標示 CMD、SET、ASK、RPT、EMG 分別表示為命令、設定、詢 問、回報與緊急等形態之訊息,主要是以 type 來作為訊息封裝與解封裝時 的判斷;srcaddr、destaddr 是紀錄發送來源端的識別碼;每當訊息流路經 過一次地跳躍轉傳,hopcnt 欄位會被加一,設計於傳輸時確保收方能無誤 地接收資料;seqno 是記載該訊息相對於 srcaddr 節點之發出紀錄,用以避 免 destaddr 節點重複接收相同的訊息,也助於了解網路訊息失落的情形。
Message Type Enum. Comment Broadcast Message Form Base Station To Sensor
PHOENIXCMD_RESET_ALL 0 Reset PHOENIX WSN.
PHOENIXCMD_BEACON 1 Initiate PHOENIX WSN.
PHOENIXCMD_TIMESYNC 2 Time synchronize PHOENIX WSN.
PHOENIXCMD_IDLE_ALL 3 Idle PHOENIX WSN.
PHOENIXCMD_ACTIVE_ALL 4 Active PHOENIX WSN.
Unicast Message Form Base Station To Sensor
PHOENIXCMD_RESET 5 Reset the specified sensor.
PHOENIXCMD_IDLE 6 Idle the specified sensor.
PHOENIXCMD_ACTIVE 7 Active the specified sensor.
PHOENIXSET_PARAMS 8 Set parameters to the specified sensor.
PHOENIXSET_POSITION 9 Set potion to the specified sensor.
PHOENIXSET_DATE 10 Set date to the specified sensor.
PHOENIXSET_TIME 11 Set time to the specified sensor.
PHOENIXSET_NBR_DIR 12 Set neighbor direction information to the specified sensor.
PHOENIXSET_EDST 13 Set edge-disjoint spanning trees to the specified sensor.
PHOENIXASK_PARAMS 14 Ask parameters to the specified sensor.
PHOENIXASK_STATUS 15 Ask status to the specified sensor.(including date, time, position, ...etc)
PHOENIXASK_READING 16 Ask reading data to the specified sensor.
PHOENIXASK_NBR_DIR 17 Ask neighbor direction information to the specified sensor.
PHOENIXASK_EDST 18 Ask edge-disjoint spanning trees to the specified sensor.
PHOENIXEMG_GUIDE 19 Initiate the emergency guiding procedure.
Unicast Messages Form Sensor To Base Station
PHOENIXRPT_PARAMS 20 Report parameters to the specified sensor.
PHOENIXRPT_STATUS 21 Report status to the specified
sensor.(including date, time, position, ...etc) PHOENIXRPT_READING 22 Report reading data to the specified sensor.
PHOENIXRPT_NBR 23 Report neighbor direction information to the specified sensor.
PHOENIXRPT_EDST 24 Report edge-disjoint spanning trees to the specified sensor.
PHOENIXRPT_WARNING 25 Report warning sensing data to the specified sensor.
PHOENIXRPT_DANGER 26 Report danger sensing data to the specified
sensor.
Broadcast Messages Between Sensors
PHOENIXEMG_WARMING 27 Inform the warning information to neighbors.
PHOENIXEMG_POST 28 Guiding post the neighbors.
PHOENIXCMD_DISCOVERY 29 Neighbor discovery.
PHOENIXCMD_REPLY 30 Reply the PHONIXCMD_DISCOVERY.
表(七)、訊息列表總覽。