产品介绍网站html,手机客户端网站建设,建设通会员多少钱一个月,个人网站如何加入百度联盟Modbus通讯协议详解
Modbus RTU通讯协议在数据通讯上采用主从应答的方式进行。只能由主机#xff08;PC#xff0c;HMI等#xff09;通过唯一从机地址发起请求#xff0c;从机#xff08;终端设备#xff09;根据主机请求进行响应#xff0c;即半双工通讯。该协议只允许…
Modbus通讯协议详解
Modbus RTU通讯协议在数据通讯上采用主从应答的方式进行。只能由主机PCHMI等通过唯一从机地址发起请求从机终端设备根据主机请求进行响应即半双工通讯。该协议只允许主机发起请求从机进行被动响应因此从机不会主动占用通讯线路造成数据冲突。
类似Modbus RTU协议的主从应答协议还有西门子的PPI、电表常用的DL/T645-2007等协议。
一、modbus协议格式
信息传输为异步方式使用16进制进行通讯信息帧格式 地址码 功能码 数据区 CRC校验码 1字节 1字节 N字节 2字节 地址码
地址码是每个通讯信息帧的第一个字节一般支持1到247部分设备也支持0地址用于接收主机的广播数据每个从机在总线上地址必须唯一只有与主机发送的地址码相符的从机才能响应返回数据。
功能码
功能码是每个通讯信息帧的第二个字节。主机发送通过功能码告知从机设备应当执行何种操作。
常见的八种功能码 功能码 定义 操作 01H 读取线圈 读取一个或多个连续线圈状态 05H 写单个线圈 操作指定位置的线圈状态 0FH 写多个线圈 操作多个连续线圈状态 02H 读取离散量输入 读取一个或多个连续离散输入状态 04H 读取输入寄存器 读取一个或多个连续输入寄存器数据 03H 读保持寄存器 读取一个或多个保持寄存器数据 06H 写单个保持寄存器 把两个十六进制数据写入对应位置 10H 写多个保持寄存器 把4*N个十六进制数据写入N个连续保持寄存器
数据区
数据区随功能码以及数据方向的不同而不同这些数据可以是“寄存器首地址读取寄存器数量”、“寄存器地址操作数据”、“寄存器首地址操作寄存数量数据长度数据”等不同的组合在“功能码分析”详解不同功能码的数据区。
Modbus CRC校验
Modbus RTU协议常用与工业现场对数据传输的稳定性和正确性有较高的要求因此通过CRC校验保证数据传输的正确性和完整性。
二、错误反馈
地址与CRC校验错误并不会收到从机的数据反馈其他错误将向主机返回错误码。数据帧的第二位加上0X80表示请求发生错误非法功能码、非法数据值等错误数据帧如下 地址码 功能码 错误码 CRC校验码 1字节 1字节 1字节 2字节
常见错误码如下 值 名称 说明 01H 非法的功能码 不支持该功能码操作寄存器 02H 非法的寄存器地址 访问设备禁止访问的寄存器 03H 非法的数据值 写入不支持的参数值 04H 从机故障 设备工作异常 三、通讯信息传输过程
通讯命令由主机发送从机时与主机发送的地址码相符的从机接收通讯命令如果CRC校验无误则执行相应的操作然后把执行结果数据返回给主机。返回信息中包含地址码、功能码、执行后的数据以及CRC校验码。如果地址不匹配或者CRC校验出错就不返回任何信息。
四、功能码分析
功能码01H读线圈
例如主机要读取从机地址为01H起始线圈地址为00H的1个线圈状态主机发送 主机发送 发送数据HEX 地址码 01 功能码 01 起始线圈地址 高字节 00 低字节 00 线圈数量 高字节 00 低字节 01 CRC校验 低字节 FD 高字节 CA 如果从机寄存器00H线圈闭合从机返回 从机返回 发送数据HEX 地址码 01 功能码 01 字节数 01 线圈状态 01 CRC校验码 低字节 90 高字节 48 功能码0FH写多个线圈
例如主机要控制从机地址为01H起始线圈地址为00H的4个线圈状态主机发送 主机发送 发送数据HEX 地址码 01 功能码 0F 起始线圈地址 高字节 00 低字节 00 线圈数量 高字节 00 低字节 04 写入字节数 01 控制方式 00(全部断开)、0F(全部闭合) CRC校验 低字节 XX 高字节 XX 功能码0FH操作从机返回 从机返回 发送数据HEX 地址码 01 功能码 0F 起始线圈地址 高字节 00 低字节 00 线圈数量 高字节 00 低字节 04 CRC校验 低字节 54 高字节 08
功能码02H读离散输入
例如主机要读取从机地址为01H起始离散量地址为00H的4个输入状态主机发送 主机发送 发送数据HEX 地址码 01 功能码 02 起始离散量地址 高字节 00 低字节 00 读取数量 高字节 00 低字节 04 CRC校验 低字节 79 高字节 C9 如果从机首地址00H开始的4离散输入全部检测到输入从机返回 从机返回 发送数据HEX 地址码 01 功能码 02 字节数 01 离散输入状态 0F CRC校验码 低字节 E1 高字节 8C 功能码04H读取输入寄存器
例如主机要读取从机地址为01H起始寄存器地址为02H的1个输入寄存器数据主机发送 主机发送 发送数据HEX 地址码 01 功能码 04 起始寄存器地址 高字节 00 低字节 02 寄存器数量 高字节 00 低字节 01 CRC校验 低字节 90 高字节 0A 如果从机输入寄存器02H的数据为3344H从机返回 从机返回 发送数据HEX 地址码 01 功能码 04 字节数 02 寄存器05H数据 高字节 33 低字节 44 CRC校验码 低字节 AD 高字节 F3 功能码03H读保持寄存器
例如主机要读取从机地址为01H起始寄存器地址为05H的2个保持寄存器数据主机发送 主机发送 发送数据HEX 地址码 01 功能码 03 起始寄存器地址 高字节 00 低字节 05 寄存器数量 高字节 00 低字节 02 CRC校验 低字节 D4 高字节 0A 如果从机保持寄存器05H、06H的数据为1122H、3344H从机返回 从机返回 发送数据HEX 地址码 01 功能码 03 字节数 04 寄存器05H数据 高字节 11 低字节 22 寄存器06H数据 高字节 33 低字节 44 CRC校验码 低字节 4B 高字节 C6 功能码06H写单个保持寄存器
例如主机写入9988H的数据给从机地址为01H寄存器地址为0050H的寄存器主机发送 主机发送 发送数据HEX 地址码 01 功能码 06 寄存器地址 高字节 00 低字节 50 写入值 高字节 99 低字节 88 CRC校验 低字节 E3 高字节 ED
从机返回与主机请求相同 功能码10H写多个保持寄存器
例如主机要把数据0005H、2233H保存到从机地址为01H起始寄存器地址为0020H的2个寄存器中主机发送 主机发送 发送数据HEX 地址码 01 功能码 10 起始寄存器地址 高字节 00 低字节 20 寄存器数量 高字节 00 低字节 02 写入字节数 04 0000H 寄存器待写入 高字节 00 低字节 05 0001H 寄存器待写入 高字节 22 低字节 33 CRC校验 低字节 B9 高字节 03 功能码10H操作从机返回 从机返回 发送数据HEX 地址码 01 功能码 10 起始寄存器地址 高字节 00 低字节 20 寄存器数量 高字节 00 低字节 02 CRC校验 低字节 40 高字节 02 仿真演示