ModBus协议总结
ModBus协议总结ModBus协议总结RTU1 线圈设备读写2 读取离散值3 保持寄存器读写 通过功能码 03 06 160x10功能码06功能码16读取输入寄存器数值TCPModBus协议总结RTU总结modbus协议的通信和处理首先明确同种通信方式TCP和串口(RTU)的区别RTU主站请求从站串口传输协议字节作用从站的地址1范围1-247 0是广播地址功能码10x01-0x06、0x0F 、0x10起始寄存器2寄存器地址数据长度2寄存器数量CRC2数据校验位如01 03 00 00 00 02 C4 0BRTU从站设备回复请求如果成功串口传输协议字节作用从站的地址1范围1-247 0是广播地址功能码10x01-0x06、0x0F 、0x10字节数1寄存器地址数据位N一个寄存器返回2个字节寄存器数量CRC2数据校验位如01 03 04 12 34 56 78 5A 3D如果出现一场情况将会返回异常报文协议字节作用从站的地址1范围1-247 0是广播地址异常功能码1原功能码 0x03 的最高位bit 7置1即 0x03 0x80 0x83异常码101 02 03 04CRC2数据校验位如01 83 02 C0 F1常见的异常码有01非法功能不支持该功能码。02非法数据地址请求的寄存器地址超出范围。03非法数据值写入的数据值超出范围。04从站设备故障。这里把所有RTU手法总结如下功能码 0x01 — 读线圈请求帧格式[从站地址] 01 [起始地址高] [起始地址低] [数量高] [数量低] [CRC低] [CRC高]最大读取数量2000个线圈但受串口帧长度限制实际约2000个正常响应帧格式[从站地址] 01 [字节数] [线圈状态1] [线圈状态2] … [CRC低] [CRC高]异常响应[从站地址] 81 [异常码] [CRC低] [CRC高]01 01 00 00 00 0A BC 0D响应假设线圈0-7全ON线圈8-9为OFF01 01 02 FF 00 78 2F1 线圈设备读写线圈设备是一类可由信号控制的继电器设备按位读写主要功能码 围绕 01 05 15三个功能码 工作01是读功能码05是单写功能码15是多写功能码01 01 00 00 00 0A BC 0D上面指令是从 01从设备读取0线圈开始读取10个线圈01 01 02 FF 00 78 2F收到的响应是 01从设备回复两个字节的数据 前0-8个设备状态是全1 后两个设备状态全001 05 00 00 FF 00 8C 3A从站设备01线圈0设置为ON ON值必须为 0xFF00OFF值必须为 0x000001 05 00 00 FF 00 8C 3A从站设备响应01 0F 00 00 00 0C 02 AD 0A 34 12上面指令是从 01从设备从0线圈开始写入12线圈01 0F 00 00 00 0C 04 08上面指令是写入了12个响应数据2 读取离散值离散值是一种 外部环境决定的不可 物理按钮 限位开关 等只能读取01 02 00 00 00 0A 78 0D从01从设备00地址开始读取10个离散值输入01 02 02 AD 02 5D B8返回两个字节的返回数据3 保持寄存器读写 通过功能码 03 06 160x10保持寄存器的读取命令在协议介绍时03 已经写出 就不在这里介绍了功能码06写入01 06 00 02 00 FF 48 0B响应01 06 00 02 00 FF 48 0B写入和响应返回一致信息 02寄存器 写入FF功能码16写入3个寄存器数值从地址0105 开始的3个寄存器 总字节长度为601 10 01 05 00 03 06 11 02 03 04 05 66 4A 12响应 从寄存器地址 0105开始成功写入了3个寄存器01 10 01 05 00 03 1E 1E读取输入寄存器数值输入寄存器只读修改由器件内部的操作控制从00寄存器开始读取 1个寄存器的数据01 04 00 00 00 01 31 CA返回两个字节数据01 04 02 01 00 78 F4TCPtcp和命令和RTU相同但封装格式不同协议字节作用事务标识符2客户端每次发送请求时递增建议从 1 开始。服务器在响应时原样复制此 ID。这是 TCP 支持并发通信的关键协议标识符2 固定为 0x0000表示这是一个 Modbus 协议包长度2告诉接收方从“单元标识符”开始到数据结束还有多少个字节单元标识符1“从站地址”的替身。用于标识目标设备。在纯 TCP/IP 网络中它相当于 RTU 的从站地址功能码1与 RTU 完全一致。包括 0x01 读线圈、0x03 读寄存器、0x06 写寄存器等数据域N格式和 RTU 也完全一致采用大端模式存放具体的操作参数如寄存器起始地址、数量或要写入的值