使用 Open Communication Wizard 建立开放式UDP 通信
1. 概述 介绍 SIMATIC S7- PN CPU包含一个集成的 PROFINET 接口,该接口除了具有 PROFINET I/O功能外还具有 UDP 通信功能。通过该集成以太网接口组态 UDP 通信时,只能使用开放式通信专用的功能块。依据RFC768的UDP协议,在STEP7”通讯块”的“标准库”(图1所示)中提供了下列FB,用于通过用户程序与符合以太网标准的通讯伙伴进行数据交换: • ® UDT 65 "TCON_PAR",具有分配本地通讯接入点参数的数据结构
• ® UDT 66 "TCON_ADR",具有分配远程伙伴寻址参数的数据结构
• ® FB 65 "TCON",用于组态本地通讯接入点
• ® FB 66 "TDISCON",用于关闭本地通讯接入点
• ® 用于发送数据的FB 67 "TUSEND"
• ® 用于接收数据的FB 68 "TURCV"
使用 Open Communication Wizard 建立开放式UDP 通信
图1 解决方案
要通过 S7-PN CPU 的 集成PROFINET 接口实现开放的 UDP 通信,不能在硬件组态中完成,必须在一个数据块中指定每个连接的参数。使用“Open Communication Wizard”工具可以简单明了地指定连接参数,该工具可将一个包含所有参数的 UDT 导出到您的 STEP 项目中。使用该 UDT 可建立含有连接描述的数据块。随后,需使用通信功能块 FB65 "TCON"、FB66 "TDISCON"、FB 67 "TUSEND" 和FB 68 "TURCV"完成程序的编写。
2. 系统配置
CPU采用两个315-2PN/DP,使用以太网进行通信,网络拓扑如图2所示:
使用 Open Communication Wizard 建立开放式UDP 通信
图2
3. 配置OPEN Communication Wizard
首先使用STEP7创建一个项目,名称为open_UDP_wizard,建立两个315PN/DP站。安装并打开向导。从路径“开始Simatic ® Open Communication Wizard ® Open Communication Wizard”打开向导。打开后如图3所示,点击下一步:
使用 Open Communication Wizard 建立开放式UDP 通信
图3 在图4中选择STEP7项目以及块文件夹,点击下一步,如图5所示:
使用 Open Communication Wizard 建立开放式UDP 通信
图4
使用 Open Communication Wizard 建立开放式UDP 通信
图5 在图5中选择New, 然后点击下一步,如图6所示:
使用 Open Communication Wizard 建立开放式UDP 通信
图6 在图6中选择UDP native, 点击下一步,如图7所示:
使用 Open Communication Wizard 建立开放式UDP 通信
图7 点击下一步,如图8所示:
使用 Open Communication Wizard 建立开放式UDP 通信
图8 在图8中设置partner A的“Connection ID”“Connection name ” “Used interface”以及partner B的“IP address”,点击下一步,如图9所示:
使用 Open Communication Wizard 建立开放式UDP 通信
图9 在图9中设定通信双方的端口号,本例中设置为2000。点击下一步,如图10所示:
使用 Open Communication Wizard 建立开放式UDP 通信
图10 在图10中定义了partnet A用于UDP通信的数据连接结构的名称UDT65和地址数据块的名称UDT66,在项目open_UDP_wizard中选择块文件夹。点击下一步如图11所示,再下一步开始编译,如图12所示:
使用 Open Communication Wizard 建立开放式UDP 通信
图11
使用 Open Communication Wizard 建立开放式UDP 通信
图12 编译无误后如图13所示:
使用 Open Communication Wizard 建立开放式UDP 通信
图13 点击Finish完成向导的配置。这样在项目open_UDP_wizard的块中生成了UDT65, UDT66,如图14所示。
使用 Open Communication Wizard 建立开放式UDP 通信
图14 用同样的步骤为SIMATIC 315PN-2 站配置向导,完成配置后在SIMATIC 315PN-2站的块中生成了UDT65,UDT66。
4. 在STEP7中为项目open_UDP_wizard编写程序
首先为partner A编写程序。在SIMATIC 315PN-1的块中创建DB101,定义一个变量DB_VAR,变量类型为UDT65。如图15所示。
使用 Open Communication Wizard 建立开放式UDP 通信
图15 接着创建DB102,定义一个变量DB_VAR,变量类型为UDT66。如图16所示。
使用 Open Communication Wizard 建立开放式UDP 通信
图16 在OB1中依次调用FB65,FB67,FB68,FB66,如图17,18,19,20所示:
使用 Open Communication Wizard 建立开放式UDP 通信
图17 程序中的参数说明见表1: 参数名 | 参数说明 | REQ | 上升沿触发建立通信连接 | ID | 连接ID | CONNECT | 与变量类型为UDT65的变量相连 | DONE | 为1时,连接正确建立 | BUSY | 为1时,正建立连接 | ERROR | 为1时,有故障发生 | STATUS | 故障代码 |
表1 FB65参数说明
使用 Open Communication Wizard 建立开放式UDP 通信
图18 程序中的参数说明见表2 参数名 | 参数说明 | REQ | 上升沿触发 | ID | 连接ID | LEN | 数据发送的最大长度 | DATA | 数据发送的区域 | ADDR | 接收伙伴的地址参数 | DONE | 为1时,连接正确建立 | BUSY | 为1时,正建立连接 | ERROR | 为1时,有故障发生 | STATUS | 故障代码 |
表2 FB67参数说明
使用 Open Communication Wizard 建立开放式UDP 通信
图19 程序中的参数说明见表3 参数名 | 参数说明 | EN_R | 为1时使能 | ID | 连接ID | LEN | 接收区域的长度 | DATA | 接收数据区 | ADDR | 发送伙伴的地址参数 | NDR | 为1时,接收完成 | BUSY | 为1时,正在接收 | ERROR | 为1时,有故障发生 | STATUS | 故障代码 | RCVD_LEN | 实际接收的数据长度 |
表3 FB68参数说明
使用 Open Communication Wizard 建立开放式UDP 通信
图20 程序中的参数说明见表4 参数名 | 参数说明 | REQ | 上升沿触发 | ID | 连接ID | DONE | 为1时,断开连接完成 | BUSY | 为1时,正断开连接 | ERROR | 为1时,有故障发生 | STATUS | 故障代码 |
表4 FB66参数说明 OB1编写完成后,SIMATIC 315PN-1的程序块如图21所示:
使用 Open Communication Wizard 建立开放式UDP 通信
图21 同理,为SIMATIC 315PN-2站编写程序,与SIMATIC 315PN-1类似,在DB101中定义数据类型为UDT65的变量,接着创建DB102,定义一个变量DB_VAR,变量类型为UDT66。在OB1中调用FB65,FB67,FB68,FB66。将硬件组态和程序分别下到两个S7300站中。
在cpu运行的情况下分别监控两个站OB1的状态。首先在两个站的FB65中,将“REQ”置1,使连接建立。然后将SIMATIC 315PN-1 MB100-MB109赋值B#16#13,同时在SIMATIC 315PN-2站中将FB68的EN_R置1,接着在SIMATIC 315PN-1的FB67中,将REQ设置上升沿信号,此时SIMATIC 315PN-2站的MB200-MB209接收到来自SIMATIC 315PN-1站的数据B#16#13,如图22所示:
使用 Open Communication Wizard 建立开放式UDP 通信
图22 同样的操作,将SIMATIC 315PN-2的MB100-MB109赋值B#16#08,SIMATIC 315PN-1的MB200-MB209接收到B#16#08,图23所示。
使用 Open Communication Wizard 建立开放式UDP 通信
图23
5. 常见问题
• ® 接收区的长度怎么指定?
答:如果LEN不为0,区域长度由LEN的值指定;如果LEN为0,则由DATA参数长 度信息指定。
• ® 接收区能否大于发送区?
答:如果接收区大于发送区,则发送区的所有数据都将输入到接收区中。然后将NDR设置为TRUE,并将发送数据的长度写入RCVD_LEN。
• ® FB68 ERROR=1,STATUS=W#16#8088 是什么原因?
答:如果选择了比发送数据长度小的接收区,则FB68不向接收区复制任何数据,并返回下列错误信息:ERROR=1,STATUS=W#16#8088。
|