你好,我是Modbus TCP协议

大家好,我是Modbus-TCP协议。前面的文章,我大哥(Modbus-RTU协议)曾做过自我介绍(原文网址:
https://www.founderchip.com/?id=65),今天这篇文章,我也想和大家认识下。

封面图片来自https://pixabay.com并做了适当修改,原图片由mohamed Hassan在Pixabay上发布,感谢作者。

我来自Modbus大家庭,我们家有三个兄弟:大哥(Modbus-RTU协议)、二哥(Modbus-ASCII协议)和我,我们都活跃在工业通信领域。我大哥和二哥擅长串行通信,比如基于RS485或者RS232的通信,而我则擅长基于以太网的通信。由于底层所使用的结构不同,我们的应用数据单元(Application Data Unit,ADU)有所不同。你可能并不清楚什么是ADU,我来详细介绍下吧。

为了进行通信,我们家规定了一种很简单的数据结构,被称为'协议数据单元'(Protocol Data Unit,PDU)。

协议数据单元由功能码+数据构成,如下面这张图:

功能码的长度为1个字节,它表示要执行的功能。比如常见的:01读取线圈;02读取离散量输入值;03读取保持寄存器值;05写单个线圈等;

数据部分的长度为0~252个字节,它表示要读的地址或者要写入的值,不同的功能码对应的数据有所不同。比如01功能码,其数据为4个字节,其中前两个字节表示要读取的线圈的地址,后两个字节表示要读取线圈的数量;而对于05功能码,其数据也是4个字节,前两个字节表示要写入线圈的地址,后面两字节表示要写入的值。

协议数据单元有三种类型:请求型协议数据单元(Request PDU)、应答型协议数据单元(Response PDU)、及异常应答型协议数据单元(Exception Response PDU),更多关于协议数据单元的内容,你可以去我家官网(http://modbus.org)下载通信规范好好阅读下,或者去北岛李工的网站(
https://www.founderchip.com)下载。

协议数据单元是我们家族的通用数据结构,它与底层物理结构无关,我们三兄弟都使用相同的协议数据单元。但是,我们在通信的时候,总要依赖物理网络。因此要把协议数据单元映射到物理网络上,这就形成了应用数据单元(Application Data Unit,ADU)。由于底层网络的不同,我跟两个哥哥的应用数据单元是不同的,他们的ADU结构如下图所示:

Modbus RTU/ASCII ADU

而我的ADU结构如下:

Modbus TCP ADU

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

MBAP头结构由7个字节构成,如下表所示:

MBAP头结构

其中:

  • 传输标识符:用于标识应用数据单元,即请求和应答之间的配对;客户端对该部分进行初始化,服务器端将其拷贝到自己的ADU中;

  • 协议标识符:系统间的协议标识,0=Modbus;

  • 长度:接下来要发送的数据长度,即:单元标识符+PDU的总长度,以字节为单位;

  • 单元标识符:用于系统间的站寻址,比如在以太网+串行链路的网络中,远程站的地址;

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

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

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

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

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

好了,我本来打算“简单说几句的”,没想到一发言就停不下来了。谢谢大家了。

(0)

相关推荐

  • MODBUS TCP协议内容

    MODBUS TCP协议内容

  • 【案例】ABB机器人MODBUS TCP通讯案例

    导读:在工作现场,经常会用到通讯与其它设备交互信息,而ABB机器人做为四大家族之一,通讯功能也是极其丰富.如果在现场要和PLC进行通讯,而PLC支持的是MODBUS  TCP 通讯协议,ABB并没有提 ...

  • Modbus协议深入讲解

    已更新 2019-9-17概览Modbus是一种工业协议,于1979年开发,旨在实现自动化设备之间的通信. Modbus最初是作为通过串行层传输数据的应用级协议实现的,现已扩展到包括通过串行.TCP/ ...

  • 工业RFID读写器中的modbus通信协议, RTU/ ASCII/ TCP

    Modbus是一种应用层消息传输协议,通过此协议,控制器之间.控制器经由网络(如以太网)和其他设备之间可以通信,在通信工作中,每个命令都会指定目的地址,虽然非通信设备也可能收到命令消息,但只有地址匹配 ...

  • 终于有人把TCP协议与UDP协议给搞明白了

    网络编程有三个要素,分别是IP地址.端口号和通信协议,那本文主要讲述的是TCP与UDP这两种通信协议,以及编程的实现. 首先,我们需要了解一下IP地址.端口号.通信协议的相关知识. 一.IP地址 网络 ...

  • 西门子S7-200 Smart系列PLC实现Modbus TCP\RTU\ASCII通信视频教程

    一.西门子S7-200 Smart系列PLC实现Modbus TCP以太网通信客户端视频教程: 西门子S7-200 Smart做Modbus TCP以太网客户端.Modbus Slave调试助手做Mo ...

  • Modbus通讯协议学习

    了解了它,会使你对串口通信有一个清晰的认识! 通用消息帧 ASCII消息帧 (在消息中的每个8Bit 字节都作为两个ASCII字符发送) 十六进制,ASCII字符0...9,A...F 消息中的每个A ...

  • 五分钟读懂TCP 协议

    TCP 是互联网核心协议之一,本文介绍它的基础知识. 一.TCP 协议的作用 互联网由一整套协议构成.TCP 只是其中的一层,有着自己的分工. (图片说明:TCP 是以太网协议和 IP 协议的上层协议 ...

  • 终于把 TCP 协议与 UDP 协议给整明白了!

    网络编程有三个要素,分别是IP地址.端口号和通信协议,那本文主要讲述的是TCP与UDP这两种通信协议,以及编程的实现. 首先,我们需要了解一下IP地址.端口号.通信协议的相关知识. 一.IP地址 网络 ...

  • 详解Modbus通讯协议的用法

    工控课堂工控课堂[www.gkket.com]工程师必备网站添加微信:gkket123 加入500人微信群电气工控自动化-超万元免费资料点我免费下载(DownLoad)ModBus网络是一个工业通信系 ...

  • 你好 | 我是匠子呦

    00 友情提醒 本文共计:520 字,预计阅读时间:2 分钟 本文分为:匠子呦简介.以及未来设想 01 匠子呦简介 你好,我是匠子呦 很荣幸得到你的认可 我是一名期货从业者,曾考取了期货从业资格证(具 ...

  • modbus通讯协议详解

    modbus通讯协议详解