asp网站背景,网络系统的价值跟用户数量成,惠州h5网站建设,商务网站建设摘要MODBUS TCP协议实例数据帧详细分析 1.简介 2.ModbusTCP数据帧 2.1.报文头MBAP 2.2.帧结构PDU 3.ADU详细结构 3.1. 0x01#xff1a;读线圈 3.2. 0x02#xff1a;读离散量输入 3.3. 0x03#xff1a;读保持寄存器 3.4. 0x04#xff1a;读输入寄存器 3.5. 0x05#xff1a;写单…MODBUS TCP协议实例数据帧详细分析 1.简介 2.ModbusTCP数据帧 2.1.报文头MBAP 2.2.帧结构PDU 3.ADU详细结构 3.1. 0x01读线圈 3.2. 0x02读离散量输入 3.3. 0x03读保持寄存器 3.4. 0x04读输入寄存器 3.5. 0x05写单个线圈 3.6. 0x06写单个保持寄存器 3.7. 0x0F写多个线圈 3.8. 0x10写多个保持寄存器 1.简介 Modbus由MODICON公司于1979年开发是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的Modbus协议ModbusTCP。Modbus协议是一项应用层报文传输协议包括ASCII、RTU、TCP三种报文类型。标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口采用master/slave方式通信。
2.ModbusTCP数据帧 ModbusTCP的数据帧可分为两部分MBAPPDU如下图所示。 2.1.报文头MBAP MBAP为报文头长度为7字节组成如下
事务处理标识 协议标识 长度 单元标识符 2字节 2字节 2字节 1字节 内容 含义 事务处理标识 可以理解为报文的序列号一般每次通信之后就要加1以区别不同的通信数据报文 协议标识符 00 00 表示Modbus TCP协议 长度 表示接下来的数据长度单位为字节。 单元标识符 可以理解为设备地址 2.2.帧结构PDU PDU由功能码数据组成。功能码为1字节数据长度不定由具体功能决定。 Modbus的操作对象有四种线圈、离散输入、保持寄存器、输入寄存器。
对象 含义 线圈 PLC的输出位开关量在Modbus中可读可写 离散量 PLC的输入位开关量在Modbus中只读 输入寄存器 PLC中只能从模拟量输入端改变的寄存器在Modbus中只读 保持寄存器 PLC中用于输出模拟量信号的寄存器在Modbus中可读可写 根据对象的不同Modbus的功能码有 功能码 含义 – – 0x01 读线圈 0x02 读离散量输入 0x03 读保持寄存器 0x04 读输入寄存器 0x05 写单个线圈 0x06 写单个保持寄存器 0x0F 写多个线圈 0x10 写多个保持寄存器 说明更详细的表如下表所示 功能码 中文含义解析 – – 0x01 读线圈状态 0x02 读离散量输入状态 0x03 读保持寄存器 0x04 读输入寄存器 0x05 写单个线圈 0x06 写单个保持寄存器 0x0F 写多个线圈 0x10 写多个保持寄存器 3.ADU详细结构 3.1. 0x01读线圈 在从站中读连续线圈状态ON1,OFF0。
请求 MBAP 功能码 起始地址H 起始地址L 线圈数量H 线圈数量L 7字节 1字节 1字节 1字节 1字节 1字节 响应 MBAP 功能码 线圈数据长度 数据 7字节 1字节 1字节 线圈数据长度个字节 注意线圈数据长度1(线圈数-1)/8
如在从站0x01中读取开始地址为0x0000的线圈数据读0x0008位。
请求 MBAP 功能码 起始地址H 起始地址L 线圈数量H 线圈数量L 00 01 00 00 00 06 01 01 00 00 00 08 如数据长度为0x01个字节数据为0x01第一个线圈为ON其余为OFF。
响应 MBAP 功能码 线圈数据长度 数据 00 01 00 00 00 04 01 01 01 01 3.2. 0x02读离散量输入 在从站中读连续离散量输入状态ON1,OFF0。
请求 MBAP 功能码 起始地址H 起始地址L 离散量输入数量H 离散量输入数量L 7字节 1字节 1字节 1字节 1字节 1字节 响应 MBAP 功能码 离散量输入数据长度 数据 7字节 1字节 1字节 离散量输入数据长度个字节 注意离散量输入数据长度1(离散量输入-1)/8
如在从站0x01中读取开始地址为0x0000的线圈数据读0x0008位。
请求 MBAP 功能码 起始地址H 起始地址L 离散量输入数量H 离散量输入数量L 00 01 00 00 00 06 01 02 00 00 00 08 如在从站0x01中读取开始地址为0x0000的离散量输入数据读0x008位
响应 MBAP 功能码 离散量输入数据长度 数据 00 01 00 00 00 04 01 02 01 01 3.3. 0x03读保持寄存器 在从站中读连续保持寄存器的值
请求 MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L 7字节 1字节 1字节 1字节 1字节 1字节 响应 MBAP 功能码 数据长度 数据 7字节 1字节 1字节 数据长度个字节 注意保持寄存器数据长度保持寄存器数*2
如在从站0x01中读取开始地址为0x0000的保持寄存器数据读0x003个
请求 MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L 00 01 00 00 00 06 01 03 00 00 00 03 如数据长度为0x06个字节第1个寄存器的数据为0x21其余为0x00。
响应 MBAP 功能码 数据长度 数据 00 01 00 00 00 09 01 03 06 00 21 00 00 00 00 3.4. 0x04读输入寄存器 在从站中读连续输入寄存器的值
请求 MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L 7字节 1字节 1字节 1字节 1字节 1字节 响应 MBAP 功能码 数据长度 数据 7字节 1字节 1字节 数据长度个字节 注意输入寄存器数据长度输入寄存器数*2
如在从站0x01中读取开始地址为0x0000的输入寄存器数据读0x003个
请求 MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L 00 01 00 00 00 06 01 04 00 00 00 03 如数据长度为0x06个字节第1个寄存器的数据为0x21其余为0x00。
响应 MBAP 功能码 数据长度 数据 00 01 00 00 00 09 01 04 06 00 21 00 00 00 00 3.5. 0x05写单个线圈 将从站中的一个线圈输出写成ON或OFF0xFF00请求输出为ON,0x000请求输出为OFF
请求 MBAP 功能码 线圈地址H 线圈地址L 输出值H 输出值L 7字节 1字节 1字节 1字节 1字节 1字节 响应 MBAP 功能码 线圈地址H 线圈地址L 输出值H 输出值L 7字节 1字节 1字节 1字节 1字节 1字节 如在从站0x01中将地址为0x0000的线圈设置为ON
请求 MBAP 功能码 线圈地址H 线圈地址L 输出值H 输出值L 00 01 00 00 00 06 01 05 00 00 FF 00 响应 MBAP 功能码 线圈地址H 线圈地址L 输出值H 输出值L 00 01 00 00 00 06 01 05 00 00 FF 00 3.6. 0x06写单个保持寄存器 将从站中的一个保持寄存器设置
请求 MBAP 功能码 保持寄存器地址H 保持寄存器地址L 设置值H 设置值L 7字节 1字节 1字节 1字节 1字节 1字节 响应 MBAP 功能码 保持寄存器地址H 保持寄存器地址L 设置值H 设置值L 7字节 1字节 1字节 1字节 1字节 1字节 如在从站0x01中将地址为0x0000的保持寄存器设置为0x000A。
请求 MBAP 功能码 保持寄存器地址H 保持寄存器地址L 设置值H 设置值L 00 01 00 00 00 06 01 06 00 00 00 0A 响应 MBAP 功能码 保持寄存器地址H 保持寄存器地址L 设置值H 设置值L 00 01 00 00 00 06 01 06 00 00 00 0A 3.7. 0x0F写多个线圈 将从站中的多个线圈输出写成ON或OFF线圈输出值每1位“1”请求输出为ON,“0”请求输出为OFF
请求 MBAP 功能码 线圈起始地址H 线圈起始地址L 线圈数H 线圈数L 线圈输出字节长度 线圈输出值 7字节 1字节 1字节 1字节 1字节 1字节 1字节 1字节 注意线圈输出字节长度1(线圈数-1)/8
响应 MBAP 功能码 线圈起始地址H 线圈起始地址L 线圈数H 线圈数L 7字节 1字节 1字节 1字节 1字节 1字节 如在从站0x01中将以地址0x0000开始连续的4个线圈设置为ON
请求 MBAP 功能码 线圈起始地址H 线圈起始地址L 线圈数H 线圈数L 线圈输出字节长度 线圈输出值 00 01 00 00 00 08 01 0F 00 00 00 04 01 0F 响应 MBAP 功能码 线圈起始地址H 线圈起始地址L 线圈数H 线圈数L 00 01 00 00 00 06 01 0F 00 00 00 04 3.8. 0x10写多个保持寄存器 写从站中的多个连续的寄存器。
请求 MBAP 功能码 寄存器起始地址H 寄存器起始地址L 寄存器数H 寄存器数L 寄存器数据字节长度 寄存器数据 7字节 1字节 1字节 1字节 1字节 1字节 1字节 1字节 注意寄存器数据字节长度寄存器数量×2
响应 MBAP 功能码 寄存器起始地址H 寄存器起始地址L 寄存器数H 寄存器数L 7字节 1字节 1字节 1字节 1字节 1字节 如在从站0x01中向起始地址为0x0000数量为0x0001的寄存器写入数据数据长度为0x02数据为0x000F。
请求 MBAP 功能码 寄存器起始地址H 寄存器起始地址L 寄存器数H 寄存器数L 寄存器数据字节长度 寄存器数据 00 01 00 00 00 09 01 10 00 00 00 01 02 00 0F 响应 MBAP 功能码 寄存器起始地址H 寄存器起始地址L 寄存器数H 寄存器数L 00 01 00 00 00 06 01 10 00 00 00 01