MODBUS通讯
1.主机对从机读数据操作
主机发送报文格式如下:
从站地址 | 功能码 | 起始(高) | 起始(低) | 数量(高) | 数量(低) | 校验 |
0X01 | 0X03 | 0X00 | 0X01 | 0X00 | 0X01 | 0XD5 0XCA |
校验使用:CRC-16(Modbus)
含义:
0x01:从机的地址
0x03:查询功能,读取从机寄存器的数据
0x00 0x01: 代表读取的起始寄存器地址.说明从0x0001开始读取.
0x00 0x01: 查询的寄存器数量为0x0001个 Modbus把数据存放在寄存器中,通过查询寄存器来得到不同变量的值,一个寄存器地址对应2字节数据; 寄存器地址对应着从机实际的存储地址
0xD5 0xCA: 循环冗余校验 CRC
从机回复报文:
从站地址 | 功能码 | 字节计数 | 字节1 | 字节2 | 校验 |
0X01 | 0X03 | 0X02 | 0X01 | 0X00 0X17 | 0XF8 0X4A |
含义:
0x01:从机的地址
0x03:查询功能,读取从机寄存器的数据
0x02: 返回字节数为2个 一个寄存器2个字节
0x00 0x17:寄存器的值是0017
0xF8 0x4A: 循环冗余校验 CRC
2、主机对从机写数据操作
主机发送报文格式如下:
从站地址 | 功能码 | 数据地址(高) | 数据地址(低) | 数量(高) | 数量(低) | 校验 |
0X01 | 0X06 | 0X00 | 0X01 | 0X00 | 0X17 | 0XD5 0XCA |
校验使用:CRC-16(Modbus)
含义:
0x01:从机的地址
0x06:修改功能,修改从机寄存器的数据
0x00 0x01: 代表修改的起始寄存器地址.说明修改0x0000-0x0001的存储内容
0x00 0x17: 要修改的数据值为0017
0x98 0x04: 循环冗余校验 CRC
从机回复报文格式如下:
从站地址 | 功能码 | 数据地址(高) | 数据地址(低) | 数量(高) | 数量(低) | 校验 |
0X01 | 0X06 | 0X00 | 0X01 | 0X00 | 0X17 | 0XD5 0XCA |
含义:
0x01:从机的地址
0x06:修改功能,修改从机寄存器的数据
0x00 0x01: 代表修改的起始寄存器地址.说明是0x0000
0x00 0x17:修改的值为0017
0x98 0x04: 循环冗余校验 CRC
从机的回复和主机的发送是一样的,如果不一样说明出现了错误
参考文章:
详解Modbus通信协议---清晰易懂