首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Modbus TCP/IP 的详细描述及示例说明

Modbus TCP/IP 的详细描述及示例说明

作者头像
Hello工控
发布2024-07-20 11:16:20
发布2024-07-20 11:16:20
3.9K0
举报
文章被收录于专栏:Hello工控Hello工控

我们前期已经详细介绍了Modbus的数据定义、功能码及模型,还有三种协议的PDU对比。

这期重点介绍 Modbus TCP/IP,也被称为Modbus-TCP,它本质上是带有TCP接口的Modbus RTU协议,运行在以太网上。

TCP/IP

TCP/IP,全称为传输控制协议和互联网协议(Transmission Control Protocol and Internet Protocol),它为Modbus TCP/IP消息传递提供了传输介质。

TCP/IP支持大量同时连接,因此发起方可以选择是重新建立连接还是重用一个活动的连接。

正如我们已经知道的,TCP/IP用于计算机之间交换数据块,TCP的主要功能是确保所有发送的数据包都被接收,而IP则确保消息被正确地寻址和路由。

TCP/IP的结合可以简单地被称为一种传输协议,它不定义数据的含义或数据如何被解释,但是Modbus结合TCP/IP作为一个应用协议可以用来解释数据

IP地址和502端口

MODBUS TCP/IP协议作为工业自动化领域内的一种关键通信手段,其实现对于确保设备间的有效通信至关重要。

在以太网网络中,设备的地址是其IP地址。通常,设备位于同一子网中,IP地址的最后两位数字不同,例如使用最常见的子网掩码255.255.255.0时,IP地址为192.168.1.100

接口是以太网网络,数据传输协议是TCP/IP

使用的TCP端口是:502

Modbus TCP协议描述

Modbus TCP/IP基于客户端和服务器模型工作。Modbus主站被称为客户端,Modbus从站被称为服务器。Modbus TCP/IP客户端和服务器通过502端口发送和接收Modbus数据。

现在,如果我们谈论Modbus TCP/IP的消息结构,它在消息的开头添加了一个7字节的头部,称为MBAP头部Modbus应用协议头部),以及一个PDU(协议数据单元)

以下是一个Modbus RTU请求示例,用于获取设备地址17的保持寄存器#40108到40110的模拟输入AI值。

11 03 006B 0003 7687

针对上述Slave ID(11),如果是Modbus TCP协议,MBAP头部是:

0001 0000 0006 11

具体对比如下所示:

MBAP头部(Modbus应用头部)。这个头部包含以下数据:

  • 事务标识符:由主设备设置的2个字节,用于唯一标识每个请求。可以是任意值。这些字节在响应中由从设备重复,因为从设备的响应可能不会按照请求的顺序接收。
  • 协议标识符:由主设备设置的2个字节,总是00 00,对应于Modbus协议。
  • 长度:由主设备设置的2个字节,标识消息中后续字节的数量。从单元标识符到消息末尾。
  • 单元标识符1字节由主设备设置。由从设备重复,以唯一标识从设备。

那么,上述例子的请求具体说明:

其中:

在来自Modbus TCP从设备的响应中我们得到:

0001 0000 0009 11 03 06 022B 0064 007F

其中:

上述:

模拟输出寄存器AO0的值为02 2B 十六进制或十进制中的555。

模拟输出寄存器AO1的值为00 64 十六进制或十进制中的100。

模拟输出寄存器AO2的值为00 7F 十六进制或十进制中的127。

其他

Modbus TCP的命令定义的具体含义,我们在Modbus功能码一节详细说明过,这里不再重复。

详解Modbus协议功能码

Modbus请求出错的处理机制,我们也已经详细介绍过:

功能码+0x80来响应对于的错误回复:

除了Modbus TCP不需要进行CRC、LRC及奇偶校验外,具体的错误代码都是遵循Modbus协议的故障描述:

Modbus协议的错误检测方法:奇偶校验、CRC(循环冗余校验)和LRC(纵向冗余校验)

另外,需要重点说明以下几点:

  • 在Modbus TCP/IP中,我们只需要设置IP地址,而不需要像Modbus RTU那样设置波特率、校验位和数据位。
  • Modbus TCP/IP使用单元标识符代替Modbus RTU中的从设备ID
  • Modbus TCP/IP通信栈由OSI模型的7层中的5层组成,分别是应用层、传输层、网络层、数据链路层和物理层
  • TCP连接只能由客户端建立,而服务器不能启动TCP事务。服务器应该保持打开TCP连接,并在每个Modbus消息后关闭它。客户端在需要时可以关闭连接,并且也可以处理来自服务器的消息。
  • 一些Modbus设备可以充当服务器和客户端,在这种情况下,可以通过分别用于客户端和服务器数据流的独立连接实现双向通信。
  • Modbus TCP/IP使用502端口作为本地或远程端口,用于发送和接收来自客户端和服务器的消息。也就是说,端口502始终被保留为监听或接收端口。
  • Modbus TCP/IP设备可以在不需要等待回复/响应的情况下向同一服务器发送多个请求,在这种情况下,可以使用事务标识符将请求与相应的响应匹配起来。

关于Modbus RTU和Modbus TCP的详细对比,我们下期接着分享,敬请持续关注。

参考链接:

  1. https://theautomization.com/what-is-modbus-tcp-ip/
  2. https://ipc2u.com/articles/knowledge-base/detailed-description-of-the-modbus-tcp-protocol-with-command-examples/
  3. https://www.gridconnect.com/blogs/news/modbus-tcp-vs-ethernet-ip-an-engineers-decision-making-guide
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hello工控 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • IP地址和502端口
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档