模拟器Server设置
Connection -> Connect
Setup -> Slave Definition
双击00000列第一行
模拟器Client设置
Connection -> Connection Setup
Setup -> Read/Write Definition
代码实现
Test0X01.java
Request解析
0X00, 0X01, 0X00, 0X00, 0X00, 0X06, 0X01, 0X01, 0X00, 0X00, 0X00, 0X0A
解析为16进制为000100000006010100000008
传输标志(2) |
协议标志(2) |
长度(2) |
单元标志(1) |
功能码(1) |
起始地址(2) |
线圈数(2) |
0001 |
0000 |
0006 |
01 |
01 |
0000 |
0008 |
Response解析
返回字节数组解析为16进制为00010000000401010101
传输标志(2) |
协议标志(2) |
长度(2) |
单元标志(1) |
功能码(1) |
数组个数(1) |
线圈状态(1) |
0001 |
0000 |
0004 |
01 |
01 |
01 |
01 |
其中数组个数01
代表长度表示其后有1个字节。线圈状态01
解析为2进制为00000001
,分别代表线圈的对应状态
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
官方文档
Request
Response
*N = Quantity of Outputs / 8, if the remainder is different of 0 N = N+1
Error
Example
State Diagram
参考资料
Modbus官方文档:《Modbus_Application_Protocol_V1_1b3》
Modbus RTU和ASCII 协议解析 : http://www.modbustools.com/modbus.html