ga('set', 'anonymizeIp', 1);
了解Modbus RTU mode protocol通訊格式以及裝置設定。
Modbus protocol常用於工控設備使用的標準格式,在RS485通訊環境中設定master與(多個)slave來做溝通。本文將快速介紹RTU模式透過RS485-RS232接口的指令。
這邊以一簡單電錶為例。
再來是RS485-RS232轉接器與電錶接線。
電錶後方的RS485通訊口有兩孔分別為D+/D-,須分別接到轉接器之T+R+/T-R-。
如此即可接通傳輸。
通常設備均會附帶其通訊指令Reg.表,以此電錶為例,下方連結進入後第三頁為其對應表,第1,2頁為電錶操作書明書。
MM3 Modbus RTU Mode Protocol Address Map
指令以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
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
設備Address(設備ID/slave address/ID) ,在裝置中設定,須對應指令中之設備ID。
Baud Rate,須與可控程式讀取/寫入之baud rate一致(19200/9600 etc.)。
PARI(同步檢測位元),須與可控程式設定一致(n.8.2/n.8.1/even/odd etc.)。