了解Modbus RTU mode protocol通訊格式以及裝置設定。

關於Modbus

Modbus protocol常用於工控設備使用的標準格式,在RS485通訊環境中設定master與(多個)slave來做溝通。本文將快速介紹RTU模式透過RS485-RS232接口的指令。

設備接線

這邊以一簡單電錶為例。

再來是RS485-RS232轉接器與電錶接線。
電錶後方的RS485通訊口有兩孔分別為D+/D-,須分別接到轉接器之T+R+/T-R-。
如此即可接通傳輸。

通訊指令格式

1. Read/Write mapping table

通常設備均會附帶其通訊指令Reg.表,以此電錶為例,下方連結進入後第三頁為其對應表,第1,2頁為電錶操作書明書。
MM3 Modbus RTU Mode Protocol Address Map

2. 指令格式

指令以0x03為例。

Slave Addr 指令 Reg. addr(start) Reg. length CRC(檢查碼)
1 byte 1 byte 讀取起始位置 讀取長度(word) 線上CRC轉換器

若是電錶addr設定為00001,讀取目前顯示值之整串指令將為:
01 03 00 30 00 02 C4 04

3. Modbus 常用 function code

0x03:讀取多個暫存器,用來讀取一連續位址資料。

master讀取格式:
設備ID(slave address/ID) + 0x03 + 讀取起始位置(word) + 讀取的數量(word) + CRC16

slave回復格式:
設備ID(slave address/ID + 0x03 + 回復資料的byte數 + 資料1(word) + … + 資料n(word) + CRC16

master送出: 01 03 0001 0003 + CRC16
slave回應: 01 03 06 00A1 00A2 00A3 + CRC16
這樣就或許到暫存器位址中0001,002,0003的資料分別為
0001 = 00A1
0002 = 00A2
0003 = 00A3

 

0x06:寫入單一個暫存器資料,一次只能寫入一筆資料。

master寫入格式:
設備ID(slave address/ID) + 0x06 + 寫入暫存器位置(word) + 寫入資料(word) + CRC16

slave回復格式:
設備ID(slave address/ID) + 0x06 + 寫入暫存器位置(word) + 寫入資料(word) + CRC16

寫入範例:
master 送出: 01 06 0001 1111 + CRC16
slave 回應: 01 06 0001 1111 + CRC16
經過上面的命令後,slave端暫存器位置0001資料寫入變更為0x1111

 

0x10:連續寫入多個暫存器,發送命令類似0x30的回覆功能。

master寫入格式:
設備ID(slave address/ID) + 0x10 + 寫入暫存器起始位置(word) + 寫入的數量(word) + 資料數量(byte)
+ 第1筆資料(word) + … +第n筆資料(word) + CRC16

slave回復格式:
設備ID(slave address/ID) + 0x10 + 寫入暫存器起始位置(word) + 寫入的數量(word) + CRC16

簡單說就是指定一個寫入的起始位置,然後預計寫入多少個暫存器
然後再加上一個資料數量,這個資料數量就是後面所帶的資料量有幾個byte,所以等於寫入的數量乘以2

寫入範例:
master 送出: 01 10 0001 0003 06 000A 000B 000C + CRC16
slave 回應: 01 10 0001 0003 + CRC16

這行命令代表了我要寫入多個暫存器,由0601開始寫,連續寫入三個,所以後面的資料長度是6byte
經過命令之後
0001 = 000A
0002 = 000B
0003 = 000C

 

4. 通訊參數設定

設備Address(設備ID/slave address/ID) ,在裝置中設定,須對應指令中之設備ID。

Baud Rate,須與可控程式讀取/寫入之baud rate一致(19200/9600 etc.)。

PARI(同步檢測位元),須與可控程式設定一致(n.8.2/n.8.1/even/odd etc.)。

 

最後修改日期: 2021-03-31

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。