[西门子] S7 1200-Modbus TCP 示例

[复制链接]
查看87111 | 回复0 | 2024-4-8 21:46:46 | 显示全部楼层 |阅读模式
Modbus TCP 示例:

示例:MB_SERVE 多 TCP 连接

可以拥有多个 Modbus TCP 服务器连接。为此,必须为每个连接单独执行 MB_SERVER。每个连接必须使用单独的背景数据块、连接 ID 和 IP 端口。S7-1200 仅允许每个 IP 端口进行一个连接。

为了达到最佳性能,应在每个程序周期为各个连接执行 MB_SERVER。CONNECT 参数使用系统数据类型 TCON_IP_V4。这些数据结构的相关示例位于名为“Modbus 连接”的数据块中。“Modbus 连接”数据块包含两个 TCON_IP_V4 结构:“TCPpassive_1”(针对连接 1)和“TCP_passive_2”(针对连接 2)。程序段注释中描述的连接属性 ID 和 LocalPort 为存储在 CONNECT 数据结构中的数据元素。TCON_IP_V4 CONNECT 数据同时包含 RemoteAddress ADDR 数组中的 IP 地址。TCPpassive_1 和 TCP_passive_2 内的 IP 地址分配对建立 TCP 服务器连接没有影响,但是会决定哪些 Modbus TCP 客户端可通过与各 MB_SERVER 连接进行通信。MB_SERVER 被动侦听 modbus 客户端消息,并将进入消息的 IP 地址与存储在相应 RemoteAddress ADDR 数组中的 IP 地址进行比较。

两个 MB_SERVER 指令可使用以下三种 MB_SERVER IP 地址变量:

● IP 地址 = 0.0.0.0

各 MB_SERVER 将响应使用任意 IP 地址的所有 Modbus TCP 客户端。

● IP 地址 = TCPpassive_1 和 TCPpassive_2 中的 IP 地址相同

两个 MB_SERVER 连接仅响应来自该 IP 地址的 Modbus 客户端。

● IP 地址 = TCP_passive_1 和 TCP_passive_2 中的 IP 号不同

各 MB_SERVER 仅响应来自其 TCON_IP_V4 数据中存储的 IP 地址的 Modbus 客户端。程序段 1:连接 #1,背景 DB =“MB_SERVER_DB”、“Modbus connections.TCPpassive_1”内(ID = 1 且 LocalPort = 502)



程序段 2:连接 #2,背景 DB =“MB_SERVER_DB_1”、“Modbus connections.TCPpassive_2”内(ID = 2 且 LocalPort = 503)



示例:MB_CLIENT 1:通过公共 TCP 连接发送多个请求

多个 Modbus 客户端请求可通过同一连接发送。为此,必须使用相同的背景数据块、连接 ID 和端口号。

因为两个 MB_CLIENT 框使用相同的 CONNECT 参数 TCON_IP_v4 数据结构 "Modbus_connections".TCPactive_1),因此连接 ID、端口号和 IP 地址均相同。CONNECT IP 地址数据分配目标 Modbus TCP 服务器的 IP 地址。

在任意给定时间内,只能有一个 MB_CLIENT 处于激活状态。一个客户端完成执行后,下一个客户端才能开始执行。由程序逻辑负责执行顺序逻辑。本示例所示为两个客户端从单个 Modbus 客户端读取远程数据并将数据传送至 Modbus 客户端 CPU(从 M1000.0 起始的M 存储器)。并捕获返回的错误(可选)。

程序段 1:Modbus 功能 1 - 从使用“Modbus 连接”.TCPactive_1 中所分配的 IP 地址的 Modbus TCP 服务器中读取 16 位输出位。



程序段 2:Modbus 功能 2 - 从使用“Modbus 连接”.TCPactive_1 中所分配的 IP 地址的 Modbus TCP 服务器中读取 32 位输入位。



示例:MB_CLIENT 3:输出映像写入请求

本示例所示为 Modbus 客户端请求将位数据从本地 CPU 存储区(起始地址为 M1000.0)传送至远程 Modbus TCP 服务器。

程序段 1:Modbus 功能 15 - 在 Modbus 服务器中写入输出位



示例:MB_CLIENT 4:协调多个请求

必须确保各个 Modbus TCP 请求都完成执行。必须由程序逻辑来控制执行顺序。下面的示例显示了首个和第二个客户端请求输出如何控制执行顺序。

该示例所示为两个客户端使用同一 CONNECT 连接数据(不同时使用)。客户端将保持寄存器数据从同一远程 Modbus TCP 服务器传送至同一本地 CPU 存储区 M 地址。此外,还捕获了返回的错误,这是可选的。

程序段 1:Modbus 功能 3 - 读取 Modbus TCP 服务器保持寄存器字



程序段 2:Modbus 功能 3 - 读取 Modbus TCP 服务器保持寄存器字



------------------------------END-----------------------



每天进步一点点

Make small but daily progress

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则