MODBUS学习

MODBUS详细技术详见原文链接:https://blog.csdn.net/weixin_39793752/article/details/81456488

MODBUS示例:
通信协议:
波特率:9600 数据位:8 校验位:无 停止位:1

上位机(计算机):
字节号 1 2 3 4 5 6 7 8
意义 ID Command 数据地址 Value CRC
注:1 ID:1个字节,由单机来定(0~255)
2 Command:1个字节,读:3或4,写:6
3 数据地址:2个字节,寄存器地址,读从100开始,写从200开始
4 Value:2个字节,读:个数(以整型为单位),写:命令 / 数据(以整型为单位)
5 CRC:计算出CRC
下位机(PC39A):
读数据,若正确
字节号 1 2 3 3+N (N=个数*2) 3+N+1 3+N+2
意义 ID Command=3 / 4 数据个数 数据 CRC
注:1 ID:1个字节,由单机来定(0~255)
2 Command:1个字节,收到的上位机命令
3数据个数: 1个字节,返回数据个数(以字节为单位)
4 Value:N个字节,是返回上位机的数据
5 CRC:计算出CRC
写命令,若正确
返回收到的数据:
若错误
字节号 1 2 3 4 5
意义 ID Command 数据 CRC
注:1 ID:1个字节,由单机来定(0~255)
2 Command:1个字节,收到的上位机命令或上0x80,
如收到3,返回0x83
3数据: 1个字节,错误的指令
错误指令
1:表示command不存在
2:表示数据地址超限

4 CRC:计算出CRC

例如读PC39A电流数据:
机器地址为12,电流的数据地址100,数据为15.45(A) (一个整型数据)
主机:
ID Command 数据地址 Value CRC
16进制 0x0c 0x03 0x0064 0x0001 CRC_H CRC_L
10进制 12 3 100 1 CRC_H CRC_L

从机返回
如正确:
ID Command 数据个数(以字节为单位) Value CRC
16进制 0x0c 0x03 0x002 0x0609 CRC_H CRC_L
10进制 12 3 2 1545 CRC_H CRC_L

如错误:
ID Command 数据 CRC
16进制 0x0c 0x83 0x02 CRC_H CRC_L
10进制 12 131 2 CRC_H CRC_L

例如发PC39A启动命令:
机器地址为12,命令的地址200,数据为25000(25000表示启动)
主机:
ID Command 数据地址 Value CRC
16进制 0x0c 0x06 0x00c8 0x61a8 CRC_H CRC_L
10进制 12 6 200 25000 CRC_H CRC_L

从机返回
如正确:
ID Command 数据地址 Value CRC
16进制 0x0c 0x06 0x00c8 0x61a8 CRC_H CRC_L
10进制 12 6 200 25000 CRC_H CRC_L

如错误:
ID Command 数据 CRC
16进制 0x0c 0x86 0x02 CRC_H CRC_L
10进制 12 134 2 CRC_H CRC_L

你可能感兴趣的:(MODBUS学习)