加入收藏 在线留言 联系我们
关注微信
手机扫一扫 立刻联系商家
全国服务热线15915421161
公司新闻
西门子S7-1200 Modbus-TCP 通信案例
发布时间: 2024-04-30 11:32 更新时间: 2024-11-26 07:00
一、 组网概述 

本文以 ZKA-4488-ETH 为例介绍西门子PLC与IO设备进行Modbus通讯的步骤设置。ZKA-4488-ETH 是 8 路数字量输入(DI),8 路数字量输出(DO),4 路模拟量输入(AI,0/4-20mA),4路模拟量输出设备(AO,0/4- 20mA),以太网通信。

以 ZKA-4488-ETH 为例,出厂默认通讯参数如下:ZK模块 IP 为:192.168.0.105

TCP 端口为:10001

(注意:我们模块出厂时默认端口为10001,客户也可以通过ZK模块的配置文件把ZK通讯端口改成modbus-tcp的默认端口502)工作模式为:服务器模式二、 S7-200 Modbus TCP 通信 1 、S7-200 Modbus TCP 通信简介Modbus 是公开通信协议,详细的协议和规范,请访问 Modbus 组织的网站:http://www.modbus.org/S7-1200 CPU 本体上集成了一个 PROFINET 通信口,支持以太网和基于 TCP/IP 和 UDP 的通信标准。这个 PROFINET 物理接口是支持10/100Mb/s 的 RJ45 口,支持电缆交叉自适应, 因此一个标准的或是交叉的以太网线都可以用于这个接口。使用这个通信口可以实现 S7-1200 CPU 与编程设备的通信,与 HMI 触摸屏的通信,以及与其它 CPU 之间的通信,S7-1200 CPU 的 PROFINET 通信口主要支持以下通信协议及服务

  1. Profinet IO (V2.0 开始)

  2. S7 通信 (V2.0 开始支持客户端)

  3. TCP

  4. ISO on TCP

  5. UDP(V2.0 开始)

  6. Modbus TCP

  7. HMI 通信

  8. Web 通信(V2.0 开始)。

硬件版本 V4.1 支持的协议和Zui大的连接资源:S7-1200 的连接资源分配给每个类别的预留连接资源数为固定值;您无法更改这些值。但可组态 6个"可用自由连接"以按照应用要求增加任意类别的连接数。

示例 1: 1 个 PG 具有 3 个可用连接资源。根据当前使用的 PG 功能,该 PG 实际可能使用其可用连接资源的 1、2 或 3。在 S7-1200 中,始终保证至少有 1 个 PG,但不允许超过 1 个 PG。在 CPU 属性>常规>连接资源显示:


硬件版本 V3.0 支持的协议和Zui大的连接资源:

  1. 3 个连接用于操作面板

  2. 1 个连接用于编程设备(PG)与 CPU 的通信

  3. 8 个连接用于Open IE ( TCP, ISO on TCP, UDP) 的编程通信,使用 T-block 指令来实现

  4. 3 个连接用于 S7 通信的服务器端连接,可以实现与 S7-200,S7-300 以及 S7-400 的以太网S7 通信

  5. 8 个连接用于 S7 通信的客户端连接,可以实现与 S7-200,S7-300 以及 S7-400 的以太网 S7通信

连接数是固定不变的,不能自定义。 注意:建立被动的 TCP 、ISO on TCP 和 UDP 的连接时,建议使用端口范围: 2000~5000。一些端口号和 TSAP 号是受到限制不能被使用的。下列端口号和 TSAP 号不能使用:

  1. ISO TSAP (passive): 01.00, 01.01, 02.00, 02.01, 03.00, 03.01

  2. TCP/UDP port (passive): 20, 21, 25, 80, 102, 135, 161, 34962 … 34964,53, 80, 162, 443,520, 9001

2 、Modbus TCP 指令库S7-1200集成PN接口MODBUS TCP通信概述Modbus TCP 是标准的网络通信协议,通过 CPU 上 PN 接口进行 TCP/IP 通信,不需要额外的通信硬件模块,Modbus TCP 使用开放式用户通信连接作为 Modbus 通信路径,所支持的混合客户机和服务器连接数Zui大为 CPU 所允许的Zui大开放式用户通信连接数 8 个。软件 STEP7 V11 SP1 版本开始,S7-1200CPU 从 Firmware V1.0.2 开始,不再需要安装Modbus TCP 的库文件,可以直接调用 Modbus TCP 的库指令“MB_CLIENT”和“MB_SERVER”使用实现 Modbus TCP 通信功能,如图 1 所示。

图 1. Modbus TCP 的库指令 3、Modbus TCP 功能编程S7-1200 做Modbus Tcp Client(客户端)MB_CLIENT 进行客户机和服务器 TCP 连接、发送命令消息、接收响应以及控制服务器的断开。1. 调用 MB_CLIENT 通信指令,进入 “Program blocks” > “OB1” 主程序中,调用 MODBUS TCP 客户机指令,如图 2 所示。

图 2. MB_CLIENT 通信指令功能块参数意义如下表 1.

表 1. 功能块参数意义2、MB_DATA_PTR 数据块的新建通过“Program blocks”>“Add new block”,选择“Data block”创建 DB 块,选择“标准与 S7- 300/400 兼容” ,点击“OK”键,定义数据区为 100 个字的数组,如图 3 所示。

图 3. 创建 MB_DATA_PTR 数据块3、MB_MODE、MB_DATA_ADDR 和功能码的关系MB_CLIENT 指令中,MB_MODE、MB_DATA_ADDR 和 MB_DATA_LEN 三个参数组合定义了当前 Modbus 消息中所用的功能代码,如表 2.。

表 2. MB_MODE、MB_DATA_ADDR 和功能码的关系如上例中 S7-1200 作客户机,用 FC04 功能码读取 ZKA-4488-ETH 的模拟输入 AI1 通道的读数的两个字,起始从 Modbus 地址 30001 开始,接收的数据存放在缓冲区 DB3.DBX0.0 开始区域,设置如上:MB_MODE=0,MB_DATA_ADDR=30001,MB_DATA_LEN=2,对应关系为:30001->DB3.DBW0 ,30002->DB3.DBW2。注意:Slave ID 是 ZKA-4488-ETH 的站地址,和客户机中“MB_CLIENT” 中的“CONNECT_ID” 不是一个概念,实际上与客户机中“MB_CLIENT”的背景数据块中的 STAT 变量“MB_UNIT_ID”需要一致,在 1200 中该地址默认为 16#00FF,实际使用时可以改成 1,即:与 ZKA-4488-ETH 配置文件中的站号保持一致,当 S7-1200 挂接了多个 ZKA-4488-ETH 时,该值可以按序编号,也可以都使用值 1,因为 modbus-tcp 依然可以根据指向的 IP地址发送数据。

图 7. 客户机中“MB_CLIENT”的背景数据块中的 STAT 变量“MB_UNIT_ID”4. 通讯测试S7-1200 作客户机,用 FC04 功能码读取 ZKA-4488-ETH 的两个字,设置客户机和 ZKA-4488-ETH 的功能、起始地址、端口等参数相对应,具体设置如上,设置 M5.0 和 M0.0 为 1, 触发请求,如图 8 所示。

图 8. S7-1200 作客户机,用 FC04 功能码读取服务器的两个字通讯结果如图 9 所示,从服务器读到数据 00,11 到客户机的 DB3.DBW0 和 DB3.DBW2 区域。

图 9. 通讯结果
6、 MB_CLIENT 参数 STATUS 错误代码查询参考下面两个列表 3.和表 4.。

表 3. 协议错误代码

表 4. 参数错误代码除了上面列出的 MB_CLIENT 错误外,也可以从底层传输通信指令(TCON、TDISCON、TSEND和 TRCV)返回错误,参考相应指令的错误代码。4 、Modbus TCP 常问问题MB_CLIENT 指令的背景数据块中的 "MB_Unit_ID" 有什么功能?注意:Slave ID 是 ZKA-4488-ETH 的站地址,和客户机中“MB_CLIENT” 中的“CONNECT_ID” 不是一个概念,实际上与客户机中“MB_CLIENT”的背景数据块中的 STAT 变量“MB_UNIT_ID”需要一致,在 1200 中该地址默认为 16#00FF,实际使用时可以改成 1, 即:与 ZKA-4488-ETH 配置文件中的站号保持一致,当 S7-1200 挂接了多个 ZKA-4488-ETH 时,该值可以按序编号,也可以都使用值 1,因为 modbus-tcp 依然可以根据指向的 IP地址发送数据:

图 11. MB_Unit_ID
S7-1200 MODBUS TCP 通信多请求处理怎么做? 单独的客户机连接需要遵循的规则1. 每个“MB_CLIENT”连接需要使用一个不同的背景数据块;2. 每个“MB_CLIENT”连接必须指定一个服务器 IP 地址;3. 每个“MB_CLIENT”连接必须指定一个唯一的连接 ID;4. 是否需要唯一的 IP 端口号取决于服务器组态;连接 ID 和背景数据块组合成对,对每个连接来说,组合对都是唯一的。对于多请求处理,有两种方法:方法一:如果 TCP 连接充裕,可以建立多个不同的连接发送请求,即每个请求使用一个独立的连接,调用独立的“MB_CLIENT”功能块,具体操作参考“Modbus TCP”部分。通过不同的连接发送多个请求,“MB_CLIENT”功能块多次调用,但是需要使用不同的背景数据块,不同的 ID 号和不同的端口号。方法二:通过公共的连接发送多个请求。通过公共的连接发送多个请求,“MB_CLIENT”功能块多次调用,但是需要使用相同的背景数据块,连接 ID 号,IP 地址和端口号。在任意时间,只能有一个 MB_CLIENT 请求处于激活状态,在一个请求完成执行后,下一个请求再开始执行,轮循处理。在此,我们以方法二为例,介绍 S7-1200 如何通过分次请求获取 ZKA-4488-ETH 内部寄存器的数据:1. S7-1200 的IP 地址 192.168.1.218,将系统存储器字节设置为 MB1,如图 1 所示,图 2 所示。

图 1 IP 地址设置

图 2 系统存储器字节设置1、新建数据块,访问指向 ZKA-4488-ETH 的 IP 地址和端口号如图 6 所示,新建 DB,添加变量类型为 TCON_IP_V4,设置 InterfaceId,ID,ActiveEstablished,RemoteAddress,RemotePort 等参数,具体含义参见链接。

图 6 设置连接变量如图 7 所示,在 DB 中建立结构数组,用于轮询控制位以及数据,其中元素 0 用于第一次读取,元素 1用于第二次读取。Init 用于初始标志位。


联系方式

  • 电  话:15903418770
  • 联系人:张经理
  • 手  机:15915421161
  • 微  信:15915421161