中文 | English

【物聯網開發系列】氣象物聯網:風向偵測開發感測器下篇

文/曹永忠、許智誠、蔡英德

筆者在上篇文章「【物聯網開發系列】氣象物聯網 :風向偵測開發感測器上篇」(曹永忠,許智誠 & 蔡英德,2017c)中,我們說到如何擷取風速資訊,本文要接著介紹風向感測器的技術內容與控制技術。

前言

如下圖所示,我們提到了如何安裝、測試風向感測器,由於我們要控制與讀取風向資訊,本文將要介紹風向感測器的通訊協定。

圖 1:風向感測器產品圖

風向感測器通訊方式

如下表所示,我們必須先將風向感測器通訊配置的資料,設定為下列資訊。

表 1:風向感測器通訊配置表

Communication Format 8 Bit Binary(Modbus RTU)
Data Bits 8 位
Parity
Stop Bits 1 位
Cyclic Redundancy Check CRC16
Speed(Baud) 2400、4800、9600,Default :4800

由於風向感測器採用 Modbus-RTU 通訊規格(曹永忠,2016;曹永忠,許智誠 & 蔡英德,2017a,2017b),如下表所示,我們可以了解其使用 Modbus-RTU 查詢命令碼的格式如下表:

表 2:風向感測器使用 Modbus-RTU 查詢命令碼

設備位址 功能碼 暫存器起始位址 暫存器長度 CRC16
Low Byte
CRC16
High Byte
1 Byte 1 Byte 2 Byte 2 Byte 1 Byte 1 Byte

由於風向感測器採用許多暫存器,如下表所示,我們可以了解其使用暫存器內容如下

表 3:風向感測器之暫存器一覽表

暫存器位址 PLC 或組態地址 內容 操作
0000 H 40001 風向(0-7 檔) 上傳資料即為真實值 唯讀
0001 H 40002 風向(0-360°)

上傳資料即為真實值

唯讀

由於本文風向感測器使用設備位址為 2,所以我們可以求出下表所示之 Modbus-RTU 查詢命令範例碼。

表 4:Modbus-RTU 查詢命令範例碼

設備位址 功能碼 暫存器起始位址 暫存器長度 CRC16
Low Byte
CRC16
High Byte
0x02 0x03 0x00 0x00 0x00 0x02 0xC4 0x38

如果讀者不知道 CRC16 如何計算出,請使用網址,將「020300000002」之十六進位值輸入後,如下圖所示,可以得到 0x38C4 的值。

使用 AccessPort 通訊工具取得風向

本文使用 AccessPort 通訊工具(下載網址),或到筆者 Github,皆可下載 AccessPort 通訊工具,目前版本為 1.37 版,將軟體安裝完成後,如下圖所示,我們可以看到主畫面如下:

如下圖所示,我們點選下圖紅框處,進入 AccessPort 通訊設置。

圖 4:進入 AccessPort 通訊設置

如下圖所示,我們進入 AccessPort 通訊設置畫面後,我們輸入下圖所示的通訊配置值後,按下確定完成通訊配置。

圖 5:進入 AccessPort 通訊設置畫面

如下圖所示,我們點選下圖紅框處,開啟 AccessPort 通訊埠。

圖 6:開啟 AccessPort 通訊埠

如下圖所示,我們看到畫面抬頭出現「Opened」,則代表已開啟 AccessPort 通訊埠。

圖 7:進入 AccessPort 通訊設置畫面

如下圖所示,我們用十六進位方式輸入「020300000002C438」(參考下圖所示之內容)。

圖 8:輸入傳送命令(十六進位碼)

如下圖所示,我們點選下圖紅框處之發送資料,將輸入「020300000002C438」傳送到風向感測器進行查詢風向。

圖 9:傳送命令(十六進位碼)

如下圖所示,我們發現,我們得到「020304000500E1197A」之十六進位回傳值。

圖 10:取得回傳命令(十六進位碼)

解譯風向感測器回傳資料

由於風向感測器採用 Modbus-RTU 通訊規格,如下表所示,我們可以了解其使用 Modbus-RTU 回傳資料格式(曹永忠 et al.,2017a,2017b):

表 5:風向感測器回傳資料格式

地址碼 功能碼 返回有效位元組數 風向

(0-7 檔)

風向

(0-360°)

CRC16
1 位元組 1 位元組 1 位元組 2 位元組 2 位元組 2 位元組

如下表所示,我們將得到「020304000500E1197A」之十六進位回傳值,整理成下表。

表 6:風向感測器實際回傳資料

地址碼 功能碼 返回有效位元組數 風向

(0-7 檔)

風向

(0-360°)

CRC16

Low Byte

CRC16

High Byte

0x02 0x03 0x04 0x00 0x05 0x00 0xE1 0x19 0x7A

我們在使用之線 CRC16 運算工具,將「020304000500E1」之十六進位值輸入後,如下圖所示,可以得到0x0A84的值。

圖 11:使用線上工具計算出 CRC16 之值

我們在發現之線 CRC16 運算工具,計算出 CRC16(Modbus)的值為「0x7A19」。

我們在比較上表之實際資料,其 CRC16 資料為 0x19 與 0x7A,由於其表之 CRC16 順序為低位元組與高位元組,所以將之相反之後,得到 0x7A 與 0x19, 與上圖之值:「0x7A19」完全相同,則回傳資料為正確之值。

如下表所示,我們參考風向感測器資料格式對照表,瞭解風向(0-7 檔)與風向(0-360°)兩個值的意義:

  • 風向(0-7 檔)表東、南、西、北、東北、東南、西北、西南八方向
  • 風向(0-360°)表以北方為零度,順時鐘方向的角度

表 7:風向感測器資料格式對照表

採集值(0-7 檔) 採集值(0-360°) 對應方向
0 北風
1 45° 東北風
2 90° 東風
3 135° 東南風
4 180° 南風
5 225° 西南風
6 270° 西風
7 315° 西北風

最後我們根據表 7 之格式,取出表  6 第四欄的資料,為 0x00 與 0x05,根據高位元組與低位元組進行運算,00*256+05(0x05)=5,我們根據表 7 之格式,計算出風向為西南風。

最後我們根據表 7 之格式,取出表 6 第五欄的資料,為 0x00 與 0xE1,根據高位元組與低位元組進行運算,00*256+225(0xE1)=225,我們根據表 7 之格式,計算出風向角度為 225°。

所有的風向資訊,我們可以透過 Modbus RTU 通訊方式,再經由上述方法進行解釋,我們就可以輕鬆取得風向資訊。

後續

本篇是「氣象物聯網」系列中「風向偵測開發感測器下篇」,主要告訴讀者,如何從風向感測器,透過 Modbus RTU 通訊方式讀取風向資訊,下期文章我們將介紹如何透過單晶片控制器,取風向資訊,在未來發展進一步發展中,可以再透過不同開發工具與技巧,來建構更先進,更具使用者需求的系統。

後續筆者還會繼續發表「氣象物聯網」系列的文章,在未來我們可以創造出更優質,更具未來性的物聯網(Internet of Thing:IOT)產品開發相關技術。

敬請期待更多的文章。

作者介紹:

曹永忠(Yung-Chung Tsao) ,目前為自由作家暨專業 Maker,專研於軟體工程、軟體開發與設計、物件導向程式設計,商品攝影及人像攝影。長期投入創客運動、資訊系統設計與開發、企業應用系統開發、軟體工程、新產品開發管理、商品及人像攝影等領域,並持續發表作品及相關專業著作。
Email:prgbruce@gmail.com
Line ID:dr.brucetsao
作者網頁臉書社群 (Arduino.Taiwan)Github網站Youtube

許智誠(Chih-Cheng Hsu),美國加州大學洛杉磯分校(UCLA) 資訊工程系博士,曾任職於美國 IBM 等軟體公司多年,現任教於中央大學資訊管理學系專任副教授,主要研究為軟體工程、設計流程與自動化、數位教學、雲端裝置、多層式網頁系統、系統整合。
Email: khsu@mgt.ncu.edu.tw

蔡英德(Yin-Te Tsai),國立清華大學資訊科學系博士,目前是靜宜大學資訊傳播工程學系教授、靜宜大學計算機及通訊中心主任,主要研究為演算法設計與分析、生物資訊、軟體開發、視障輔具設計與開發。
Email: yttsai@pu.edu.tw

參考文獻:

曹永忠. (2016). 工業4.0實戰-透過網頁控制繼電器開啟家電. Circuit Cellar嵌入式科技(國際中文版 NO.7), 72-83.

曹永忠, 許智誠, & 蔡英德. (2017a). Ameba风力监控系统开发(气象物联网) (Using Ameba to Develop a Wind Monitoring System (IOT for Weather)) (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.

曹永忠, 許智誠, & 蔡英德. (2017b). Ameba風力監控系統開發(氣象物聯網) (Using Ameba to Develop a Wind Monitoring System (IOT for Weather)) (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.

曹永忠, 許智誠, & 蔡英德. (2017c). 【物聯網開發系列】氣象物聯網 :風向偵測開發感測器上篇. 物聯網開發系列.  Retrieved from https://vmaker.tw/

分享到社群

曹永忠

目前為自由作家,專注於軟體工程、軟體開發與設計、物件導向程式設計、Arduino開發、嵌入式系統開發,商品攝影及人像攝影。長期投入資訊系統設計與開發、企業應用系統開發、軟體工程、新產品開發管理、商品及人像攝影等領域,並持續發表作品及相關專業著作。