title:网站建设公司实力,wordpress自适应设置宽度,手机凡客网,撰写网站的建设方案从今开始#xff0c;会详细且陆续整理各类的通信协议#xff0c;以便在需要且自身忘记的情况下#xff0c;迅速复习。如有错误之处#xff0c;还请批评指正。
一、Modbus协议的简述 Modbus协议作为应用层协议#xff0c;基于主从设备模型#xff0c;主设备负责请求消息会详细且陆续整理各类的通信协议以便在需要且自身忘记的情况下迅速复习。如有错误之处还请批评指正。
一、Modbus协议的简述 Modbus协议作为应用层协议基于主从设备模型主设备负责请求消息从设备进行消息的应答。
传输支持
物理层支持RS-232、RS-485等串行链路及以太网TCP/IP 协议版本包括Modbus RTU二进制高效传输、Modbus ASCII可读性高、Modbus TCP基于以太网
本文重点叙述TCP的方式。
二、工作机制
请求-响应模式主设备发送包含 功能码 和 数据地址 的请求帧从设备返回操作结果或数据。例如 功能码03H读取保持寄存器如读取温度设定值 功能码06H写入单个保持寄存器如调整电机转速 数据帧结构 Modbus RTU帧地址 功能码 数据 CRC校验 Modbus TCP帧MBAP头事务ID、协议ID、后续报文的字节数、设备地址 PDU功能码 数据注:事务ID当需要进行并发请求的时候就可使用不同的事务ID避免匹配错误。 单元ID:多PLC通信的场景下需要使用单元ID以保证每条信息是专属的。
三、功能码
寄存器类型功能码操作类型数据单位典型应用线圈寄存器01H读位Bit监控继电器、电磁阀状态05H写单个位控制单个执行机构0FH写多个位批量控制执行机构离散输入寄存器02H读位Bit监测外部传感器信号输入寄存器04H读字Word获取传感器实时数据保持寄存器03H读字Word读取设备配置参数06H写单个字修改单个设备参数10H写多个字批量配置设备参数
四、寄存器类型 这里简要叙述下寄存器的类型不同的寄存器它所占的空间大小和读写权限都是不同的
寄存器类型功能码范围读写权限典型应用线圈寄存器01H、05H、0FH读写控制开关量输出如继电器 离散输入寄存器02H只读监测开关量输入如急停信号 输入寄存器04H只读读取模拟量输入如传感器电压 保持寄存器03H、06H、10H读写存储设备参数或实时数据如PID参数
五、异常码
在Modbus协议中当从站设备服务器检测到请求错误时会返回包含 异常功能码Error Function Code 和 异常码Error Code 的响应报文。
异常功能码原功能码的最高位被置为1即功能码 0x80。例如 原功能码 0x03读保持寄存器→ 异常功能码 0x83。原功能码 0x10写多个寄存器→ 异常功能码 0x90。 异常码紧随异常功能码后占1字节表示具体错误类型如非法地址、非法功能等以下列举出常用的异常码
异常码十六进制名称含义典型场景0x01非法功能 (Illegal Function)请求的功能码不被支持或未实现。例如向只读寄存器发送写操作。主站发送功能码 0x05写线圈但设备不支持该功能。 0x02非法数据地址 (Illegal Data Address)寄存器地址超出设备允许范围。请求读取地址 40010但设备仅支持 40001-40005。 0x03非法数据值 (Illegal Data Value)写入的数据值不合法如超出寄存器范围。试图向16位寄存器写入 0x10000最大值应为 0xFFFF。 0x04设备故障 (Slave Device Failure)从站设备内部错误如硬件故障。从站设备因电源波动导致处理失败。 0x05确认 (Acknowledge)从站已接收请求但需要更长时间处理需主站轮询完成状态。主站请求写入大量数据从站返回 0x05 表示正在处理。 0x0B目标设备未响应 (Target Device Failed to Respond)网关无法将请求转发到目标设备。网络中断或目标设备离线。
六、举例 最后我们来看三段报文
报文100 01 00 00 00 06 01 06 00 00 00 01
MBAP头 Transaction ID: 00 01事务ID为1Protocol ID: 00 00Modbus协议Length: 00 06后续报文长度为6字节Unit ID: 01设备地址1 PDU 功能码: 06写单个保持寄存器寄存器地址: 00 00地址0x0000写入值: 00 01值为1 作用向地址 0x0000 的保持寄存器写入值 1
报文200 01 00 00 00 05 01 03 00 00 00 0A
MBAP头 Transaction ID: 00 01事务ID为1Protocol ID: 00 00Modbus协议Length: 00 05后续报文长度为5字节Unit ID: 01设备地址1 PDU 功能码: 03读保持寄存器寄存器起始地址: 00 00地址0x0000读取数量: 00 0A读取10个寄存器 作用从地址 0x0000 开始读取10个保持寄存器的值
报文300 01 00 00 00 17 01 03 14 00 00 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09 00 0A
MBAP头 Transaction ID: 00 01事务ID为1Protocol ID: 00 00Modbus协议Length: 00 17后续报文长度为23字节Unit ID: 01设备地址1 PDU 功能码: 03读保持寄存器字节数: 14数据总字节20寄存器数据: 00 00 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09 00 0A10个寄存器的值
下面来一段错误报文的机制: 场景主站尝试读取保持寄存器地址 400101十进制地址100但从站设备仅支持寄存器地址 400001-400050导致地址越界错误 请求报文:00 01 00 00 00 06 01 03 00 64 00 01
字段值十六进制说明事务ID00 01事务标识符自增值用于匹配请求与响应。协议ID00 00Modbus TCP协议固定标识符0x0000。长度00 06后续数据长度6字节单元ID PDU。单元ID01从站地址本例为1。功能码03读保持寄存器操作。起始地址00 64十进制地址100对应Modbus地址400101。寄存器数量00 01读取1个寄存器。 响应报文:00 01 00 00 00 03 01 83 02
字段值十六进制说明事务ID00 01与请求报文的事务ID一致用于匹配请求与响应。协议ID00 00固定标识符0x0000。长度00 03后续数据长度3字节单元ID 异常功能码 异常码。单元ID01从站地址与请求一致。异常功能码83原功能码 03 0x80表示异常响应。异常码02错误类型为 非法数据地址从站不支持地址400101。