幸运彩票2018旧版-幸运彩票2018旧版最精准下载

MODBUS-TCP协议详解

作者:AB模板网 点击:10786次 发布时间:2022-01-12

Modbus TCP协议

1. 简介

Modbus TCP是运行在TCP/IP上的Modbus报文传输协议。通过此协议,控制器相互之间通过网络(例以太网)和其它设备之间可以通讯。

Modbus TCP开放式的协议,IANAInternet Assigned Numbers Authoritr,互联网编号分配管理机构)给MODBUS协议赋予TCP编口号502,这是目前在仪表与自动化行业中唯一分配到的端口号。

MODBUS TCP/IP协议模型

图片1.png

2. Modbus TCP 通讯结构

Ø Modbus TCP/IP的通讯设备:连接至TCP/IP网络的Modbus TCP/IP客户机和服务器设备;

Ø 互连设备,如:在TCP/IP网络和串行链路子网之间互连的网桥、路由器或网关设备;

图片2.png

3. Modbus TCP数据帧

MODBUS TCP数据帧与串行链路数据帧的区别

图片3.png

Modbus TCP的数据帧可分为两部分:MBAP+PDU

事务处理标识

协议标识符

长度

单元标识符

功能码

数据

2 Bytes

2 Bytes

2 Bytes

1 Bytes

1 Byte

n Bytes

3.1 报文头 MBAP

MBAP为报文头,长度为7字节,组成如下:

事务处理标识 :可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文。
协议标识符 00 00表示Modbus-TCP协议。
长度 :表示接下来的数据长度,单位为字节。
单元标识符 :设备通讯站地址。

3.2 帧结构PDU

PDU由功能码+数据组成。功能码为1字节,数据长度不定,由具体功能决定。

功能码

Modbus的操作对象有四种:线圈、离散输入、输入寄存器、保持寄存器。

线圈:PLC的输出位,开关量,在Modbus中可读可写

离散量:PLC的输入位,开关量,在Modbus中只读

输入寄存器:PLC中只能从模拟量输入端改变的寄存器,在Modbus中只读

保持寄存器:PLC中用于输出模拟量信号的寄存器,在Modbus中可读可写

根据对象的不同,Modbus的功能码有:

0x01:读线圈

0x05:写单个线圈

0x0F:写多个线圈

0x02:读离散量输入

0x04:读输入寄存器

0x03:读保持寄存器

0x06:写单个保持寄存器

0x10:写多个保持寄存器

 PDU详细结构

例:ZM10-32DI-11

图片4.png

MODBUS寄存器定义

偏移地址

数据内容

功能码

长度

0X 00

1 路开关量输入

0X 02

1bit

0X 01

2 路开关量输入

0X 02

1bit

0X 02

3 路开关量输入

0X 02

1bit

……

0X 02

1bit

0X 1F

32 路开关量输入

0X 02

1bit

0X 00

1~16路开入

0X 04

1WORD

0X 01

17~32路开入

0X 04

1WORD

0X 00

1~16路开入

0X 03

1WORD

0X 01

17~32路开入

0X 03

1WORD

使用时一般仅采用02号功能码即可。

在从站中读32个连续离散量输入,ON=1,OFF=0

请求: 5E 36 00 00 00 06   01 02 00 00 00 20

响应: 5E 36 00 00 00 07   01 02 04 01 00 00 00

解析:

请求:[5E 36]事物处理标识,[00 00] MODBUS-TCP协议标识,[00 06]数据发送区字节数,[01]从站号,[02]读取开关量输入功能码,[00 00]起始地址,[00 20]32个离散输入寄存器。

响应:[5E 36]事物处理标识,[00 00] MODBUS-TCP协议标识,[00 07]数据发送区字节数,[01]从站号,[02]读取开关量输入功能码,[04]寄存器偏个数,[01 00 00 00]32个离散输入分别对应4字节,此4路第一字节对应第1~8 路数据为0x01,按位解析00000001,表示第1路开关量闭合;第9~1617~2425~32路离散输入依次对应后面3个字节; [00 00 00]表示9~32路开关量输入均未导通。

 

 


4. Modbus TCP报文传输服务结构

图片5.png

5. 通讯应用层

Ø Modbus 客户机:允许用户应用控制与远程设备的信息交换。Modbus 客户机根据用户应用向Modbus 客户机的发送要求中包含的参数来建立一个请求;

Ø Modbus 客户机接口:Modbus 客户机接口提供一个接口,使得用户应用能够生成各类Modbus服务的请求,该服务包括对Modbus应用对象的访问。

Ø Modbus服务器:在收到一个Modbus请求后,模块激活一个本地操作进行读、写或完成其它操作。

6. TCP管理层

管理通讯的建立和结束以及管理在所建立的TCP连接上的数据流。

Ø 连接管理:在客户机和服务器的Modbus模块之间的通讯需要使用TCP连接管理模块,负责全面管理报文传输TCP连接。

Ø 访问控制:在某些至关重要的场合,必须禁止无关的主机对设备内部数据的访问。

7. TCP/IP栈层

可以对TCP/IP的栈进行参数配置,以适应不同的产品或系统特定的约束条件,来进行数据流控制、地址管理和连接管理,使用BSD套接字接口来管理TCP连接。

8. TCP 连接管理

Ø Modbus通讯需要建立客户机与服务器之间的TCP连接;

Ø 连接的建立可以由用户应用模块直接实现,也可以由TCP连接管理模块自动完成;

Ø 在第一种情况下,用户应用模块必须提供应用程序接口,以便完全管理连接。这种方式为应用开发人员提供了灵活性,但需要TCP/IP机制方面的专长。

Ø 在第二种情况,TCP连接管理完全不出现,用户应用仅需要发送和接受Modbus报文。TCP连接管理模块负责在需要时建立新的TCP连接。

9. TCP连接的建立

Ø Modbus报文传输服务必须在502端口上提供一个监听套接字,允许接受新的连接和与其它设备交换数据;

Ø 当报文传输服务需要与远程服务器交换数据时,它必须与远程502端口建立一个新的客户及连接,以便于远距离地交换数据。本地端口必须高于1024,并且对每个客户机的连接各不相同。

10. 信息交换过程

完整的Modbus TCP通讯过程:客户机建立一个连接,向服务器发送3Modbus请求,而不等待第一个请求的应答到来。在收到所有的应答后,客户机正常地关闭连接。

Ø 客户机的通讯过程如下:

Connect 命令建立与目标设备的连接;

准备Modbus报文包括7个字节的MBAP在内的请求;

使用Send命令发送报文;

在同一连接下等待应答;

Recv命令读取报文,完成一次数据交换过程。当通讯任务结束时,关闭TCP连接,使MODBUS TCP服务器可为其它客户机服务。

11. Modbus TCP数据帧详解示例

11.1 离散量示例

① 0x02:读离散量输入(读取1 #开关量输入状态,假设设备地址为1)

Ø 主站发送命令示例
00 01 00 00 00 06        01       02      00  00    00  01

MBAP      设备地址  功能码   起始地址  离散量数量

Ø 从设备返回数据示例
00 01 00 00 00 04        01       02      01        01

MBAP      设备地址  功能码   数据长度  数据内容

数据内容01表示,1#开关量输入为ON

② 0x02:读离散量输入(读取118#开关量输入状态,假设设备地址为1)

Ø 主站发送命令示例
00 01 00 00 00 06   ;      01      02     00 00     00  12

MBAP      设备地址  功能码  起始地址  离散量数量

Ø 从设备返回数据示例
00 01 00 00 00 06         01      02      03      01 04 00

MBAP      设备地址  功能码  数据长度  数据内容

数据内容01 04 00,表示第1个离散量输入和第11个离散量输入为ON,其余为OFF

③ 0x02:读离散量输入(读取132#开关量输入状态,假设设备地址为1)

Ø 主站发送命令示例
00 01 00 00 00 06         01      02     00 00     00  20

MBAP      设备地址  功能码  起始地址  离散量数量

Ø 从设备返回数据示例
00 01 00 00 00 07         01      02      04      01 01 01 01

MBAP      设备地址  功能码  数据长度   数据内容

数据内容01 01 01 01,表示第191725个开关量输入为ON,其余为OFF

11.2 线圈读取状态、控制示例

①  0x01:读线圈(读取开始地址为0x0002[即第3]的线圈数据,连续读8假设设备地址为1

Ø 主站发送命令示例:

00 01 00 00 00 06        01        01       00 02       00 08

MBAP       设备地址  功能码    起始地址    线圈数量

Ø 从设备返回数据示例:

00 01 00 00 00 05        01        01       01          01

MBAP             设备地址  功能码   数据长度    数据内容

     数据长度为0x01个字节,数据为0x010x0002地址起的第一个线圈状态ON,其余为OFF

②  0x01:读线圈(读取开始地址为0x0000[即第1]的线圈数据,连续读32假设设备地址为1

Ø 主站发送命令示例:

00 01 00 00 00 06        01        01       00 00       00 20

MBAP       设备地址  功能码    起始地址    线圈数量

Ø 从设备返回数据示例:

00 01 00 00 00 07        01        01       04         01 02 04 08

MBAP             设备地址  功能码    数据长度     数据内容

     数据长度为0x04个字节,数据为0x01 02 04 081101928路线圈状态ON,其余为OFF

③ 0x05:写单个线圈将地址为0x0003的线圈[即第4路线圈]假设设备地址为1设为ON
   主站发送命令示例:

00 01 00 00 00 06         01       05      00 03       FF 00

MBAP       设备地址  功能码  起始地址   数据内容

从设备返回数据示例:

00 01 00 00 00 06         ;01      05       00 03       FF 00

MBAP       设备地址  功能码  起始地址   数据内容

将主站发送的数据原样返回,表示写线圈成功

④ 0x05:写单个线圈将地址为0x0003的线圈[即第4路线圈]假设设备地址为1设为OFF
     主站发送命令示例:   

00 01 00 00 00 06         01      05      00 03       00 00

MBAP       设备地址  功能码  起始地址   数据内容

从设备返回数据示例:

00 01 00 00 00 06         01      05      00 03       00 00

MBAP       设备地址  功能码  起始地址   数据内容

将主站发送的数据原样返回,表示写线圈成功

⑤  0x15:写个线圈,将1~16路线圈的前8路线圈设为ON,后8路线圈设为OFF

主站发送命令示例:

00 01 00 00 00 09         01       0F      00 00       00 10         02         FF 00

MBAP     设备地址  功能码  起始地址   线圈个数     数据长度   数据内容

从设备返回数据示例:

00 01 00 00 00 06         01       0F      00 00       00 10

MBAP     设备地址  功能码  起始地址   线圈个数  

⑥  0x15:写个线圈,将1~32路线圈的第1356781012路线圈设为ON,其余线圈设为OFF

主站发送命令示例:

00 01 00 00 00 0B         ;01       0F      00 00       00 20         04        F5 0A 00 00

MBAP     设备地址  功能码  起始地址   线圈个数     数据长度      数据内容

从设备返回数据示例:

00 01 00 00 00 06         01       0F      00 00       00 20

MBAP     设备地址  功能码  起始地址   线圈个数  

 

 

 


上一篇:没有了!

下一篇:S7-200通过自由口连接MODBUS设备

德阳旭捷科技有限公司