調試modbus tcp 整理百度文庫文檔如下
《modbus-tcp-報文舉例分析》
《MODBUSTCP通訊報文》
Client request:
19 B2 00 00 00 06 06 03 00 27 00 02
上面是modbus客戶端發出的報文內容,為modbus tcp/ip協議格式,其前面的六個字節為頭字節( header handle);
19 B2 00 00 00 06
19 B2 兩個字節是Client發出的檢驗信息,Sever端只是需要將這兩個字節的內容copy以后再放到response的報文的相應位子就可以了
00 00 兩個字節是表示tcp/ip 的協議的modbus的協議;
00 06 兩個字節表示的是header handle后面還有多長的字節,即表示的是該字節以后的字節長度(lengch),可以看到在00 06后面還有 “06 03 00 27 00 02”六個字節,所以這兩個字節表示的就是6;
PDU:
“06 03 00 27 00 02”
06 一個字節表示slave address;
03 為Fuction code ;
00 27 表示Client request的寄存器地址;
00 02 表示request 寄存器的長度;(寄存器個數)
Server response:
19 B2 00 00 00 07 06 03 04 00 00 00 00
Header handle : “ 19 B2 00 00 00 07”
19 B2 為Server返回的檢驗碼,copy from Client request;
其它的表示與客戶端的表示相同
PDU:
“ 06 03 04 00 00 00 00”
06 是Slave address,從地址數;
03是Function code ;
04表示了回復給Client request的需要讀的寄存器的值的個數,這里因為主地址向從地址讀了2個寄存器即2個16位的寄存器(2個字)所以這里為4個字節,因為2個字為4個字節,而04這個字節表示的就是從地址要回復給主地址的寄存器字節長度,
00 00 00 00 表示了4個字節的值
ModBusTcp與串行鏈路Modbus的數據域是一致的,具體數據域可以參考串行modbus。這里給出幾個ModbusTcp的鏈路解析說明,輔助新人分析報文。
1、數據請求
97 76 00 00 00 06 04 04 00 7D 00 7D |
||||
|
示例 |
長度 |
說明 |
備注 |
Map報文頭 |
0x97 |
1 |
事務處理標識符Hi |
客戶機發起,服務器復制,用於事務處理配對 |
0x96 |
1 |
事務處理標識符Lo |
||
0x0000 |
2 |
協議標識符號 |
客戶機發起,服務器復制 Modbus協議 = 0. |
|
0x0006 |
2 |
長度 |
從本字節下一個到最后
|
|
0x04 |
1 |
單元標識符 |
客戶機發起,服務器復制 串口鏈路或其他總線上遠程終端標識 |
|
功能碼 |
0x04 |
1 |
功能碼,讀寄存器 |
參考標准modbus協議 |
數據 |
0x007D |
2 |
起始地址 |
|
0x 007D |
2 |
寄存器數量 |
|
|
校驗 |
|
2、數據請求回復
97 76 00 00 00 FD 04 04 FA AB 9E 41 18 7A E1 3F 94 7A E1 3F 94 0A 3D 3F 97 51 EC 3F 98 CC CD C0 6C 33 33 C0 E3 CC CD C0 EC EB 85 41 F1 D7 0A 41 E9 47 AE 41 ED EB 85 41 F1 19 9A 43 D0 E6 66 43 C9 4C CD 43 CF EB 85 41 F3 66 66 42 0F CC CD 41 C2 E6 66 44 0A 1E B8 41 FB A3 D7 42 0C CC CD 41 BC C0 00 44 0A B8 52 41 F6 5C 29 42 0F 47 AE 41 D1 C6 66 44 0A 00 00 00 00 C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F 05 16 00 00 04 11 00 00 05 16 00 00 04 11 00 00 05 16 00 00 04 11 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 0A 00 0A 00 0A 00 0A 00 04 00 04 00 04 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 0F |
||||
|
示例 |
長度 |
說明 |
備注 |
Map報文頭 |
0x97 |
1 |
事務處理標識符Hi |
客戶機發起,服務器復制,用於事務處理配對 |
0x96 |
1 |
事務處理標識符Lo |
||
0x0000 |
2 |
協議標識符號 |
客戶機發起,服務器復制 Modbus協議 = 0. |
|
0x00FD |
2 |
長度 |
從本字節下一個到最后
|
|
0x04 |
1 |
單元標識符 |
客戶機發起,服務器復制 串口鏈路或其他總線上遠程終端標識 |
|
功能碼 |
0x04 |
1 |
功能碼,讀寄存器 |
參考標准modbus協議 |
數據 |
0x FA |
1 |
字節個數 |
|
0x---- |
|
數據 |
||
校驗 |
|
3、寫多個寄存器
97 79 00 00 00 09 04 10 00 00 00 01 02 00 01 |
||||
|
示例 |
長度 |
說明 |
備注 |
Map報文頭 |
0x97 |
1 |
事務處理標識符Hi |
客戶機發起,服務器復制,用於事務處理配對 |
0x79 |
1 |
事務處理標識符Lo |
||
0x0000 |
2 |
協議標識符號 |
客戶機發起,服務器復制 Modbus協議 = 0. |
|
0x0009 |
2 |
長度 |
從本字節下一個到最后
|
|
0x04 |
1 |
單元標識符 |
客戶機發起,服務器復制 串口鏈路或其他總線上遠程終端標識 |
|
功能碼 |
0x10 |
1 |
功能碼,讀寄存器 |
參考標准modbus協議 |
數據 |
0x0000 |
2 |
起始地址 |
|
0x 0001 |
2 |
寫寄存器數量 |
|
|
0x 02 |
1 |
寫字節的個數 |
|
|
00 01 |
2 |
目標值 |
|
|
校驗 |
|
4、寫多個寄存器響應
97 79 00 00 00 06 04 10 00 00 00 01 |
||||
|
示例 |
長度 |
說明 |
備注 |
Map報文頭 |
0x97 |
1 |
事務處理標識符Hi |
客戶機發起,服務器復制,用於事務處理配對 |
0x79 |
1 |
事務處理標識符Lo |
||
0x0000 |
2 |
協議標識符號 |
客戶機發起,服務器復制 Modbus協議 = 0. |
|
0x0006 |
2 |
長度 |
從本字節下一個到最后
|
|
0x04 |
1 |
單元標識符 |
客戶機發起,服務器復制 串口鏈路或其他總線上遠程終端標識 |
|
功能碼 |
0x10 |
1 |
功能碼,讀寄存器 |
參考標准modbus協議 |
數據 |
0x0000 |
2 |
起始地址 |
|
0x 0001 |
2 |
寄存器個數 |
|
|
校驗 |
|