我们前期已经详细介绍了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作为一个应用协议可以用来解释数据。
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应用头部)。这个头部包含以下数据:
那么,上述例子的请求具体说明:

其中:

在来自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 RTU和Modbus TCP的详细对比,我们下期接着分享,敬请持续关注。
参考链接: