1. 程式人生 > >以modbus協議為通訊協議的電錶解析總結

以modbus協議為通訊協議的電錶解析總結

一、 初識modbus
Modbus 協議是應用於電子控制器上的一種通用語言。通過此協議,控制器相互之間、控制器經由網路(例如乙太網)和其它裝置之間可以通訊。Modbus 協議定義了一個控制器能認識使用的訊息結構,而不管它們是經過何種網路進行通訊的。它描述了一控制器請求訪問其它裝置的過程,如果迴應來自其它裝置的請求,以及怎樣偵測錯誤並記錄。它制定了訊息域格局和內容的公共格式。

目前,Modbus 有下列三種通訊方式:
1.乙太網,對應的通訊模式是Modbus TCP。
2.非同步序列傳輸(各種介質如有線RS-232-/422/485/;光纖、無線等),對應的通訊模式是 Modbus RTU 或 Modbus ASCII。
Modbus 的ASCII、RTU 協議規定了訊息、資料的結構、命令和應答的方式,資料通訊採用Maser/Slave方式。
3.高速令牌傳遞網路,對應的通訊模式是Modbus PLUS。

文件所採用的是第一種。
二、 Modbus的具體含義
先來簡單分析一條MODBUS-RTU報文,例如:01 06 00 01 00 17 98 04
01 06 00 01 00 17 98 04
從機地址 功能號 資料地址 資料 CRC校驗

這一串資料的意思是:把資料 0x0017(十進位制23) 寫入 1號從機地址 0x0001資料地址。

1、報文
一個報文就是一幀資料,一個數據幀就一個報文: 指的是一串完整的指令資料,就像上面的一串資料。

2、CRC校驗
意義:例如上面的 98 04 是它前面的資料(01 06 00 01 00 17)通過一演算法計算出來的結果,其實就像是計算累加和那樣。(累加和:就是010600010017加起來的值,然後它的演算法就是加法)。
作用:在資料傳輸過程中可能資料會發生錯誤,CRC檢驗檢測接收的資料是否正確。比如主機發出01 06 00 01 00 17 98 04,那麼從機接收到後要根據01 06 00 01 00 17 再計算CRC校驗值,從機判斷自己計算出來的CRC校驗是否與接收的CRC校驗(98 04主機計算的)相等,如果不相等那麼說明資料傳輸有錯誤這些資料不能要。

3、功能號
意義:modbus 定義。
最常用功能碼:
下面“線圈”“暫存器”其實分別直的就是“位變數”“16位變數”
01 (0x01) 讀線圈
02 (0x02) 讀離散量輸入
03 (0x03) 讀保持暫存器
04(0x04) 讀輸入暫存器
05 (0x05) 寫單個線圈
06 (0x06) 寫單個暫存器
15 (0x0F) 寫多個線圈
16 (0x10) 寫多個暫存器

三、 ZigBee modbus的報文格式及通訊過程
1. 讀取多路暫存器
例如:讀取環境溫度值

這裡寫圖片描述

  1. 讀取開關量輸出狀態
    這裡寫圖片描述

總結:一般主機的報文包括流水號(1位元組),MAC(6位元組),從機地址(1位元組),功能碼(1位元組),起始地址(2位元組),讀取開關量數量(2位元組),功能碼(2位元組)。
從機包括流水號(1位元組),MAC(6位元組),從機地址(1位元組),功能碼(1位元組),資料長度(1位元組),開關狀態(2位元組),功能碼(2位元組)。

  1. 通訊過程

    這裡寫圖片描述
    主站與插座的通訊協議為 MODBUS 協議。
    上位機將 MODBUS 封包按照 【一個位元組的流水號, 6 個位元組的 RJ45 主站裝置 MAC 值, 給插座的 MODBUS 封包】重新包裝,送給 RJ45 無線主站;RJ45 無線主站收到這個格式的封包,確認 MAC 值正確後,就會檢查MODBUS 封包的第一個位元組 (插座的 ID, 即寄送目的方) , 然後通過無線 zigbee 網路將上位機傳來的 MODBUS封包,完全不動的轉給該 ID 的插座(透明轉發) 。同樣地,插座送給上位機的封包,也是由 RJ45 無線主站完全不動的送給上位機處理。

四、 硬體解析進展
1. 實時採集資料
(流水號)0A .. 0F 10 11 ..19 1A ..1F 20 ..29 2A ..2F 30…99 9A ..9F A0….
查詢自組網系統狀態
TX: 00 00 05 9E F4 03 4C 00 03 00 00 00 00 44 1B
RX: AA 00 05 9E F4 03 4C 00 03 32 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B2 7F
(ID 1,ID 2 插座 在無線網內,正常工作中)

讀取溫度
TX: 00 00 05 9E F4 03 4C 01 03 00 5C 00 01 44 18
RX: AB 00 05 9E F4 03 4C 01 03 02 00 00 B8 44(0度)

讀取開關量輸出狀態
TX: 00 00 05 9E F4 03 4C 01 01 00 00 00 10 3D C6 00 00 00 00
RX: AC 00 05 9E F4 03 4C 01 01 02 01 00 B8 6C(閉合狀態)
RX: AE 00 05 9E F4 03 4C 01 01 02 00 00 B9 FC(斷開狀態)

設定單路開關狀態
RX: 00 00 05 9E F4 03 4C FF 00
RX: 0E 00 05 9E F4 03 4C 01 05 00 00 00 00 CD CA(斷開)
TX: 0E 00 05 9E F4 03 4C FF 00

RX: 00 00 05 9E F4 03 4C FF 00
RX: 0F 00 05 9E F4 03 4C 01 05 00 00 01 00 CC 5A(閉合)
TX: 0F 00 05 9E F4 03 4C FF 00

引數採集
(電壓229.37,電流0.00,有功功率0.00,有功電能62.3306,功率因數0.000,CO2-0.000,用電時間1727.2,訊號強度3)
TX: 00 00 05 9E F4 03 4C 01 03 00 48 00 0A 45 DB
RX: 00 00 05 9E F4 03 4C FF 00
RX: A2 00 05 9E F4 03 4C 01 03 14 59 99 00 00 00 00 00 03 0B 22 00 00 00 00 00 00 52 25 03 01 01 00
TX: A2 00 05 9E F4 03 4C FF 00

TX: 00 00 05 9E F4 03 4C 01 03 00 52 00 02 65 DA
RX: 00 00 05 9E F4 03 4C FF 00
RX: A3 00 05 9E F4 03 4C 01 03 04 00 00 43 78 CB 21
TX: A3 00 05 9E F4 03 4C FF 00

  1. 進展及問題
    能成功讀取多路開關量的輸出狀態,並解析報文資料;能成功設定單路開關量的輸出狀態,並解析報文資料。
    明白報文各個資料各個位元組代表的含義,但缺少具體的文件說明,無法弄清楚每個位元組數字組合後的運算邏輯,具體原理還待研究。