Modbus TCP编程实例

2019年1月7日18:05:08 发表评论 705 阅读

示例: MB_SERVE  TCP 连接

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

为了达到最佳性能,应在每个程序周期为各个连接执行 MB_SERVER。 CONNECT 参数使用系统数据类型 TCP_IP_v4。这些数据结构的相关示例位于名为“Modbus 连接”的 DB 中。 “Modbus 连接” DB

包含两个 TCP_IP_v4 结构“TCPpassive_1”(针对连接 1)和“TCP_passive_2”(针对连接 2)。程序段注释中描述的连接属性 ID 和 LocalPort 为存储在 CONNECT 数据结构中的数据元素。

TCP_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 仅响应来自其 TCP_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 连接”.TCPpassive_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 2: 通过不同的 TCP 连接发送多个请求

Modbus TCP 客户端的请求可通过各种不同连接来发送。 为此,必须使用不同的背景 DB和连接 ID。

如要与同一 Modbus 服务器建立连接,则 RemotePort(IP 端口)号必须不同。 如果与不同服务器建立连接,则对 IP 端口号没有限制。

本示例所示为两个 Modbus TCP 户端将来自两个不同 Modbus TCP 服务器的远程数据传送至同一本地 CPU 存储区(起始地址为 M1000.0),并捕获返回的错误(可选)。

程序段 1: Modbus 功能 4 - 从 Modbus TCP 服务器读取输入过程映像字 CONNECT 参数 =“Modbus 连接”.TCPactive_1: 连接 ID = 1,RemoteAddress = 192.168.2.241,RemotePort  = 502

程序段 2: Modbus 功能 3 - 从 Modbus TCP 服务器读取保持寄存器字 CONNECT 参数 =“Modbus 连接”.TCPactive_2: 连接 ID = 2,RemoteAddress = 192.168.2.242,RemotePort  = 502

示例: 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 服务器保持寄存器字

weinxin
plc入门知识问答
所有PLC工程师都会关注的微信公众账号,只需输入您的问题,就会有答案

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: