modbus 协议简介
包结构如下:
modbus数据包={
uint8 地址
{请求|响应|出错响应} 载荷
uint16 CRC16
}
或者用如下方式表示:
modbus数据包={
uint8 地址
uint8 功能代码
可变域 数据
}
载荷 结构为:
请求={
uint8 功能代码
uint16 请求数据
}
响应={
uint8 功能代码
uint16 响应数据
}
出错响应={
uint8 功能代码
uint16 出错代码
}
常用功能码:
公共功能代码={
01: 读线圈
02: 读书如离散量
03: 读多个寄存器
04: 读输入寄存器
05: 写单个线圈
06: 写单个寄存器
15: 写多个线圈
16: 写多个寄存器
23: 读写多个寄存器
43 14:读设备识别码
}
读线圈请求过程(01)={
请求={
功能代码=0x01
起始地址=[0x0000,0xFFFF]
线圈数量=[1,0x7d0]=[1,2000]
}
响应={
功能代码=0x01
响应字节数量=输出数量/8,向上取整
线圈状态={s1,s2,...,sn}
}
出错={
功能代码=0x80+0x01
错误代码={1|2|3|4}
}
}
错误代码={
1: 不支持的功能码
2:数量异常(溢出)
3:地址异常(溢出)
4:内部出错
}
读保持寄存器请求过程(0x03)={
...
寄存器数量=[1,125]
...
}
地址空间:
address={
0: 广播地址
[1,247]:单播地址
[248,255]:保留地址
}