首页 > 编程知识 正文

modbus tcp实例,modbus tcp和rtu

时间:2023-05-04 01:25:10 阅读:125447 作者:1970

简介Modbus由MODICON公司于1979年开发,是工业现场总线协议标准。 1996年施耐德公司发布了基于以太网TCP/IP的Modbus协议: ModbusTCP。

Modbus协议是一种APP应用层消息传输协议,包括ASCII、RTU、TCP三种消息类型。

标准Modbus协议物理层接口包括RS232、RS422、RS485和以太网接口,它们通过master/slave方式进行通信。

ModbusTCP数据帧ModbusTCP数据帧分为两个部分: MBAP PDU。

消息报头MBAP MBAP是消息报头,长度为7字节,并且配置为:

内容解释事务标志可以是消息的序列号,通常每个通信加1以区分不同的通信数据消息。 协议标识符00 00表示ModbusTCP协议。 长度表示以下数据的长度,单位为字节。 设备标识符可以理解为设备地址。事务处理标志

传输id用于在请求和未来响应之间建立联系。 因此,在TCP连接上,该标识符在同一时间点必须是唯一的。 有多种方法可以使用此标识符。

例如,作为带有计数器的简单“TCP序列号”,可以为每个请求增加计数器。 也可以用作智能索引或指针来标识事务的内容,并记住当前远程服务和未处理的请求。

服务器接受的请求数取决于服务器资源量和TCP窗口的大小。 同样,客户端同时启动的事务数也取决于客户端的资源容量。 此实现参数称为“NnmberMaxofClientTransaction”,必须将其描述为MODBUS客户端的特性。 此参数取1到16之间的值,具体取决于设备类型。单元标识符

在MODBUS或MODBUS串行链路子网中寻址设备时,此域用于路由。 在这种情况下,“单元标识符”将携带远程设备的MODBUS从站地址。

如果MODBUS服务器连接到MODBUS或MODBUS串行链路子网并通过网桥或网关配置地址服务器,则MODBUS单元标识符是从设备,用于标识连接到网桥或网关的子网目标IP地址识别网桥本身的地址,网桥使用MODBUS单元标识符将请求转发到正确的从设备。 串行链路上MODBUS从设备的地址为1到247 (十进制),地址0被分配为广播地址。

对于TCP/IP,使用IP地址寻址MODBUS服务器; 因此,MODBUS单元标识符是无用的。 必须使用值0xFF。 如果要寻址直接连接到TCP/IP网络的MODBUS服务器,建议不要在“设备标识符”域中使用有效的MODBUS从站地址。 如果在自动系统上重新分配了IP地址,并且以前分配的MODBUS服务器的IP地址分配给网关,则使用有效的从地址可能会导致网关路由失败。 使用无效的从站地址时,网关只销毁MODBUD PDU,没有任何问题。 建议:使用0xFF作为“设备标识符”的无效值。

注: 0也可用于与MODBUS/TCP设备直接通信。 框架结构PDU PDU由功能代码数据组成。 功能代码为1字节,数据长度不定,由具体功能决定。功能码

Modbus的操作对象有线圈、离散输入、输入寄存器、保持寄存器4种。

语义线圈PLC输出比特、开关量,在Modbus中可以写入离散量PLC的输入比特、开关量,在Modbus中只能从模拟输入端子变更的寄存器,在Modbus中通过保持寄存器PLC输出模拟信号

功能代码的含义0x01读取线圈0x05单一线圈0x0F多个线圈0x02读取离散量输入0x04读取输入寄存器0x03读取保存寄存器0x06写入单一保持寄存器0x10多个保持寄存器PDU详细结构0x01:读线圈

从站读取1~2000个连续线圈状态,ON=1、OFF=0

请求: MBAP功能码起始地址h起始地址l数h (共计12字节)响应: MBAP功能码数据长度数据(1个地址的数据为1位)例如在从机0x01中,开始地址为0x0002的线圈解码

0001000000601010000200008次:数据长度为0x01字节,数据为0x01,第一个线圈为ON,其余为OFF

000100000401010101013358 www.Sina.com /

打开或关闭从站的1个输出,打开0xFF00请求输出,关闭0x000请求输出

请求: MBAP功能码输出地址h输出地址l输出值h输出值l (合计12字节)响应: MBAP功能码输出地址h输出地址l输出值h输出值l )合计12字节)例如接通地址0x0003线圈

00 01 00 00 00 06 01 05 00 03 FF 00次:写入成功

000100000601050003 ff 003358 www.Sina.com /

从站中的一个输出写成ON或OFF,0xFF00请求输出为ON,0x000请求输出为OFF

请求:MBAP 功能码 输出地址H 输出地址L 输出值H 输出值L(共12字节)响应:MBAP 功能码 起始地址H 起始地址L 输出数量H 输出数量L

0x02:读离散量输入
从一个从站中读1~2000个连续的离散量输入状态

请求:MBAP 功能码 起始地址H 起始地址L 数量H 数量L(共12字节)响应:MBAP 功能码 数据长度 数据(长度:9+ceil(数量/8))如:从地址0x0000开始读0x0012个离散量输入
00 01 00 00 00 06 01 02 00 00 00 12回:数据长度为0x03个字节,数据为0x00 04 01,表示第一个离散量输入和第11个离散量输入为ON,其余为OFF
00 01 00 00 00 06 01 02 03 01 04 00

0x04:读输入寄存器
从一个远程设备中读1~2000个连续输入寄存器

请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)响应:MBAP 功能码 数据长度 寄存器数据(长度:9+寄存器数量×2)如:读起始地址为0x0002,数量为0x0005的寄存器数据
00 01 00 00 00 06 01 04 00 02 00 05回:数据长度为0x0A,第一个寄存器的数据为0x0c,其余为0x00
00 01 00 00 00 0D 01 04 0A 00 0C 00 00 00 00 00 00 00 00

0x03:读保持寄存器
从远程设备中读保持寄存器连续块的内容

请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)响应:MBAP 功能码 数据长度 寄存器数据(长度:寄存器数量×2)如:起始地址是0x0000,寄存器数量是 0x0003
00 01 00 00 00 06 01 03 00 00 00 03回:数据长度为0x06,第一个寄存器的数据为0x21,其余为0x00
00 01 00 00 00 09 01 03 06 00 21 00 00 00 00

0x06:写单个保持寄存器
在一个远程设备中写一个保持寄存器

请求:MBAP 功能码 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字节)响应:MBAP 功能码 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字节)如:向地址是0x0000的寄存器写入数据0x000A
00 01 00 00 00 06 01 06 00 00 00 0A回:写入成功
00 01 00 00 00 06 01 06 00 00 00 0A

0x10:写多个保持寄存器
在一个远程设备中写连续寄存器块(1~123个寄存器)

请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L 字节长度 寄存器值(13+寄存器数量×2)响应:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)如:向起始地址为0x0000,数量为0x0001的寄存器写入数据,数据长度为0x02,数据为0x000F
00 01 00 00 00 09 01 10 00 00 00 01 02 00 0F回:写入成功
00 01 00 00 00 06 01 10 00 00 00 01 Modbus TCP 示例报文

ModBusTcp与串行链路Modbus的数据域是一致的,具体数据域可以参考串行Modbus。这里给出几个ModbusTcp的链路解析说明,辅助新人分析报文。




ModbusTCP通信

通信方式
Modbus设备可分为主站(poll)和从站(slave)。主站只有一个,从站有多个,主站向各从站发送请求帧,从站给予响应。在使用TCP通信时,主站为client端,主动建立连接;从站为server端,等待连接。

主站请求:功能码+数据从站正常响应:请求功能码+响应数据从站异常响应:异常功能码+异常码,其中异常功能码即将请求功能码的最高有效位置1,异常码指示差错类型注意:需要超时管理机制,避免无期限的等待可能不出现的应答

IANA(Internet Assigned Numbers Authority,互联网编号分配管理机构)给Modbus协议赋予TCP端口号为502,这是目前在仪表与自动化行业中唯一分配到的端口号。

通信过程

connect 建立TCP连接准备Modbus报文使用send命令发送报文在同一连接下等待应答使用recv命令读取报文,完成一次数据交换通信任务结束时,关闭TCP连接

本文借鉴两位大佬文章,原文链接:
云逸:https://www.cnblogs.com/ioufev/articles/10830028.html
http://devdiary.blog.sohu.com/188191457.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。