- {{item.name}}
如何编写通讯块 FB67“TUSEND”,FB68 “TURCV”,FB65“TCON”和 FB66“TDISCON”实现用 CPU 集成的工业以太网接口进行基于 UDP 协议的数据传输?
- 0
- 489
- 8982
描述
可以通过 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 | connection_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 | next_staddr_len | BYTE | 当前未使用,分配为 B#16#00. |
12 到 27 | local_tsap_id | ARRAY [1 ..16] of BYTE | 本地端口号。例如: 2000local_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 | next_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。
图. 01
FB1
FB1 在 OB1 中循环调用。下列功能块在FB1中调用。
- FB65 "TCON"
- FB67 "TUSEND"
- FB68 "TURCV"
- FB66 "TDISCON"
定义连接号
可以独立改变连接号。根据配置在FB1的 程序段2改变连接号。
连接号是在背景数据块 DB11中以静态变量保存。
例程中连接号定义为3。
图. 02
建立连接
UDP 端点的连接由 FB65 "TCON" 参数 "REQ" 的上升沿触发。本地 UDP 端点参数的数据结构 "OUCW_2" 包含在数据块 DB1中。 通过 FB65 "TCON" 的输入参数 "CONNECT" ,本地 UDP 端点参数的存储区被分配。
本地 UDP 端点连接由系统启动开始建立,一直保持到执行FB66 "TDISCON" 断开连接或 CPU 进入 STOP 模式、电源关闭。
图. 03
发送作业由 FB67 "TUSEND" 输入参数 "REQ" 的上升沿触发。发送请求由时钟脉冲 M100.6 和 变量 "SEND_BUSY" 控制。如果发送请求存在, "SEND_BUSY" 被置位。此时不能触发一个新的发送请求。
要发送数据区域填写在输入参数 "DATA"。
要发送数据字节数填写在输入参数 "LEN"。
例子中发送数据保存在 DB100 。 100 字节的数据发送到通讯伙伴。
在输入参数 "ADDR" 填写接收数据端的 IP 地址的存储区。例程中,通讯伙伴的地址参数存储在数据块 DB1 的数据结构 "OUCW_3" 。
输出参数"DONE"、 "ERROR" 和 "STATUS" 用于作业执行评估。
图. 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" 进行错误分析。
图. 05
图. 06
UDP端点连接好后就可以收到数据。
通过输入参数"DATA",可以指定接收数据区地址和长度。
例子中100 字节的接收数据存储到 DB200。
在输入参数 "ADDR" 填写接收数据端的 IP 地址的存储区。例程中,通讯伙伴的地址参数存储在数据块 DB1 的数据结构 "OUCW_3" 。 表02展示了 "OUCW_3" 数据结构。
图. 07
输出参数 "NDR" 用于表示已接收到新数据。输出参数 RCVD_LEN 表明接收数据的长度。
如果接收数据成功,输出参数“RCVD_LEN”的值被存储。
图. 08
如果接收数据不成功,输出参数 “STATUS”的值被储存和评价。
图. 09
可以调用 FB66 “TDISCON”断开 UDP 本地端点的连接。通过在 FB66 “TDISCON” 的输入参数 “REQ” 上升沿触发断开本地端点连接。
图. 10
下载 STEP 7 项目:
STEP 7 项目包含一个例程,它调用 FB1 以及功能块FB65 "TCON", FB66 "TDISCON", FB67 "TUSEND" 、 FB68 "TURCV" 做状态评估。 使用 STEP 7 V5.5 SP3 创建。
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。
http://support.automation.siemens.com/CN/view/zh/29738463
剩余80%未阅读,请登录后下载/查看文档
- 评论
-
分享
扫码分享
- 收藏 收藏
- 点赞 点赞
- 纠错 纠错
- 如何编程通信块 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON"以实现用S7-300 或 S7-400 CPU的PROFINET口进行基于TCP协议的数据交换?
- 如何参数化 FB65 "TCON" 的 "local_device_id" ,以建立以太网的开放式通信?
- 如何编写 PROFINET IO 设备通讯块 FC11 和 FC12
- 基于WINCC的工业以太网网络管理(更新版)
- 当在 STEP 7的 CPU 中用户程序里调用 FC5/50 和 FC6/60 通讯块时需要记住的要点有哪些?
- CPU集成的PROFINET接口、S7 软件控制器以及基于以太网的WinAC RTX,支持哪些通信服务?
- 如何使用 TCON 通信指令编程建立两个 S7-1500 CPU 之间的开放式用户通信?
- SIMATIC TDC与WINCC基于S7协议的通讯
- CP340/CP341基于ASCII驱动协议的多站点轮询
- 工业通信网络布线技术 基于工业以太网/PROFINET 和 PROFIBUS
{{item.nickName}}