Modbus以太网传输方式

通信结构

MODBUS TCP/IP 的通信系统可以包括不同类型的设备:

  • 502端口是为MODBUS通信保留的,在缺省状态下,强制侦听这个口。
  • 连接至TCP/IP 网络的MODBUS TCP/IP 客户机和服务器设备
  • 互连设备,例如:在TCP/IP网络和串行链路子网之间互连的网桥、路由器或网关,联接,该子网允许将MODBUS 串行链路客户机和服务器终端设备连接起来。

 

报文帧

modbus tcp用MBAP报文头中的单个字节单元标识符取代MODBUS串行链路上通常使用的MODBUS从地址域。

报文头为7 个字节长:

  • 事务处理标识符:用于事务处理配对。在响应中,MODBUS服务器复制请求的事务处理标识符。
  • 协议标识符:用于系统内的多路复用。通过值0 识别MODBUS 协议。
  • 长度:长度域是下一个域的字节数,包括单元标识符和数据域。
  • 单元标识符:为了系统内路由,使用这个域。专门用于通过以太网TCP-IP网络和MODBUS串行链路之间的网关对MODBUS或MODBUS+串行链路从站的通信。MODBUS客户机在请求中设置这个域,在响应中服务器必须利用相同的值返回这个域。

网络配置

SO-RCVBUF, SO-SNDBUF:

这些参数允许为发送和接收用套接字接口设定高限位。可以通过调整这些参数来实现流量控制管理。接收缓存区的的大小即为每个连接advertised window的最大值。为了提高性能,必须增加套接字缓存区的大小。否则,这些值必须小于内部驱动器的资源,以便在内部驱动器的资源耗尽之前关闭TCP 窗口。

接收缓存区大小取决于TCP窗口大小、TCP最大段的大小和接收输入帧所需的时间。由于最大段的尺寸为300个字(一个MODBUS请求需要最大256字+MBAP报文头),如果需要3 帧进行缓存,可将套接字缓存区大小调整为900字。为了满足最大的缓存需求和预定的时间,可以增加TCP 窗口的大小。

 

TCP-NODELAY:

通常,小报文(称为:tinygrams)在局域网(LAN)上的传输不会产生问题,因为多数局域网是不拥堵的,但是,这些tinygrams 在广域网上将会造成拥堵。一个称为“NAGLE 算法”的简单方案是:收集小量的数据,当前面报文的TCP 确认到达时再用单个进行发送。

为了获得更好的实时特性,建议:将小量的数据直接发送,而不要试图将其收集到一个段内再发送。这就是为什么建议强制TCP-NODELAY 选项,这个选项禁用客户机和服务器连接的“NAGLE算法”。

 

SO-REUSEADDR:

当 MODBUS 服务器关闭一个由远端客户启动的TCP 连接时,在这个连接处于“时间等待”状态(两个MSL:最大段寿命)的过程中,该连接所用的本地口号不能被再次用来打开一个新的连接。

建议:为每个客户机和服务器连接,指明SO-REUSEADDR 选项,以迂回这个限制。此选项允许为自身分配一个口号,它作为连接的一部分在2MSL期间内等待客户机并侦听套接字接口。

 

SO-KEEPALIVE:

TCP/IP 协议缺省状态下,不通过空闲的TCP 连接发送数据。因此,如果在TCP 连接端这个过程没有发送数据,在两个TCP 模块间就没有交换任何数据。这就假设客户机端应用和服务器端应用均采用计数器来探测连接的存活性,以便关闭连接。

建议:在客户机与服务器连接两端均采用KEEPALIVE 选项,以便查询另一端得知对方是否故障并死机,或故障并重新启动。

然而,我们必须牢记,采用KEEPALIVE 可能引起一个非常良好的连接,在瞬间故障时通信中断,如果保持连接计时器计时周期太短,将占用不必要的网络带宽。

发布了208 篇原创文章 · 获赞 90 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/lushoumin/article/details/98674627