物联网-ModBus-RTU■ 知识点■ 01. 优秀博主链接■ 02. ModBus-RTU报文解码器■ 03. PLC概念■ ModBus-RTU介绍■ 01. 工作原理■ 02. 通讯格式■ 03. Modbus RTU 支持四种主要寄存器类型:■ 04. 功能码■ 05. Modbus RTU 与其他模式的比较■ ModBus-RTU-功能码■ (0x01) 读取线圈状态(Read Coil Status)■ (0x02) 读取离散输入状态(Read Discrete Inputs)■ (0x03) 读取保持寄存器(Read Holding Registers)■ (0x04) 读输入寄存器(Read Input Registers)■ (0x05) 写单个线圈(Write Single Coil)■ (0x06) 写单个保持寄存器(Write Single Register)■ (0x0F) 写多个线圈(Write Multiple Coils)■ (0x10) 写多个保持寄存器(Write Multiple Registers)■ (0x11) 报告从站ID(Report Slave ID)■ (0x16) 屏蔽写寄存器(Mask Write Register)■ (0x17) 读/写多个寄存器(Read/Write Multiple Registers)■ Modbus RTU 串口收发数据分析■ CRC校验■ CRC校验(蓝牙遥控方案校验)■ CRC校验(也行,计算结果和上面一致)■ 在stm32中 Modebus-RTU-Slave(从机代码)实现■ 知识点■ 01. 优秀博主链接Modbus RTU通讯笔记■ 02. ModBus-RTU报文解码器在线Modbus RTU报文解码器 | Modbus工具/报文解析器/指令生成器/CRC校验工具■ 03. PLC概念PLC概念■ ModBus-RTU介绍■ 01. 工作原理Modbus RTU 使用主从模式通信。主设备(Master)发起请求,从设备(Slave)响应。每个从设备通过唯一地址(1-247)标识,地址 0 用于广播。数据通过二进制编码传输,并使用 CRC 校验 确保数据完整性。发送:从机的地址+我要干嘛的功能码+我要查的寄存器的地址+我要查的寄存器地址的个数+校验码回复:从机的地址+主机发我的功能码+要发送给主机数据的字节数+数据+校验码■ 02. 通讯格式主机发送(读):名称设备地址功能码 0x03寄存器地址寄存器数量CRC16 校验(LH)长度(Byte)11222从机回应(读):名称设备地址功能码 0x03返回字节数数据区CRC16 校验(L/H)长度(Byte)111N2主机发送(写):名称设备地址功能码 0x06寄存器地址数据区CRC16校验(L/H)长度(Byte)11222从机回应(写):名称设备地址功能码 0x06寄存器地址数据区CRC16 校验(L/H)长度(Byte)11222■ 03. Modbus RTU 支持四种主要寄存器类型:寄存器类型大小读写说明线圈寄存器(Coils Registers)1 位读写用于控制设备开关。离散输入寄存器(Discrete Inputs Registers)1 位只读用于读取传感器状态。输入寄存器(Input Registers)16 位只读用于读取模拟输入数据。保持寄存器(Holding Registers)16 位读写用于存储设备参数或输出值。■ 04. 功能码功能码描述说明可读写数据类型MOUBUS地址01(0x01) 读取线圈状态(Read Coil Status)位操作位00001 ~ 0999902(0x02) 读取离散输入状态(Read Discrete Inputs)位操作位10001 ~ 1999903(0x03) 读取保持寄存器(Read Holding Registers)字操作整型字符型状态字浮点型40001 ~ 4999904(0x04) 读输入寄存器(Read Input Registers)字操作整型状态字浮点型30001 ~ 3999905(0x05) 写单个线圈(Write Single Coil)位操作位00001 ~ 0999906(0x06) 写单个保持寄存器(Write Single Register)字操作整型字符型状态字浮点型40001 ~ 4999915(0x0F) 写多个线圈(Write Multiple Coils)位操作位00001 ~ 0999916(0x10) 写多个保持寄存器(Write Multiple Registers)字操作整型字符型状态字浮点型40001 ~ 4999917(0x11) 报告从站ID(Report Slave ID)字操作字符型40001 ~ 4999922(0x16) 屏蔽写寄存器(Mask Write Register)23(0x17) 读/写多个寄存器(Read/Write Multiple Registers)■ 05. Modbus RTU 与其他模式的比较Modbus ASCII:使用 ASCII 编码,传输效率低,适用于小数据量场景。Modbus TCP:基于以太网通信,去除了 CRC 校验,适合网络环境。■ ModBus-RTU-功能码■ (0x01) 读取线圈状态(Read Coil Status)==主机:设置 Slave ID=0x0A,读取从机地址00,读取10个线圈====从机:数据是0000000101;==Tx:469-0A010000000A BD76Rx:470-0A010205001F6D//--------------------------------Tx:0A//Slave地址码01//功能码0000//读从机地址000A//读长度10个(bit)BD76//校验码//--------------------------------Rx:0A//Slave地址码01//功能码02//数据长度(字节)0500//数据 小端模式 从机数据是 00000 00101;1F6D//校验码==主机:设置 Slave ID=0x0A,读取从机100地址,读1个线圈====从机:数据是0000000001;==Tx:469-0A0100640001BD6E Rx:470-0A010101926C//--------------------------------Tx:469-0A//Slave地址码01//功能码0064//读从机地址 0x64 == 1000001//数据长度(bit)BD6E//--------------------------------Rx:470-0A//Slave地址码01//功能码01//数据长度(字节)01//数据926C//校验码==主机:设置 Slave ID=0x0A,读取从机100地址,读2个线圈====从机:数据是0000000001;==Tx:469-0A0100640002FD6FRx:470-0A010101926C//--------------------------------Tx:469-0A//Slave地址码01//功能码0064//读从机地址 0x64 == 1000002//数据长度(bit)FD6F//--------------------------------Rx:470-0A//Slave地址码01//功能码01//数据长度(字节)01//数据926C//校验码==主机:设置 Slave ID=0x0A,读取从机100地址,读2个线圈====从机:数据是0000000011;==Tx:469-0A0100640002FD6FRx:470-0A01010313AD//--------------------------------Tx:469-0A//Slave地址码01//功能码0064//读从机地址 0x64 == 1000002//数据长度(bit)FD6F//--------------------------------Rx:470-0A//Slave地址码01//功能码01//数据长度(字节)03//数据13AD//校验码注意事项:可以读取多个线圈返回的数据长度为字节使用Modebus Slave 调试时出现返回错误问题(地址没有填对应)000154-Rx:0A01000000203C A9000155-Tx:0A8102B053001227-Rx:0A0200640002B96F001228-Tx:0A8202B0 A3001984-Rx:0A030064000284AF001985-Tx:0A8301F132■ (0x02) 读取离散输入状态(Read Discrete Inputs)==主机:设置 Slave ID=0x0A,读取从机100地址,读取2个====从机:数据是0000000011;==Tx:1129-0A0200640002B96FRx:1130-0A020103E3 AD Tx:1129-0A//Slave地址码02//功能码0064//读从机地址 0x64 == 1000002//读取数据长度(bit)B96F//校验码Rx:1130-0A//Slave地址码02//功能码01//数据长度(字节)03//数据E3 AD//校验码==主机:设置 Slave ID=0x0A,读取从机100地址,读取2个====从机:数据是0000000010;==Tx:1137-0A0200640002B96FRx:1138-0A020102226D Tx:1129-0A//Slave地址码02//功能码0064//读从机地址 0x64 == 1000002//读取数据长度(bit)B96F//校验码Rx:1130-0A//Slave地址码02//功能码01//数据长度(字节)02//数据226D//校验码