系統架構設計與處理流程
3.2 應用程式介面(API)介紹 .1 設計考量 .1 設計考量
- 裝置操作控制統一以裝置管理(Device Manager)類別進行之。
- 考量開發者控制裝置的直覺性,將各類感測資料讀取包裝成方法(Method) ,
CommandSender.APP.MT_APP_MSG TEMP = new CommandSender.APP.MT_APP_MSG();
TEMP.AppEndpoint = (byte)ENDPOINT.UARTApp_ENDPOINT;
TEMP.DestAddress =裝置IP;
TEMP.DestEndpoint = (byte)ENDPOINT.UARTApp_ENDPOINT;
TEMP.ClusterID = APPCMD_ClusterID.UART_SENSOR_READ_REQUEST_CMD;
TEMP.SENSOR_DATA.SensorTYPE =0x01;
//SENSOR_TEMPERATURE 0x01 , SENSOR_BATTERY 0x02 TEMP.SENSOR_DATA.Status = 0x03;
//#define ACTION_READ 0x01
//#define ACTION_WRITE 0x02 //#define ACTION_REQUEST 0x03 //#define ACTION_RESPONSE 0x04 //#define ACTION_SENSOR_ENABLE 0x05 //#define ACTION_SENSOR_DISABLE 0x06
byte[] sendBytes = TEMP.Message();
this.DeviceManager.SerialPort.Write(sendBytes, 0, sendBytes.Length);
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
- 考量控制晶片版本更換或不同廠商控制晶片指令集不統一之問題,裝置控制指 令類別庫專案名稱以晶片版本為名稱(如:LIB_ZBCC2530),以便類別之抽換。
而控制指令類別名稱固定為 command,類別定義檔取名為 command.cs。
- 類別庫中定義符合 ZigBee 資料傳輸格式之結構,詳細介紹可見 3.2.3 小節 CC2530-ZNP 資料傳輸格式介紹。
- 裝置與電腦連結時, 需要設計開啟與關畢 COM Port 連結動作之功能,方能與 裝置溝通運作。
- 須定義各類感測資料讀取的事件處理器。裝置管理類別中的定義程式如下:
- API 設計不用牽涉到任何 UI(User Interface)的互動設計。
- 資料存取類別之定義使用微軟的 ADO.NET Entity Framework 及 C# Linq 語法,
若更換資料庫管理系統(DBMS,Database Management System) ,如:Oracle、
SQL Server、 MySQL、DB2……時,只要重新生成實體資料模型(.edmx)檔,不用 修改與 DB 存取有關的程式。
- 感測資料收集除了儲存於資料庫中,開發者者自行定義將資料保存於 XML 檔。
public event EventHandler<TemperatureReceivedEventArgs> TemperatureReceived;
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
3.2.2 API 架構
本研究之 API 是由三個專案(Project)類別庫(Class Library)組成,分別 為:資料存取類別、ZigBee 裝置控制指令類別、ZigBee 裝置操作類別。主要工 作為:
a.資料存取類別:負責資料庫(Database)異動處理與資料讀取。
b.裝置控制指令類別:針對 TI CC2530 晶片控制指令作定義與指令解析及傳送。
c.裝置操作類別:操作感測裝置取得感測值或控制感測裝置。
圖 3.7 為 API 架構,欲完成一 ZigBee 感測裝置操作可引用相關類別進行 之。各主要專案類別庫有其相關類別定義,將於下一章節說明之。
圖 3.7 應用程式架構
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
透過圖 3.7,可看出本研究之 API 的組成架構,而圖 3.8 主要描述各類別檔 之角色關係。當應用程式和感測裝置溝通時,傳輸資料格式定義於 Command.cs 中,傳送時需透過 CommandSender.cs 中定義之類別,而每次資料的傳遞都需利 用 CommandParser.cs 定義之類別來解析資料與指令。整個應用程式之開發主要 是引用 ZbDeviceManager 類別,而 ZbDeviceManager.cs 中需操作 ZbDevice.cs、
ZbSerialPort.cs 與 ZbEnums.cs 中所定義之相關類別。其中 ZbSerialPort.cs 需透過 ZbSerialFrame.cs 所定義之類別來作業 Serial Frame(序列格式)的宣 告。
另外,有關資料存取類別,由 ZBEntityModel.edmx 定義之,透過 C#語言與 LinQ 語法可利用物件導向方式操作資料庫(Database)中的資料表(Tables) ,此 部份可視情況加入應用程式中配合使用。
圖 3.8 感測控制裝置與程式類別庫關係架構圖
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
3.2.3 CC2530-ZNP 資料傳輸格式介紹
作實 ZigBee 裝置操作最重要的是要了解 CC2530-ZNP (ZigBee Pro Network Processor,ZigBee 專業網路處理器)晶片與應用程式處理器(Application Processor)溝通的資料格式(Frame Format),進而根據晶片廠商提供之晶片規格 書定義指令處理類別庫,在此章節先介紹 TI ZigBee CC2530-ZNP 資料格式,於 後下一章節再介紹類別庫之定義。圖 3.8 說明 Application Processor 與 ZigBee CC2530-ZNP 之溝通架構:
圖 3.9 Application Processor 與 ZigBee CC2530-ZNP 溝通架構
由此架構圖可看出,兩者可透過 UART(通用非同步收發傳輸器,Universal Asynchronous Receiver/Transmitter,即我們常說的 COM Port,RS-232)介面來 溝通。其實 CC2530-ZNP 至應用程式處理器支援的傳輸介面有 SPI(Serial Peripheral Interface bu,序列設備介面) Interfact,UART Interface 或 USB(Universal Serial Bus,通用序列匯流排) Interface。本論文之實作,溝
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
通介面以 UART 為主,故以下僅對 UART 傳輸介面做相關說明。
由於 ZigBee 裝置運作需透過 CC2530-ZNP,晶片的處理至少要支援 Address IP 的取得、Mac Address 資訊與裝置特性感測值及電力感測值偵測和運算。而與 裝置控制之操作需透過應用程式,所以處理應用程式之處理器須知道如何解析 (Parser)透過 UART 傳輸的資料(Frame Data)。以下將說明 UART 傳輸之相關知 識,在此之前先介紹相關之縮寫,請參考表 3.1,以便了解後續解說。
表 3.1 UART 傳輸相關名稱縮寫
a.傳輸配置(Configuration)
․ 支援傳輸鮑率(Baud Rate)至 115200 bps。
․ 支援硬體 CTS(允許發送)/RTS(請求發送)流量控制。
․ 支援電腦常用非同步串列(RS-232)傳輸 8-N-1 Byte 格式 (8 Data bits,No parity bit,1 stop bit) 。
‧
b.Frame Format
․ SOF:起始字元組,固定為 0xFE。
․ FCS(Frame Check Sequence):檢查碼,這個欄位資是從資料長度 Byte 開始到資料欄的最後一個 Byte 做 XOR 算法的結果。以 C#為範例的 FCS 計算如下:
․ General Format Frame:整個格式結構組成包括 Length、Command、Data 三部份,至少要 3 個 Bytes,最長為 253 Bytes。
- Length:記錄 Frame Format 資料長度,最長為 256 Bytes。
- Command:包括 Cmd0(指令類別 0)、Cmd1(指令類別 0) 。
> Cmd0 – Type 部份:共 3 個 Bits,值為 0 至 7。
0.POLL:檢索串列資料。
1.SREQ:同步需求需要一個立即的回應,如:Function 呼叫需回傳值。
2.AREQ:非同步的需求。如:Function 呼叫不需要回傳值。
3.SRSP:同步回應。該指令只有在傳送 SREQ 時才有回應,一般情況 SRSP 的長度是不為 0 的,否則會發生錯誤。
4-7.Reserved:目前保留。
> Cmd0 - Subsystem 部份:共 5 個 Bits,值為 0 至 31,如表 3.2。
表 3.2 Cmd0-Subsystem 部份