0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Modbus TCP通信概述

机器人及PLC自动化应用 来源:机器人及PLC自动化应用 2023-01-05 10:02 次阅读

odbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。标准的Modbus协议物理层接口RS232RS422RS485以太网接口,采用master/slave方式通信。Modbus设备可分为主站(Master)和从站(slave),主站只有一个,从站有多个,主站向各从站发送请求帧,从站给予响应。在使用TCP通信时,主站为client端,主动建立连接;从站为server端,等待连接。对于这三种通信在数据模型和功能调用上都是相同的,只有封装方式是不同的。Modbus TCP协议是一个运行在TCP/IP网络连接中的一种协议,与传统的串口方式相比,MODBUS TCP插入一个标准的MODBUS报文头到 TCP报文中,不再带有差错校验和地址域,如图1所示。MBAP为报文头,长度为7字节,组成如下表1。

44606014-8c5c-11ed-bfe3-dac502259ad0.jpg

图1. Modbus 报文帧

表1.报文头MBAP

内容 解释
事务处理标识(2Bytes) 可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文。
协议标识符(2Bytes) 00 00表示ModbusTCP协议。
长度(2Bytes) 表示接下来的数据长度,单位为字节。
单元标识符(1Byte) 可以理解为设备地址。

SIMATIC S7-1500 ModbusTCP 通信使用要求

TIA Portal V12 SP1开始软件中增加了S7-1500的Modbus TCP块库(V3.0及以上版本),用于S7-1500与支持Modbus TCP的通信伙伴进行通信,如下图2所示。S7-1500支持ModbusTCP指令的所有库版本,在用户程序中调用和参数化"MB_CLIENT"和"MB_SERVER"指令。
"MB_CLIENT"指令通过CPU 或 CM/CP 的本地接口作为ModbusTCP客户端进行通信,无需要任何额外的硬件支持。使用"MB_CLIENT"指令在客户端和服务器之间建立连接,发送请求和接收响应,并控制断开连接。
"MB_SERVER"指令通过CPU 或 CM/CP 的本地接口作为ModbusTCP服务器进行通信,无需要任何额外的硬件支持。"MB_SERVER"指令处理ModbusTCP客户端的连接请求,接收Modbus客户端的请求并发送响应消息。

446550ba-8c5c-11ed-bfe3-dac502259ad0.jpg

图2. 通信指令

Modbus TCP 实验环境和内容

在本应用实例中,通过以下产品进行Modbus TCP编程,实现了S7-1500通过CP1543-1分别作为客户端和服务器与第三方测试软件进行通信。

软件:

TIA V16 Professional
Modbus Poll
Modbus Slave

硬件:

CPU 1511-1 PN V2.8
CP 1543-1 V2.2

Modbus TCP 通信程序

1、CP1543-1作为服务器

1.1、打开 TIA Portal V16软件,新建一个项目命名为 "ModbusTCP",在项目中添加 CPU1511-1PN V2.8 及CP1543-1 V2.2,为CP1543-1以太网接口新建一个子网并设置 IP地址为 "192.168.0.3",如下图 3 所示。

446af63c-8c5c-11ed-bfe3-dac502259ad0.jpg

图3. 分配IP地址

1.2、在 CPU1511-1PN的 OB1组织块中添加Modbus TCP Server功能块 "MB_SERVER",软件将提示会为该 FB块增加一个背景数据块,本例中为 DB1"MB_SERVER_DB",如下图4所示。接下来为指令块分配引脚,各引脚的具体含义如下表 2 所示。

4473ef8a-8c5c-11ed-bfe3-dac502259ad0.jpg

图4. 指令创建

447c6fc0-8c5c-11ed-bfe3-dac502259ad0.jpg

1.3、保持性寄存器存储区与"MB_SERVER"管脚参数"MB_HOLD_REG"进行映射,对于线圈、离散输入、输入寄存器等通过功能块均已经与 S7-1500的过程映像区进行了映射,其映射地址对应如表 3 所示。

表3.CPU的Modbus地址映射表

Modbus功能 S7-1500 CPU
功能码 功能 数据区 地址空间 数据区 CPU地址
01 读取:位 Output 1~9999 过程映像输出 Q0.0~Q1249.6
02 读取:位 Input 10001~19999 过程映像输入 I0.0~I1249.6
03 读取:Word 保持性寄存器 40001~49999 400001~465535 全局数据(DB、过程映像、M区) 与指令引脚MB_HOLD_REG关联
04 读取:Word Input 30001~39999 过程映像输入 IW0~IW19996
05 写入:位 Output 1~9999 过程映像输出 Q0.0~Q1249.6
06 写入:Word 保持性寄存器 40001~49999 400001~465535 全局数据(DB、过程映像、M区) 与指令引脚MB_HOLD_REG关联
15 写入:位 Output 1~9999 过程映像输出 Q0.0~Q1249.6
16 写入:Word 保持性寄存器 40001~49999 400001~465535 全局数据(DB、过程映像、M区) 与指令引脚MB_HOLD_REG关联

1.4、使用上述指令实现CP1543-1为Modbus TCP的 Server与通信伙伴建立通信,通过表2可知CONNECT参数的设定有两种方式,下面分别介绍这两种方式如何创建CONNECT参数。

(1)使用TCON_IP_v4结构创建连接参数。

添加一个全局数据块用于匹配功能块"MB_SERVER"的管脚"CONNECT",本例中为数据块DB2(块名称:MB_CONNECT),打开该数据块,创建变量 "MB_Server",手动在数据类型框中输入"TCON_IP_v4",并将该变量关联到功能块"MB_SERVER"的管脚参数"CONNECT"上,如下图5所示。数据类型“TCON_IP_V4”的各参数含义及本例中设置如下表4所示。

4488a6be-8c5c-11ed-bfe3-dac502259ad0.jpg

图5. 创建“TCON_IP_V4”类型的CONNECT参数

表4."TCON_IP_V4"数据类型的参数设置

TCON_IP_v4结构 含义 本例为 SERVER时的设置
InterfaceID 本地接口的硬件标识符(参见图 6)。 259
ID 引用该连接(取值范围:1 到 4095)。
该参数将唯一确定 CPU 中的连接。指令 "MB_SERVER"的每个实例必须使用唯一的 ID。该 ID 还不得被不同通信类型的其他指令同时使用。
1
ConnectionType 连接类型,对于 TCP,选择 11(十进制)。不允许使用其它连接类型。如果使用了其它连接类型(如 UDP),该指令的 STATUS 参数将输出相应的错误消息。 16#0B
ActiveEstablished 建立连接的方式所对应的 ID,对于被动连接建立,应选择 FALSE。 False
RemoteAddress 连接伙伴的 IP 地址,例如 192.168.0.1:
addr[1] = 192
addr[2] = 168
addr[3] = 0
addr[4] = 1
如果指令"MB_SERVER"要接受来自任何连接伙伴的连接请求,应将"0.0.0.0" 用作 IP 地址。
0.0.0.0
RemotePort 远程连接伙伴的端口号(取值范围:1 - 49151)。
如果指令"MB_SERVER"要接受来自远程伙伴任何端口的连接请求,应将"0"用作端口号。
0
LocalPort 本地连接伙伴的端口号(取值范围:1 - 49151)。
此 IP 端口号定义 Modbus 客户端连接请求中要监视的 IP 端口。默认值为 502。
502

4490b688-8c5c-11ed-bfe3-dac502259ad0.jpg

图6. 硬件接口标识符


(2)通过"网络视图"创建TCP连接后,再使用TCON_Configured结构创建连接参数。

在"网络视图"窗口,左上侧选择"连接"按钮,选择”TCP连接“,然后在CPU上点击鼠标"右键"并选择"添加新连接"。如下图7所示。

44b9779e-8c5c-11ed-bfe3-dac502259ad0.jpg

图7. 添加新连接

在"添加新连接"窗口中,"类型"选择为"TCP连接",伙伴选择"未指定",本地接口选择"CP1543-1,以太网接口_1[X1]",分配本地连接ID,服务器为被动连接,点击 "添加"创建TCP 连接,如下图8所示。

44c215de-8c5c-11ed-bfe3-dac502259ad0.jpg

图8. 创建TCP连接

"TCP_连接_1"为建立的连接,选中该连接,在属性的"地址详细信息"中可以设置该TCP 连接的相关信息,如下图9所示。

44cc4e82-8c5c-11ed-bfe3-dac502259ad0.jpg

图9. TCP连接参数设置

添加一个全局数据块用于匹配功能块"MB_SERVER"的管脚"CONNECT",本例中为数据块DB2(块名称:MB_CONNECT),打开该数据块,创建变量 "MB_Server",手动在数据类型框中输入"TCON_Configured",并将该变量关联到功能块"MB_SERVER"的管脚参数"CONNECT"上,如下图10所示。数据类型“TCON_Configured”的各参数含义及本例中设置如下表5所示。

44d4e498-8c5c-11ed-bfe3-dac502259ad0.jpg

图10. 创建“TCON_Configured”类型的CONNECT参数

表5."TCON_Configured"数据类型的参数设置

TCON_Configured结构 含义 本例为 SERVER时的设置
InterfaceID 本地接口的硬件标识符(参见图 6)。 259
ID 引用该连接(取值范围:1 到 4095)。
ID 在 CPU 范围内必须是唯一的。ID 还不得被不同通信类型的其他指令同时使用。输入现有连接的连接 ID。
256(16#100)
ConnectionType 连接类型,对于组态连接,选择 254(十进制)。 254

1.5、仿真软件设置,如下图11所示。

44dfbfa8-8c5c-11ed-bfe3-dac502259ad0.jpg

图11. 仿真软件连接设置

1.6、测试结果

44e521b4-8c5c-11ed-bfe3-dac502259ad0.jpg

图12. 测试结果

2、CP1543-1 作为客户端

2.1、打开 TIA Portal V16软件,新建一个项目命名为 "ModbusTCP",在项目中添加 CPU1511-1PN V2.8 及CP1543-1 V2.2,为CP1543-1以太网接口新建一个子网并设置 IP地址为 "192.168.0.3",如上图 13 所示。

44eb3694-8c5c-11ed-bfe3-dac502259ad0.jpg

图13. 分配IP地址

2.2、在 CPU1511-1PN 的 OB1组织块中添加Modbus TCP Client功能块 "MB_CLIENT",软件将提示会为该 FB块增加一个背景数据块,本例中为 DB1"MB_CLIENT_DB",如下图14所示。接下来为指令块分配引脚,各引脚的具体含义如下表 6 所示。

44f68904-8c5c-11ed-bfe3-dac502259ad0.jpg

图14. 指令创建

451469e2-8c5c-11ed-bfe3-dac502259ad0.jpg

2.3、参数 MB_MODE、MB_DATA_ADDR 和 MB_DATA_LEN 的组合定义了 MB_MODE 值为 0、1 和 2 时,当前 Modbus 消息中所用的 Modbus 功能代码,对应关系如下表7所示。

MB_MODE 中包含有关读写操作的信息。MB_MODE=0:读取,MB_MODE=1 和 2:写入(注:MB_MODE=2 时,Modbus 功能 15 和 05 或 Modbus 功能 16 和 06 无区别。)

MB_DATA_ADDR 中包含有关待读取/写入的目标信息,以及“MB_CLIENT”指令用于计算远程地址的地址信息。

MB_DATA_LEN 包含要读/写的值的数量。

451e3d50-8c5c-11ed-bfe3-dac502259ad0.jpg

2.4、使用上述指令实现CP1543-1为Modbus TCP的 Client与通信伙伴建立通信,通过表6可知CONNECT参数的设定有两种方式,下面分别介绍这两种方式如何创建CONNECT参数。

(1)使用TCON_IP_v4结构创建连接参数。

添加一个全局数据块用于匹配功能块"MB_CLIENT"的管脚"CONNECT",本例中为数据块DB2(块名称:MB_CONNECT),打开该数据块,创建变量 "MB_CLIENT",手动在数据类型框中输入"TCON_IP_v4",并将该变量关联到功能块"MB_CLIENT"的管脚参数"CONNECT"上,如下图15所示。数据类型“TCON_IP_V4”的各参数含义及本例中设置如下表8所示。

4526b034-8c5c-11ed-bfe3-dac502259ad0.jpg

图15. 创建“TCON_IP_V4”类型的CONNECT参数

表8."TCON_IP_V4"数据类型的参数设置

TCON_IP_v4结构 含义 本例为 SERVER时的设置
InterfaceID 本地接口的硬件标识符(参见图 16)。 259
ID 引用该连接(取值范围:1 到 4095)。
该参数将唯一确定 CPU 中的连接。指令 "MB_CLIENT"的每个实例必须使用唯一的 ID。
1
ConnectionType 连接类型,对于 TCP,选择 11(十进制)。不允许使用其它连接类型。如果使用了其它连接类型(如 UDP),该指令的 STATUS 参数将输出相应的错误消息。 16#0B
ActiveEstablished 建立连接的方式所对应的 ID,对于被动连接建立,应选择 FALSE。 TRUE
RemoteAddress 连接伙伴(Modbus 服务器)的 IP 地址,例如,192.168.0.1:
addr[1] = 192
addr[2] = 168
addr[3] = 0
addr[4] = 1
192.168.0.100
RemotePort 远程连接伙伴的端口号(取值范围:1 - 49151)。
使用客户端通过 TCP/IP 协议与其建立连接并最终通信的服务器的 IP 端口号(默认值:502)。
502
LocalPort 本地连接伙伴的端口号:端口号:1 至 49151;任意端口:“0” 。 0

4490b688-8c5c-11ed-bfe3-dac502259ad0.jpg

图16. 硬件接口标识符


(2)通过"网络视图"创建TCP连接后,再使用TCON_Configured结构创建连接参数。

在"网络视图"窗口,左上侧选择"连接"按钮,选择”TCP连接“,然后在CPU上点击鼠标"右键"并选择"添加新连接"。如下图17所示。

453745fc-8c5c-11ed-bfe3-dac502259ad0.jpg

图17. 添加新连接

在"添加新连接"窗口中,"类型"选择为"TCP连接",伙伴选择"未指定",本地接口选择"CP1543-1,以太网接口_1[X1]",分配本地连接ID,服务器为被动连接,点击 "添加"创建TCP 连接,如下图18所示。

4546e1f6-8c5c-11ed-bfe3-dac502259ad0.jpg

图18. 创建TCP连接

"TCP_连接_2"为建立的连接,选中该连接,在属性的"地址详细信息"中可以设置该TCP 连接的相关信息,如下图19所示。

454dff18-8c5c-11ed-bfe3-dac502259ad0.jpg

图19. TCP连接参数设置

添加一个全局数据块用于匹配功能块"MB_CLIENT"的管脚"CONNECT",本例中为数据块DB2(块名称:MB_CONNECT),打开该数据块,创建变量 "MB_CLIENT",手动在数据类型框中输入"TCON_Configured",并将该变量关联到功能块"MB_CLIENT"的管脚参数"CONNECT"上,如下图20所示。数据类型“TCON_Configured”的各参数含义及本例中设置如下表9所示。

455655b4-8c5c-11ed-bfe3-dac502259ad0.jpg

图20. 创建“TCON_Configured”类型的CONNECT参数

表9."TCON_Configured"数据类型的参数设置

TCON_Configured结构 含义 本例为CLIENT时的设置
InterfaceID 本地接口的硬件标识符(参见图 6)。 259
ID 引用该连接(取值范围:1 到 4095)。
输入现有连接的连接 ID。
256(16#100)
ConnectionType 连接类型,对于组态连接,选择 254(十进制)。 254

1.5、仿真软件设置,如下图21所示。

455ff092-8c5c-11ed-bfe3-dac502259ad0.jpg

图21. 仿真软件连接设置

4567644e-8c5c-11ed-bfe3-dac502259ad0.jpg

图22. 参数设置

1.6、测试结果

456fe11e-8c5c-11ed-bfe3-dac502259ad0.jpg

图23. 测试结果

常见问题

1、CP1543-1可以与串口进行ModbusTCP通信吗?

如果 S7-1500 作为 Modbus TCP 客户端与 Modbus TCP 服务器通信,并且尝试访问比 Modbus TCP 服务器更低端的串行子网中的设备,那么在此情形下会有报错 "无法建立连接"。这种情况下,就要使用 "MB_CLIENT" 参数了。"MB_UNIT_ID" 参数相当于 Modbus RTU 协议中的从站地址。如果将 Modbus TCP 服务器当做 Modbus RTU 协议中的网关,那么从站设备可以通过 "MB_UNIT_ID" 参数来识别。Modbus TCP 客户端直接向Modbus TCP 服务器发送请求,而Modbus TCP 服务器通过 "MB_UNIT_ID" 参数将请求转发到从站设备。

457dde18-8c5c-11ed-bfe3-dac502259ad0.jpg

45889448-8c5c-11ed-bfe3-dac502259ad0.jpg

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通信
    +关注

    关注

    18

    文章

    5706

    浏览量

    134390
  • MODBUS
    +关注

    关注

    27

    文章

    1437

    浏览量

    75691
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1271

    浏览量

    78290
  • SIMATIC
    +关注

    关注

    1

    文章

    230

    浏览量

    15521

原文标题:Modbus TCP 通信概述

文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Modbus TCP通信报文解析

    Modbus TCP是在TCP/IP网络上运行的Modbus的实现,旨在允许Modbus ASCII/RTU协议在基于
    发表于 09-20 15:55 1.1w次阅读
    <b class='flag-5'>Modbus</b> <b class='flag-5'>TCP</b><b class='flag-5'>通信</b>报文解析

    Modbus TCPModbus RTU的实现

    使用ZLSN2040、NETCOM2040实现Modbus TCPModbus RTU的转化。1.Modbus TCP
    发表于 08-10 10:04

    组态王modbus通信用法教程modbus-rtu、modbus-tcp***康通信配置步骤

    本文详细讲解组态王modbus通信用法教程modbus-rtu、modbus-tcp***康通信配置步骤,见附件下载:
    发表于 11-18 10:55

    力控modbus通信方法modbus-tcpmodbus-rtu***康通信配置步骤

    本文结合综科智控品牌的io模块详细讲解力控modbus通信方法modbus-tcpmodbus-rtu***康通信配置步骤,见附件下载:
    发表于 11-18 15:22

    一文详解Modbus TCP通信

    使用TCP/IP和以太网在站点间传送MODBUS报文,MODBUS TCP结合了以太网物理网络和网络标准TCP/IP以及以
    发表于 12-22 16:06

    基于Modbus TCP协议实现PC机与PLC的串行通信

    本文对modbus tcp协议以及modbus tcp串行通信在智能楼宇工程中的应用作了简单介绍,重点分析研究了
    发表于 08-13 14:47 6650次阅读
    基于<b class='flag-5'>Modbus</b> <b class='flag-5'>TCP</b>协议实现PC机与PLC的串行<b class='flag-5'>通信</b>

    Modbus/TCP通讯配置

    /IP 和以太网在站点间传送MODBUS 报文,MODBUS TCP 结合了以太网物理网络和网络标准TCP/IP 以及以 MODBUS 作为
    发表于 09-30 09:13 37次下载
    <b class='flag-5'>Modbus</b>/<b class='flag-5'>TCP</b>通讯配置

    Modbus TCP通讯协议概述

    Modbus TCP通讯概述 MODBUS/TCP是简单的、中立厂商的用于管理和控制自动化设备的M
    的头像 发表于 01-04 17:51 2.9w次阅读
    <b class='flag-5'>Modbus</b> <b class='flag-5'>TCP</b>通讯协议<b class='flag-5'>概述</b>

    S7-1200 Modbus TCP通信指令块编程教程

    S7-1200 Modbus TCP通信指令块编程教程免费下载。
    发表于 03-28 16:08 10次下载

    MODBUS TCP通信功能的使用概述

    Modbus TCP是标准的网络通信协议,通过CPU上PN接口进行TCP/IP通信,不需要额外的通信
    的头像 发表于 08-03 11:16 5602次阅读

    ModBus RTU 与 ModBus TCP

    一、两个密切相关的协议:RTU 与 TCP ModBus RTU和ModBus TCP作为ModBus协议的两个主要变体,传统上,
    的头像 发表于 02-07 10:05 2330次阅读

    Modbus TCP通讯概述

    MODBUS/TCP是简单的、中立厂商的用于管理和控制自动化设备的MODBUS系列讯协议的派生产品,显而易见,它覆盖了使用TCP/IP协议的“Intranet”和“Internet”环
    的头像 发表于 04-20 09:46 2267次阅读

    S7-1200集成PN接口MODBUS TCP通信概述

    软件 STEP7 V11 SP1版本开始,S7-1200CPU 从Firmware V1.0.2开始,不再需要安装Modbus TCP的库文件,可以直接调用Modbus TCP的库指令
    的头像 发表于 10-29 17:24 4578次阅读
    S7-1200集成PN接口<b class='flag-5'>MODBUS</b> <b class='flag-5'>TCP</b><b class='flag-5'>通信</b><b class='flag-5'>概述</b>

    CCLink转Modbus TCP网关_MODBUS报文配置

    兴达易控CCLink转Modbus TCP网关是一种功能强大的设备,可实现两个不同通信协议之间的无缝对接。它能够将CCLink协议转换为Modbus
    的头像 发表于 11-15 09:05 245次阅读
    CCLink转<b class='flag-5'>Modbus</b> <b class='flag-5'>TCP</b>网关_<b class='flag-5'>MODBUS</b>报文配置

    Modbus RTU转Modbus TCP网关应用技术

    通过Modbus RTU转Modbus TCP网关,设备之间的通信更加灵活便捷,大大提高了系统的可伸缩性和可靠性。此外,Modbus RTU
    的头像 发表于 12-05 09:04 417次阅读
    <b class='flag-5'>Modbus</b> RTU转<b class='flag-5'>Modbus</b> <b class='flag-5'>TCP</b>网关应用技术