只需一步,快速开始
微信扫码登录
图1. Modbus 报文帧 表1.报文头MBAP内容解释事务处理标识(2Bytes)可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文。协议标识符(2Bytes)00 00表示ModbusTCP协议。长度(2Bytes)表示接下来的数据长度,单位为字节。单元标识符(1Byte)可以理解为设备地址。
从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客户端的请求并发送响应消息。 图2. 通信指令
软件: TIA V16 Professional Modbus Poll Modbus Slave 硬件: CPU 1511-1 PN V2.8 CP 1543-1 V2.2
TIA V16 Professional Modbus Poll Modbus Slave
CPU 1511-1 PN V2.8 CP 1543-1 V2.2
1.1、打开 TIA Portal V16软件,新建一个项目命名为 "ModbusTCP",在项目中添加 CPU1511-1PN V2.8 及CP1543-1 V2.2,为CP1543-1以太网接口新建一个子网并设置 IP地址为 "192.168.0.3",如下图 3 所示。 图3. 分配IP地址 1.2、在 CPU1511-1PN的 OB1组织块中添加Modbus TCP Server功能块 "MB_SERVER",软件将提示会为该 FB块增加一个背景数据块,本例中为 DB1"MB_SERVER_DB",如下图4所示。接下来为指令块分配引脚,各引脚的具体含义如下表 2 所示。 图4. 指令创建 1.3、保持性寄存器存储区与"MB_SERVER"管脚参数"MB_HOLD_REG"进行映射,对于线圈、离散输入、输入寄存器等通过功能块均已经与 S7-1500的过程映像区进行了映射,其映射地址对应如表 3 所示。 表3.CPU的Modbus地址映射表Modbus功能S7-1500 CPU功能码功能数据区地址空间数据区CPU地址01读取:位Output1~9999过程映像输出 Q0.0~Q1249.6 02读取:位Input10001~19999过程映像输入I0.0~I1249.603读取:Word保持性寄存器40001~49999 400001~465535全局数据(DB、过程映像、M区)与指令引脚MB_HOLD_REG关联04读取:WordInput30001~39999过程映像输入IW0~IW1999605写入:位Output1~9999过程映像输出Q0.0~Q1249.606写入:Word保持性寄存器40001~49999 400001~465535全局数据(DB、过程映像、M区)与指令引脚MB_HOLD_REG关联15写入:位Output1~9999过程映像输出Q0.0~Q1249.616写入: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所示。 图5. 创建“TCON_IP_V4”类型的CONNECT参数 表4."TCON_IP_V4"数据类型的参数设置TCON_IP_v4结构 含义 本例为 SERVER时的设置 InterfaceID 本地接口的硬件标识符(参见图 6)。 259ID 引用该连接(取值范围:1 到 4095)。 该参数将唯一确定 CPU 中的连接。指令 "MB_SERVER"的每个实例必须使用唯一的 ID。该 ID 还不得被不同通信类型的其他指令同时使用。 1ConnectionType 连接类型,对于 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 图6. 硬件接口标识符 (2)通过"网络视图"创建TCP连接后,再使用TCON_Configured结构创建连接参数。 在"网络视图"窗口,左上侧选择"连接"按钮,选择”TCP连接“,然后在CPU上点击鼠标"右键"并选择"添加新连接"。如下图7所示。 图7. 添加新连接 在"添加新连接"窗口中,"类型"选择为"TCP连接",伙伴选择"未指定",本地接口选择"CP1543-1,以太网接口_1[X1]",分配本地连接ID,服务器为被动连接,点击 "添加"创建TCP 连接,如下图8所示。 图8. 创建TCP连接 "TCP_连接_1"为建立的连接,选中该连接,在属性的"地址详细信息"中可以设置该TCP 连接的相关信息,如下图9所示。 图9. TCP连接参数设置 添加一个全局数据块用于匹配功能块"MB_SERVER"的管脚"CONNECT",本例中为数据块DB2(块名称:MB_CONNECT),打开该数据块,创建变量 "MB_Server",手动在数据类型框中输入"TCON_Configured",并将该变量关联到功能块"MB_SERVER"的管脚参数"CONNECT"上,如下图10所示。数据类型“TCON_Configured”的各参数含义及本例中设置如下表5所示。 图10. 创建“TCON_Configured”类型的CONNECT参数 表5."TCON_Configured"数据类型的参数设置TCON_Configured结构 含义 本例为 SERVER时的设置 InterfaceID 本地接口的硬件标识符(参见图 6)。 259ID 引用该连接(取值范围:1 到 4095)。 ID 在 CPU 范围内必须是唯一的。ID 还不得被不同通信类型的其他指令同时使用。输入现有连接的连接 ID。 256(16#100)ConnectionType 连接类型,对于组态连接,选择 254(十进制)。 254 1.5、仿真软件设置,如下图11所示。 图11. 仿真软件连接设置 1.6、测试结果 图12. 测试结果
2.1、打开 TIA Portal V16软件,新建一个项目命名为 "ModbusTCP",在项目中添加 CPU1511-1PN V2.8 及CP1543-1 V2.2,为CP1543-1以太网接口新建一个子网并设置 IP地址为 "192.168.0.3",如上图 13 所示。 图13. 分配IP地址 2.2、在 CPU1511-1PN 的 OB1组织块中添加Modbus TCP Client功能块 "MB_CLIENT",软件将提示会为该 FB块增加一个背景数据块,本例中为 DB1"MB_CLIENT_DB",如下图14所示。接下来为指令块分配引脚,各引脚的具体含义如下表 6 所示。 图14. 指令创建 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 包含要读/写的值的数量。 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所示。 图15. 创建“TCON_IP_V4”类型的CONNECT参数 表8."TCON_IP_V4"数据类型的参数设置TCON_IP_v4结构 含义 本例为 SERVER时的设置 InterfaceID 本地接口的硬件标识符(参见图 16)。 259ID 引用该连接(取值范围:1 到 4095)。 该参数将唯一确定 CPU 中的连接。指令 "MB_CLIENT"的每个实例必须使用唯一的 ID。 1ConnectionType 连接类型,对于 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 图16. 硬件接口标识符 (2)通过"网络视图"创建TCP连接后,再使用TCON_Configured结构创建连接参数。 在"网络视图"窗口,左上侧选择"连接"按钮,选择”TCP连接“,然后在CPU上点击鼠标"右键"并选择"添加新连接"。如下图17所示。 图17. 添加新连接 在"添加新连接"窗口中,"类型"选择为"TCP连接",伙伴选择"未指定",本地接口选择"CP1543-1,以太网接口_1[X1]",分配本地连接ID,服务器为被动连接,点击 "添加"创建TCP 连接,如下图18所示。 图18. 创建TCP连接 "TCP_连接_2"为建立的连接,选中该连接,在属性的"地址详细信息"中可以设置该TCP 连接的相关信息,如下图19所示。 图19. TCP连接参数设置 添加一个全局数据块用于匹配功能块"MB_CLIENT"的管脚"CONNECT",本例中为数据块DB2(块名称:MB_CONNECT),打开该数据块,创建变量 "MB_CLIENT",手动在数据类型框中输入"TCON_Configured",并将该变量关联到功能块"MB_CLIENT"的管脚参数"CONNECT"上,如下图20所示。数据类型“TCON_Configured”的各参数含义及本例中设置如下表9所示。 图20. 创建“TCON_Configured”类型的CONNECT参数 表9."TCON_Configured"数据类型的参数设置TCON_Configured结构 含义 本例为CLIENT时的设置 InterfaceID 本地接口的硬件标识符(参见图 6)。 259ID 引用该连接(取值范围:1 到 4095)。 输入现有连接的连接 ID。 256(16#100)ConnectionType 连接类型,对于组态连接,选择 254(十进制)。 254 1.5、仿真软件设置,如下图21所示。 图21. 仿真软件连接设置 图22. 参数设置 1.6、测试结果 图23. 测试结果
图13. 分配IP地址
图18. 创建TCP连接
图21. 仿真软件连接设置
如果 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" 参数将请求转发到从站设备。
您需要 登录 才可以下载或查看,没有账号?注册哦
举报
本版积分规则 发表回复 回帖后跳转到最后一页