Modbus TCP协议解析

在之前的文章中,我们介绍了Modbus RTU协议的内容和实现方法。最近在进行网络通讯的时候又用到了Modbus TCP协议,因此这里把自己对Modbus TCP的了解总结一下。

文章目录

      • 一、Modbus TCP协议解析
        • Modbus TCP和Modbus RTU的区别
        • Modbus TCP协议的构成
        • Modbus TCP的报文头
        • Modbus TCP的功能码
        • Modbus TCP的数据码
      • 二、持续更新:Modbus TCP实现各种功能码的示例
        • 1.功能码 05 (0x05)

一、Modbus TCP协议解析

Modbus TCP和Modbus RTU的区别

这两个都是Modbus协议,但是两者之间有有何区别呢?在我看来,Modbus TCP协议是一个运行在TCP/IP网络连接中的一种协议,而Modbus RTU则是运行在工业控制领域的一种协议,就传递数据的功能来说,两者都能实现。就传递数据的路径来说,Modbus TCP可能更多的是在网络环境下的数据传输。就传递的数据的格式来说,二者存在着一定的区别,但是又有相同的地方。下面我们通过具体的例子,来说明。

Modbus TCP协议的构成

Modbus TCP的协议构成可以分为 报文头 功能码 数据码 (校验码)这几个部分,这里校验码在一般的Modbus TCP中是没有的。对比Modbus RTU,我们可以看到这两个协议的组成基本上是一样的。

Modbus TCP的报文头

Modbus TCP的报文头一般来说又分为以下几个码:

名称 长度 示例 备注
事务处理标识符 2个字节 97 79 客户机发起,服务器复制,用于事务处理配对,可以自行设定
协议标识符 2个字节 00 00 客户机发起,服务器复制,表示该协议是TCP协议,是固定值,不可以更改
长度标识符 2个字节 00 06 表示该数据帧中,从本子节到最后一个字节的字节个数,根据当前数据帧的情况设定
单元标识符 1个字节 03 客户机发起,服务器复制,这是一个站点号,在多设备通讯时,用来表示该数据的来源于哪个设备或者该数据要去往哪个设备

Modbus TCP的功能码

除了Modbus的构成基本相似,其中的功能码、数据码两部分也是采用通用的格式,例如3为读寄存器功能码,16为写寄存器功能码等等。这里对功能码和数据码不做深入的展开。

名称 长度 示例 备注
功能码 1个字节 05 功能码根据Modbus通用功能码的定义进行设定,这里05表示对线圈进行写操作

Modbus TCP的数据码

这里数据码也是同Modbus RTU协议一样,不同的功能码后面的数据码是不同的。这里具体什么样的功能码对应什么样的数据码,请自行查阅资料。这里只是简单的举几个例子。

名称 长度 示例 备注
线圈地址 2个字节 00 10 表示对地址为17的线圈进行操作
操作命令 2个字节 FF 00 FF 00 表示将该线圈置1,00 00 表示将该线圈置0

二、持续更新:Modbus TCP实现各种功能码的示例

1.功能码 05 (0x05)

功能码0x05表示写指令线圈,也就是控制某线圈通断。代码的构成如下:

结构 名称 长度 示例 备注
报文头
事务处理标识符 2个字节 97 79 客户机发起,服务器复制,用于事务处理配对,可以自行设定
协议标识符 2个字节 00 00 客户机发起,服务器复制,表示该协议是TCP协议,是固定值,不可以更改
长度标识符 2个字节 00 06 表示该数据帧中,从本子节到最后一个字节的字节个数,根据当前数据帧的情况设定
单元标识符 1个字节 03 客户机发起,服务器复制,这是一个站点号,在多设备通讯时,用来表示该数据的来源于哪个设备或者该数据要去往哪个设备
功能码 功能码 1个字节 05 05表示对线圈进行写操作
数据码
线圈地址 2个字节 00 10 表示对地址为17的线圈进行操作
操作命令 2个字节 FF 00 FF 00 表示将该线圈置1,00 00 表示将该线圈置0

发送:97 79 00 00 00 06 03 05 00 10 FF 00
收到:97 79 00 00 00 06 03 05 00 10 FF 00

因为这里不需要主机返回数据,因此主机将收到的指令复制一下直接发送回来表示接受正常。

你可能感兴趣的:(STM32)