如何编程通讯块 FB67“TUSEND”,FB68 “TURCV”,FB65“TCON”和 FB66“TDISCON”以实现用 CPU 集成的PROFINET口进行基于 UDP 协议的数据交换?

描述
可以通过 CPU 集成的工业以太网接口使用PROFINET的开放式通信进行数据交换。下列协议支持开放式通信:

  • TCP
  • ISO-on-TCP
  • UDP

下列通信块可以用于基于 UDP 协议的开放式通信:

  • FB65 "TCON" 用于建立 UDP端点
  • FB66 "TDISCON" 用于断开 UDP端点
  • FB67 "TUSEND" 用于发送数据
  • FB68 "TURCV" 用于接收数据

这些通信块可以在 Standard Library -> Communication Blocks 下找到。
从标准程序库中拷贝最新的上述功能块至用户程序中,然后在编程时调用。
用于连接 UDP 端点的参数保存在一个数据结构中。本例中,用到 "OUCW_2" 这个数据结构,它是由用户来完成参数化的。 这个结构存储在DB1数据块中并被用户参数化。

注意

  • 使用“开放式通讯向导”可以简单快速建立与 UDP 端点的连接。向导可以在条目号:98957840 中下载。
  • 这里的UDP连接在NetPro中建立。

表01展示了用于建立 UDP 端点的 "OUCW_2" 数据结构中的参数。

字节 参数 数据类型 描述
0到 1 block_length WORD "OUCW_2" 数据结构的长度
2到 3 id BYTE 用户程序和操作系统通讯层之间的连接标识号
数值范围: w#16#0001到 w#16#0FFF
必须在相关块中指定参数 ID 的值。
4 coection_type BYTE UDP 协议数值: B#16#13
5 active_est BOOL 如何建立相应 ID 的连接
必须将FALSE赋值给参数
6 local_device_id BYTE 通过集成 CPU 的 PN 接口通信。 CPU 315-2 PN/DP: B#16#02
7 local_tsap_id_len BYTE local_tsap_id 参数长度: 2 字节
8 rem_subnet_id_len BYTE 当前未使用,分配为 B#16#00.
9 rem_staddr_len BYTE 当前未使用,分配为 B#16#00.
10 rem_tsap_id_len BYTE 当前未使用,分配为 B#16#00.
11 ext_staddr_len BYTE 当前未使用,分配为 B#16#00.
12到 27 local_tsap_id ARRAY
[1 ..16] of BYTE

t本地端口号。

例如: 2000
local_tsap_id[1] = B#16#7 (以十六进制表示的端口号的高字节)
local_tsap_id[2] = B#16#D0 以十六进制表示的端口号的低字节)
local_tsap_id[3-16] = B#16#00

28到 33 rem_subnet_id ARRAY
[1 ..6] of BYTE
当前未使用,分配为 B#16#00.
34到 39 rem_staddr ARRAY
[1 ..6] of BYTE
当前未使用,分配为 B#16#00.
40到 55 rem_tsap_id ARRAY
[1 ..16] of BYTE
当前未使用,分配为 B#16#00.
56到 61 ext_staddr ARRAY
[1 ..6] of BYTE
当前未使用,分配为 B#16#00.
62到 63 spare WORD 当前未使用,分配为 B#16#00.

表 01

例程描述
S7 程序中包括 FB65 "TCON" 的调用及带有 UDP 连接端点参数的数据结构 "OUCW_2"。S7 程序中也包含了来自于 Standard Library -> Communication Blocks 下的 FB67 "TUSEND"和 FB68 "TURCV" 的调用. The FB67 "TUSEND" 用于发送数据到 S7 站, 以及到 PC 站或到第三方系统. FB68 "TURCV" 用于接收来自其他 S7 站、PC 站和第三方系统的数据。

首先为 S7-300 站创建硬件组态。注意配置 MB100 作为时钟存储器.发送请求由该时钟存储器触发。保存编译 S7-300 站的硬件组态,下载到 CPU。

STEP 7 程序包含程序块 OB100, OB1, FB1, DB11, DB1, DB100, DB200及 FB63, FB64, FB67和 FB68。

OB100
OB100 是重启 OB 块,当 CPU 重新启动时(暖启动)执行一次.在 OB100 中,第一次通信由 M0.3 触发。

OB1
OB1 循环调用。 FB1 在 OB1 中被调用 (背景数据块: DB11) , M0.3 作为 INIT_COM 参数, M10.0 作为 ABORT参数。 在OB1中,FB1调用后复位M0.3。
如何编程通讯块 FB67“TUSEND”,FB68 “TURCV”,FB65“TCON”和 FB66“TDISCON”以实现用 CPU 集成的PROFINET口进行基于 UDP 协议的数据交换?
图. 01

FB1
FB1 在 OB1 中循环调用。下列功能块在FB1中调用。

  • FB65 "TCON"
  • FB67 "TUSEND"
  • FB68 "TURCV"
  • FB66 "TDISCON"

定义连接号
可以独立改变连接号。根据配置在FB1的 程序段2改变连接号。
连接号是在背景数据块 DB11中以静态变量保存。
例程中连接号定义为3。

如何编程通讯块 FB67“TUSEND”,FB68 “TURCV”,FB65“TCON”和 FB66“TDISCON”以实现用 CPU 集成的PROFINET口进行基于 UDP 协议的数据交换?
图. 02

建立连接
UDP 端点的连接由 FB65 "TCON" 参数 "REQ" 的上升沿触发。本地 UDP 端点参数的数据结构"OUCW_2" 包含在数据块 DB1中。 通过 FB65 "TCON" 的输入参数 "CONNECT" ,本地 UDP 端点参数的存储区被分配。
本地 UDP 端点连接由系统启动开始建立,一直保持到执行FB66 "TDISCON" 断开连接或 CPU 进入 STOP 模式、电源关闭。

如何编程通讯块 FB67“TUSEND”,FB68 “TURCV”,FB65“TCON”和 FB66“TDISCON”以实现用 CPU 集成的PROFINET口进行基于 UDP 协议的数据交换?
图. 03

发送作业由 FB67 "TUSEND" 输入参数 "REQ" 的上升沿触发。发送请求由时钟脉冲 M100.6 和 变量 "SEND_BUSY" 控制。如果发送请求存在, "SEND_BUSY"被置位。此时不能触发一个新的发送请求。
要发送数据区域填写在输入参数 "DATA"。
要发送数据字节数填写在输入参数"LEN"。
例子中发送数据保存在 DB100 。 100 字节的数据发送到通讯伙伴。
在输入参数 "ADDR"填写接收数据端的 IP 地址的存储区。例程中,通讯伙伴的地址参数存储在数据块 DB1 的数据结构 "OUCW_3"。
输出参数"DONE"、 "ERROR"和 "STATUS" 用于作业执行评估。

如何编程通讯块 FB67“TUSEND”,FB68 “TURCV”,FB65“TCON”和 FB66“TDISCON”以实现用 CPU 集成的PROFINET口进行基于 UDP 协议的数据交换?
图. 04

表 02 展示了存储伙伴通讯地址的数据结构 "OUCW_3" 。

字节 参数 数据类型 描述
0 to 3 rem_ip_addr ARRAY
[1 .. 4] of BYTE
远端伙伴的IP地址,例如 192.168.0.30
rem_ip_addr[1] = B#16#C0
rem_ip_addr[2] = B#16#A8
rem_ip_addr[3] = B#16#00
rem_ip_addr[4] = B#16#1E
4 to 5 rem_port_nr ARRAY
[1 .. 2] of BYTE
远程伙伴的端口号,例如:2000
local_tsap_id[1] = B#16#7 (以十六进制表示的端口号的高字节)
local_tsap_id[2] = B#16#D0 以十六进制表示的端口号的低字节)
6 bis 7 spare ARRAY
[1 .. 2] of BYTE
保留,参数值为 W#16#0000.

表 02

如发送请求顺利完成,"SEND_BUSY" 被复位。一个新的任务可以被触发 。
如发送请求出现错误,"SEND_BUSY"也被复位,同时可对FB67的输出参数"STATUS"进行错误分析。

如何编程通讯块 FB67“TUSEND”,FB68 “TURCV”,FB65“TCON”和 FB66“TDISCON”以实现用 CPU 集成的PROFINET口进行基于 UDP 协议的数据交换?
图. 05

如何编程通讯块 FB67“TUSEND”,FB68 “TURCV”,FB65“TCON”和 FB66“TDISCON”以实现用 CPU 集成的PROFINET口进行基于 UDP 协议的数据交换?
图. 06

UDP端点连接好后就可以收到数据。
通过输入参数"DATA",可以指定接收数据区地址和长度。
例子中100 字节的接收数据存储到 DB200。
在输入参数 "ADDR"填写接收数据端的 IP 地址的存储区。例程中,通讯伙伴的地址参数存储在数据块 DB1 的数据结构 "OUCW_3"。表02展示了 "OUCW_3"数据结构。

如何编程通讯块 FB67“TUSEND”,FB68 “TURCV”,FB65“TCON”和 FB66“TDISCON”以实现用 CPU 集成的PROFINET口进行基于 UDP 协议的数据交换?
图. 07

输出参数 "NDR" 用于表示已接收到新数据。输出参数 RCVD_LEN 表明接收数据的长度。
如果接收数据成功,输出参数“RCVD_LEN”的值被存储。

如何编程通讯块 FB67“TUSEND”,FB68 “TURCV”,FB65“TCON”和 FB66“TDISCON”以实现用 CPU 集成的PROFINET口进行基于 UDP 协议的数据交换?
图. 08

如果接收数据不成功,输出参数 “STATUS”的值被储存和评价。

如何编程通讯块 FB67“TUSEND”,FB68 “TURCV”,FB65“TCON”和 FB66“TDISCON”以实现用 CPU 集成的PROFINET口进行基于 UDP 协议的数据交换?
图. 09

可以调用 FB66 “TDISCON”断开 UDP 本地端点的连接。通过在 FB66 “TDISCON”的输入参数“REQ” 上升沿触发断开本地端点连接。

如何编程通讯块 FB67“TUSEND”,FB68 “TURCV”,FB65“TCON”和 FB66“TDISCON”以实现用 CPU 集成的PROFINET口进行基于 UDP 协议的数据交换?
图. 10

下载 STEP 7 项目:
STEP 7 项目包含一个例程,它调用 FB1 以及功能块FB65 "TCON", FB66 "TDISCON", FB67 "TUSEND"、 FB68 "TURCV"做状态评估。使用 STEP 7 V5.5 SP3 创建。

如何编程通讯块 FB67“TUSEND”,FB68 “TURCV”,FB65“TCON”和 FB66“TDISCON”以实现用 CPU 集成的PROFINET口进行基于 UDP 协议的数据交换?Registrierung notwendig sample_open_udp.zip (294,6 KB)

配置额外UDP 连接:
要配置额外的UDP 端点,可以复制FB1为其他功能块(例如FB101)。改变参数并生成新的背景数据块 。使用开放式通讯向导可以创建一个存储新UDP端点参数的数据结构。

补充信息:

  • 关于基于工业以太网的开放式通信的详细内容请参见条目:44240604 中的名为 "System and Standard Functions for S7-300/400 Volume 1 and Volume 2" 的手册。
  • 经S7-300和 S7-400 工业以太网CP模块通信组态UDP连接的说明请参见条目:47885893

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc324342.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日
下一篇 2021年4月12日

相关推荐

发表回复

登录后才能评论