調試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 |
寄存器個數 |
|
|
| 校驗 |
|
|||
