深入了解Modbus TCP协议

时间:2023-03-04作者:佚名
Modbus总线有三种协议:Modbus RTU协议、Modbus ASCII协议和Modbus TCP协议,Modbus总线活跃在工业通信领域。Modbus RTU和Modbus ASCII擅长串行通信,比如基于RS485或者RS232的通信,而Modbus TCP则擅长基于以太网的通信。由于底层所使用的结构不同,Modbus的应用数据单元(Application Data Unit,ADU)有所不同。你可能并去清楚什么是ADU,昌晖仪表下面来详细介绍。

为了进行通信,Modbus规定了一种很简单的数据结构,被称为“协议数据单元”(Protocol Data Unit,PDU)。协议数据单元由功能码 数据构成,如下面这张图:

深入了解Modbus TCP协议
功能码的长度为1个字节,它表示要执行的功能。比如常见的:01读取线圈;02读取离散量输入值;03读取保持寄存器值;05写单个线圈等;数据部分的长度为0-252个字节,它表示要读的地址或者要写入的值,不同的功能码对应的数据有所不同。比如01功能码,其数据为4个字节,其中前两个字节表示要读取的线圈的地址,后两个字节表示要读取线圈的数量;而对于05功能码,其数据也是4个字节,前两个字节表示要写入线圈的地址,后面两字节表示要写入的值。


协议数据单元有三种类型:请求型协议数据单元(Request PDU)、应答型协议数据单元(Response PDU)、及异常应答型协议数据单元(Exception Response PDU),更多关于协议数据单元的内容,大家可以去Modbus官网(深入了解Modbus TCP协议
)下载通信规范好好阅读。

协议数据单元是Modbus的通用数据结构,它与底层物理结构无关,Modbus RTU、Modbus ASCII和Modbus TCP都使用相同的协议数据单元。但是,Modbus在通信的时候,总要依赖物理网络。因此要把协议数据单元映射到物理网络上,这就形成了应用数据单元(Application Data Unit,ADU)。由于底层网络的不同,Modbus TCP跟Modbus RTU和Modbus ASCII的应用数据单元是不同的,Modbus RTU和Modbus ASCII的ADU结构如下图所示:

深入了解Modbus TCP协议

而Modbus TCP的ADU结构如下:

深入了解Modbus TCP协议

可以看到,Modbus TCP的应用数据单元是在协议数据单元的基础上,添加了一个叫做“MBAP头(MBAP Header)”的结构。MBAP是英文“ModBus APlication”的缩写,即“应用数据单元”的意思。

MBAP头结构由7个字节构成,如下表所示:
深入了解Modbus TCP协议
其中:

◆传输标识符:用于标识应用数据单元,即请求和应答之间的配对;客户端对该部分进行初始化,服务器端将其拷贝到自己的ADU中;
协议标识符:系统间的协议标识,0=Modbus;
长度:接下来要发送的数据长度,即:单元标识符 PDU的总长度,以字节为单位;
单元标识符:用于系统间的站寻址,比如在以太网 串行链路的网络中,远程站的地址;

这就是Modbus TCP的ADU结构,即:MBAP头 PDU,是不是很简单呢?Modbus TCP的数据传输采用的是一种被称为“客户端/服务器”的模式,这也是上面的表格中会出现客户端/服务器功能描述的原因。其实,很多网络通信都采用的这种方式,比如大名鼎鼎的西门子的S7通信协议。在串行链路中,这种方式也称为主-从通信。


说道这里,大家可能会有一个疑惑。因为Modbus在网络通信中,通常需要写明IP地址和端口号,为什么Modbus TCP的ADU中没有相关的内容呢?


哈哈,其实这是因为Modbus TCP是一个应用层的协议,而你说的IP地址和端口号属于传输层/网络层的协议。还没明白,好吧,看看这张图:

深入了解Modbus TCP协议

你看,在逻辑上Modbus TCP是在TCP层上的。在发送数据的时候,Modbus TCP的应用数据单元首先向下传送给传输层,加上TCP协议的报文;再传送给网络层,加上IP协议的报文;再向下传送给数据链路层及物理层;接收的过程正好相反,从物理层一层一层的去掉相应层的报文,最终到达应用层。所以在使用Modbus TCP进行数据传输的时候,是要配合TCP/IP协议来使用的。通常如果你使用电脑编程,就要用到SOCKET技术;如果是使用plc编程,通常厂家已经把底层通信封装成库指令了,你只要直接调用就好了。比如西门子S7-200 SMART/1200/1500等PLC都有现成的Modbus-TCP指令库。偷偷告诉你一声,昌晖仪表后续会写基于PLC和基于PC的Modbus-TCP通信的文章。


还有一点要特别说明一下,Modbus TCP使用的端口号是502,一定要给Modbus TCP预留好,不能被别人占用哦。

相关阅读

智能电表与传统电表的差异及其优势

在科技飞速发展的今天,智能电表已经成为现代家庭和电网的重要组成部分。与传统电表相比,智能电表在计量精度、数据采集、远程通信等方面具有显著优势。本文将深入探讨智能电表...
2024-08-19
智能电表与传统电表的差异及其优势

水电维修十几年心得,90%的电路问题,都逃不出这几点

做水电维修十几年,见过的电路故障没有一万也有八千。很多看似复杂的问题,其实根源都藏在几个高频点上。今天就把这些年总结的核心干货一次性讲透,帮你快速定位故障,少走弯路。...
2026-06-29
水电维修十几年心得,90%的电路问题,都逃不出这几点

一文带你读懂整流桥,建议速速收藏好!

【免费下载】 PLC软件下载_PLC软件安装教程_PLC手册下载_PLC案例下载! 【免费学习】 变频器精品课程_西门子PLC精品教程_三菱PLC精品教程! 众所周知,我国电力生产、传输和供电方式基...
2023-06-27

就这线缆的绝缘水平,哪位大神敢送电?老电工都叫别人送!

最近,小编偶然间看到了一篇引人关注的帖子。帖子中描述,在一家工厂里,临时使用的电箱居然毫无征兆地没电了。面对这突如其来的状况,工厂方面迅速采取行动,赶忙找来外协人员,并积极...
2024-10-30
就这线缆的绝缘水平,哪位大神敢送电?老电工都叫别人送!

不用等电费单!看电表数据,精准计算功率因数

很多工厂、企业的电工和运维人员,最头疼的就是功率因数不达标。 功率因数过低,不仅会造成电能浪费,还会产生高额力调电费罚款。但多数人只能等到月底电费单出来,才知道无功补偿...
2026-05-23
不用等电费单!看电表数据,精准计算功率因数

热销商品

四氟包覆/FEP/PTFE包覆胶O型圈全氟醛FFKMO型圈耐化学腐蚀氟胶

四氟包覆(FEP/PTFE)O型圈及全氟醚(FFKM)O型圈是高性能密封解决方案,专为极端化学环境设计。FEP或PTFE包覆氟橡胶(FKM)芯材的O型圈兼具外层优异的耐化学腐蚀性、抗溶胀性...
5

领普E3S/E5配套插座面板86型暗装插座多孔五孔空调无边框家用

领普E3S/E5配套插座面板86型暗装插座多孔五孔空调无边框家用,是一款专为现代家庭设计的多功能插座。该款插座采用86型设计,易于安装和适配各种家用电器,无论是台灯、...
11.9

原装博世角磨机GWS6-100/TWS6600/6700转子定子碳刷齿轮/博士配件

原装博世角磨机GWS6-100/TWS6600/6700系列配件,包括转子、定子、碳刷及齿轮等核心部件,均采用博世原厂高品质材料制造,确保与设备完美匹配,保障运行稳定与高效性能。...
3.5

聚氨酯橡胶缓冲垫弹性套联轴器牛筋柱销减震套垫圈弹性垫缓冲胶垫

聚氨酯橡胶缓冲垫弹性套联轴器中的牛筋柱销减震套、垫圈及弹性垫,是一种高性能减震缓冲元件。采用优质聚氨酯橡胶材料制成,兼具高弹性、耐磨损、抗老化及耐油耐酸碱...
0.27

硅胶垫片/硅胶垫/硅胶垫片圆形/硅胶垫圈/橡胶垫片/氟胶垫片

硅胶垫片(又称硅胶垫、硅胶垫圈)是一种由硅橡胶制成的密封材料,具有优异的耐高低温(-60℃~230℃)、耐老化、绝缘和环保无毒特性,广泛用于食品、医疗、电子及家电等领域...
1

网站栏目