通过一段报文来解读工业以太网Modbus TCP/IP协议

2022/9/26 2:05:52 人评论 次浏览 分类:技术方案  文章地址://www.e-cumulus.com/tech/4476.html

文章通过对一段报文逐段逐句的解读,让大家了解工业以太网Modbus TCP/IP协议

Modbus TCP/IP直观上看它还是Modbus协议,这个没错,Modbus TCP/IP是Modbus协议的变体,将Modbus协议运行在了TCP/IP网络上,连接端口是502,不需要校验和计算,因为数据校验在低层进行了;
还有几种协议Modbus over TCP,Modbus over TCP/IP还有Modbus RTU/IP,这三种也是Modbus的变体,但是和Modbus TCP/IP协议最大的区别就是带有了Modbus RTU的检验和。

目前也有很多人在研究Modbus UDP/IP,这和Modbus TCP/IP最大的区别在于可以提高实时性和通信效率。因为UDP是无连接协议,比TCP节约了大量网络时间,但是可靠性和安全性不能保证。

Modbus

下面昌晖仪表通过一段报文来解读Modbus TCP/IP,从OSI七层模型物理层到应用层。


Modbus TCP/IP协议报文

上图我们可以清晰看到Modbus TCP/IP使用了OSI的物理层,数据链路层,网络层,传输层以及应用层。


1、物理层

Frame物理层的数据帧概况,线路307个字节,实际捕获307个字节

Frame物理层的数据帧

◆物理介质:以太网卡

◆传输介质:双绞线,同轴电缆,光纤
◆封装类型:Ethernet(1)
◆物理接口:RJ45
◆帧编号:1176
◆帧长度:307字节

2、数据链路层

Ethernet II协议,以太网帧头信息(14个字节)

Ethernet II协议,以太网帧头信息

网卡MAC地址:

◆目的MAC:00:15:5d:07:b4:0a
◆源MAC:a8:74:1d:c7:16:5d
◆类型:IPv4

3、网络层

IP协议IP包头信息(20个字节)

IP协议IP包头信息

◆版本:IPv4

◆协议类型:TCP
◆源IP地址:172.18.32.32
◆目的IP地址:172.18.31.72

4、传输层:

TCP协议数据段的头信息(20个字节)

TCP协议数据段的头信息

◆源端口:502

◆目的端口:57298
◆序列号:4197
◆确认号:241
◆PDU长度:253

5、应用层

MBAP,Modbus应用层的信息(253个字节)

MBAP,Modbus应用层的信息

◆MBAP:(7个字节)

◆MABP 由四部分构成:
◆事务识别号:9522
◆协议识别号:0
◆长度:247
◆设备识别号:255

详细说明如下:

MBAP,Modbus应用层说明

关于设备识别号,对于Modbus TCP/IP协议该项默认255,但是如果该协议为Modbus Plus或者Modbus RTU等串口协议,通过串口服务器等转换设备转换后变为了Modbus RTU over TCP,则该项为Modbus串口从站的设备地址。


Modbus:(246个字节)


在应用层Modbus的响应报文:

◆第一个字节:功能码
◆第二个字节:后面的长度
◆第三个字节:请求数据的第一个寄存器的值。上图即显示的40001-40024的值;由上图也能看出40003的当前值为38.86

综上内容一条完整modbus TCP/IP报文的构成如下:



①以太网头(14字节)

◆目的MAC地址(6字节)
◆源MAC地址(6字节)
类型(2字节)0x0800为IPv4

②IP包头(20字节)



③数据段(20字节)


后面即为Modbus TCP/IP部分信息;


④Modbus TCP/IP数据结构

Modbus TCP/IP为CS架构,Client不断的像Server发出请求,Server端被动响应提供数据或者被写入。读写的数据结构和Modbus RTU是一样的,常见的如下四种:

Modbus TCP/IP数据结构

根据以上四种数据类型,可以引申出常见的8个功能码:

FC1:读取线圈的状态
FC5:单个写入线圈
FC2:读取开关量输入的状态
FC15:连续写入一组线圈
FC3:读取保持寄存器的值
FC6:单个写保持寄存器
FC4:读取模拟量输入寄存器的值
FC16:连续写保持寄存器

但是实际上Modbus协议的功能码远不止如下8个;比如FC20和FC21就是对文件记录的操作,其中FC20是读取文件记录,FC21是对文件进行写操作。


6、Modbus TCP/IP Client/Server模型



Modbus TCP/IP工作过程

①客户端在网络上发出消息请求,将任务进行初始化
②请求信息被服务端接收到
③服务端发送一个响应消息
④客户端确认收到服务端的响应信息

7、Modbus TCP/IP和Modbus RTU ADU的区别

Modbus RTU ADU:


Modbus TCP/IP ADU:



其中两点区别:

①Modbus TCP/IP ADU没有了CRC校验
②Modbus TCP/IP ADU从站地址(1个字节)变为了MBAP Header(七个字节)

最后给大家附上Modbus错误代码

错误代码【01】

说明:非法功能。对于服务器(或从站)来说,询问中接收到的功能码是不可允许的操作,可能是因为功能码仅适用于新设备而被选单元中不可实现同时,还指出服务器(或从站)在错误状态中处理这种请求,例如:它是未配置的,且要求返回寄存器值。

错误代码【02】

说明:非法数据地址。对于服务器(或从站)来说,询问中接收的数据地址是不可允许的地址,特别是参考号和传输长度的组合是无效的。对于带有100个寄存器的控制器来说,偏移量96和长度4的请求会成功,而偏移量96和长度5的请求将产生异常码02。

错误代码【03】

说明:非法数据值。对于服务器(或从站)来说,询问中包括的值是不可允许的值。该值指示了组合请求剩余结构中的故障。例如:隐含长度是不正确的。modbus协议不知道任何特殊寄存器的任何特殊值的重要意义,寄存器中被提交存储的数据项有一个应用程序期望之外的值。

错误代码【04】

说明:从站设备故障。当服务器(或从站)正在设法执行请求的操作时,产生不可重新获得的差错。

错误代码【05】

说明:确认。与编程命令一起使用,服务器(或从站)已经接受请求,并且正在处理这个请求,但是需要长持续时间进行这些操作,返回这个响应防止在客户机(或主站)中发生超时错误,客户机(或主机)可以继续发送轮询程序完成报文来确认是否完成处理。

错误代码【06】

说明:从属设备忙。与编程命令一起使用。服务器(或从站)正在处理长持续时间的程序命令。张服务器(或从站)空闲时,用户(或主站)应该稍后重新传输报文。

错误代码【08】

说明:存储奇偶差错。与功能码20和21以及参考类型6一起使用,指示扩展文件区不能通过一致性校验。服务器(或从站)设法读取记录文件,但是在存储器中发现一个奇偶校验错误。客户机(或主方)可以重新发送请求,但可以在服务器(或从站)设备上要求服务。

错误代码【10】

说明:不可用网关路径。与网关一起使用,指示网关不能为处理请求分配输入端口至输出端口的内部通信路径。通常意味着网关是错误配置的或过载的。

错误代码【11】

说明:网关目标设备响应失败。与网关一起使用,指示没有从目标设备中获得响应。通常意味着设备未在网络中。
作者:曹俊义

相关阅读

深入了解Modbus TCP协议
走进工业以太网协议Modbus TCP

共有访客发表了评论 网友评论

  客户姓名:
邮箱或QQ:
验证码: 看不清楚?