广东湘恒智能科技有限公司
主营产品: 西门子PLC代理商,plc变频器,伺服电机,人机界面,触摸屏,线缆,DP接头
西门子S7-1200 Modbus-TCP 通信案例
发布时间:2024-11-26

一、 组网概述 

本文以 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 通信口主要支持以下通信协议及服务

Profinet IO (V2.0 开始)

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

TCP

ISO on TCP

UDP(V2.0 开始)

Modbus TCP

HMI 通信

Web 通信(V2.0 开始)。

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

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


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

3 个连接用于操作面板

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

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

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

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

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

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

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 通信路径,所支持的混合客户机和服务器连接数最大为 CPU 所允许的最大开放式用户通信连接数 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 用于初始标志位。


展开全文
拨打电话 微信咨询 发送询价