Modbus TCP协议解析

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

一、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 00FF 00 表示将该线圈置1,00 00 表示将该线圈置0

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

1.功能码 05 (0x05)

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

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

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值