当前位置:首页>科技 >内容

modbustcp常见报文,图文详解ModbusTCP协议

2024-01-19 15:45:02科技漂亮的斑马

很多朋友对modbustcp常见报文,图文详解ModbusTCP协议不是很了解,六月小编刚好整理了这方面的知识,今天就来带大家一探究竟。Modbus是由MO

modbustcp常见报文,图文详解ModbusTCP协议

很多朋友对modbustcp常见报文,图文详解ModbusTCP协议不是很了解,六月小编刚好整理了这方面的知识,今天就来带大家一探究竟。

Modbus是由MODICON公司于1979年开发的,是一种工业现场总线协议标准。1996年,施耐德公司推出了基于以太网TCP/IP的Modbus协议:ModbusTCP。Modbus协议是应用层消息传输协议,包括ASCII、RTU和TCP。Modbus协议的标准物理接口包括RS232、 rs422、 RS485和以太网接口,采用主从式通信。AModbusTCP数据帧ModbusTCP数据帧可以分为两部分:MBAP PDU。

(1)报文头MBAP:MBAP是长度为7字节的报文头,组成如下:(2)帧结构PDU:PDU由功能码数据组成。功能码为1字节,数据长度不确定,由具体功能决定。(1)功能代码:Modbus有四个操作对象:线圈、离散输入、保持寄存器和输入寄存器。(2)根据对象的不同,Modbus的功能代码包括:(3)明细表:BPDU的详细结构(1)0x01:读取线圈:读取从站1 ~ 2000个连续线圈状态,ON=1,OFF=0。

请求:MBAP功能码起始地址H起始地址L数量H数量L(共12字节)响应:MBAP功能码数据长度数据(一个地址的数据为1位)如:从站0x01中,读取起始地址为0x0002的线圈数据,读取0x0008位00 01 00 00 06 01 00 02 00 08次:数据长度为0x01字节,数据为0x 01,第一个线圈为on,其余为OFF00 01 00 00 00

(2)0x05:写单个线圈:写从站的输出为开或关,0xFF00请求输出为开,0x000请求输出为关。请求:MBAP功能码输出地址H输出地址L输出值H输出值L(共12个字节)响应:MBAP功能码输出地址H输出地址L输出值H输出值L(共12个字节)例如将地址为0x 000000000000000000001 05000003 FF00:写成功0000 00000003 FF。

(3)0x0F:写多个线圈:从站中一个线圈序列的每个线圈被强制打开或关闭,数据域中设置为1的位请求相应的输出位打开,设置为0的位请求响应输出关闭。请求:MBAP功能码起始地址h起始地址L输出量h输出量L字节长度输出值L响应:MBAP功能码起始地址h起始地址L输出量h输出量L(4)0x02:读取离散输入:从一个从站读取1~2000个连续离散输入状态。

请求:MBAP功能码起始地址h起始地址l数量h数量l(共12个字节)响应:MBAP功能码数据长度数据(长度:9 ceil(数量/8))如:从地址0x0000读取0x0012个离散量,输入00 00 00 06 01 02 00 00 00 12次:数据长度为0x03个字节,数据为0x0010400,表示第一个离散量输入和第11个离散量输入为on,其余为OFF 001000000

(5)0x04:读取输入寄存器:从远程设备读取1 ~ 2000个连续的输入寄存器。请求:MBAP功能码起始地址H起始地址L寄存器个数H寄存器个数L(共12个字节)响应:MBAP功能码数据长度寄存器数据(长度:9寄存器个数2),如:读取起始地址为0x0002,编号为0x0005 00 00 06 01 04 00 02 00 05的寄存器数据:数据长度为0x0c,第一个寄存器的。

00 01 00 000 000 00000001 040 a 000 c 00 00 00 00 00 00 00(6)0x 03:读取保持寄存器:从远程设备读取保持寄存器连续块的内容。请求:MBAP功能码起始地址H起始地址L寄存器号H寄存器号L(共12个字节)响应:MBAP功能码数据长度寄存器数据(长度:9寄存器号2)如:起始地址为0x0000,寄存器号为0x 00000010x 000300 01 00 00 00 06 01 03 00 00 00 00 03第一个寄存器为0x21。

00 01 00 00 09 01 03 06 00 21 00 00 00(7)0x 06:写入单个保持寄存器:在远程设备中写入保持寄存器。请求:MBAP功能码寄存器地址H寄存器地址L寄存器值H寄存器值L(共12个字节)响应:MBAP功能码寄存器地址H寄存器地址L寄存器值H寄存器值L(共12个字节)比如写数据0x 000000000000000000000000000000000000000000000000000000000000000000000000

(8)0x10:写入多个保持寄存器:在一个远程设备中写入连续的寄存器块(1~123个寄存器)。请求:MBAP功能码起始地址H起始地址L寄存器号H寄存器号L字节长度寄存器值(13寄存器号2)响应:MBAP功能码起始地址H起始地址L寄存器号H寄存器号L(共12个字节)例如,向起始地址为0x0000、编号为0x0001、数据长度为0x02、数据为0x0000000009的寄存器写入数据。

回复:成功写入00 01 00 00 00 06 01 10 00 00 01 c ModBusTcp示例消息Modbus TCP与串行链路Modbus数据域一致。具体数据域请参考串行Modbus。下面是ModbusTcp链接分析的一些解释,帮助新人分析消息。DModbus TCP通信(1)通信模式

Modbus设备可分为主站(poll)和从站(slave)。主站只有一个,从站有多个。主站向每个从站发送请求帧,从站做出响应。使用TCP通信时,主站为客户端,主动建立连接;从站是服务器端,等待连接。主站请求:功能码数据从站正常响应:请求功能码响应数据从站异常响应:异常功能码异常码,其中异常功能码即将请求功能码1的最高有效位,异常码表示错误类型。

需要一种超时管理机制来避免无限期地等待可能不会出现的回复。IANA(Internet Assigned Numbers Authority)将TCP端口号分配给Modbus协议as 502,这是目前仪表和自动化行业唯一分配的端口号。(II)通信过程connect建立TCP连接并准备Modbus消息。使用send命令发送消息,并在同一连接下等待回复。使用recv命令读取消息。当数据交换的通信任务完成后,关闭TCP连接E仿真软件。

Modbus poll和Modbus slave是一套Modbus仿真软件,可以实现Modbus RTU、TCP、串口仿真等。在ModbusTCP中,Modbus poll作为客户端请求数据,Modbus slave作为服务器处理请求。用C语言写客户端连接Modbus从机时,注意数据格式,一次发出一条指令,否则连接会出错。使用软件时,您需要指定功能代码,并在设置-从定义或轮询定义中进行设置。从属id:从属编号(交易标识符)

function:功能码,0x01对应线圈操作,0x02对应离散量操作,0x03对应保持寄存器操作,0x04对应输入寄存器操作

address:开始地址

quantity:寄存器/线圈/离散量的数量

审核汤梓红

以上知识分享希望能够帮助到大家!

声明本站所有作品图文均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系我们

Top