如何编程通信块 FB63 “TSEND”, FB64 “TRCV”, FB65 “TCON” 和 FB66 “TDISCON” 以实现用 S7-300 或 S7-400 CPU 的 PROFINET 口进行基于 TCP 协议的数据交换?

n

描述:
集成 PROFINET 口的 CPU 和 WinAC RTX ,支持开放式 IE 通信。n

关于集成 PROFINET 口的 CPU 和 WinAC RTX 所支持的通信服务总览,请参见条目18909487 。此总览包含有关集成 PROFINET 口的 CPU 和 WinAC RTX 所支持的开放式 IE 通信协议的信息。n

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

  • FB65 "TCON" 用于建立连接n
  • FB66 "TDISCON"用于中止连接n
  • FB63 "TSEND"用于发送数据n
  • FB64 "TRCV"用于接收数据

这些通信块可以在 Standard Library -> Communication Blocks 下找到。
从标准库中拷贝最新版本的上述通讯块到用户程序中,然后再编写程序中调用它们。
建立 TCP 连接的连接参数保存在一个数据结构中。
本例中,用到 UDT65 "TCON_PAR" 这个数据结构,保存在DB1中并由用户参数化。n注意 n

  • 是 "Open Communication Wizard"以简化连接创建。在条目号98957840.中下载n
  • 该TCP链接不在NetPro 中组态。

表 01 "OUCW_2" 数据结构保存的连接参数
n

字节 参数 数据类型 描述
0 to 1 block_length WORD "OUCW_2" 数据结构长度
2 to 3 id BYTE 连接标识
值范围: w#16#0001 至 w#16#0FFF
必须在相关块ID中指定该参数。
4 coection_type BYTE TCP 协议版本: B#16#11
5 active_est BOOLEAN 建立连接标识 n

  • FALSE:被动建立连接n
  • TRUE:主动建立连接
6 local_device_id BYTE 通过CPU 315-2 PN/DP集成PN接口通信:B#16#02
7 local_tsap_id_len BYTE local_tsap_id 长度
coection_type = B#16#11时可行值:0或2
(主动端:0或2,被动端:2)
8 rem_subnet_id_len BYTE 当前不可用,参数值B#16#00
9 rem_staddr_len BYTE 远程连接端点地址长度 n

  • 0:未指定, 参数rem_staddr 不相关n
  • 4: rem_staddr 中有效的IP地址
10 rem_tsap_id_len BYTE rem_tsap_id parameter参数
coection_type = B#16#11时的可行值:0或2
11 ext_staddr BYTE ext_staddr 长度
12 to 27 local_tsap_id ARRAY [1..16] of BYTE 本地端口号:2000,例如
local_tsap_id[1] = B#16#7 (十六进制端口号高字节)
local_tsap_id[2] = B#16#D0 (十六进制端口号低字节)
local_tsap_id[3-16] = B#16#00
28 to 33 rem_subnet_id ARRAY [1..6] of BYTE 当前不可用,参数值B#16#00
34 to 39 rem_staddr ARRAY [1..6] of BYTE 远程连接端点IP地址: 192.168.0.30
rem_staddr[1] = B#16#C0
rem_staddr[2] = B#16#A8
rem_staddr[3] = B#16#00
rem_staddr[4] = B#16#1E
rem_staddr[5-6] = B#00(保留)
40 to 55 rem_tsap id ARRAY [1..16] of BYTE 远程连接端点端口号: 2000,例如
local_tsap_id[1] = B#16#7(十六进制端口号高字节)
local_tsap_id[2] = B#16#D0(十六进制端口号低字节)
local_tsap_id[3-16] = B#16#00
56 to 61 ext_staddr ARRAY [1..6] of BYTE ext_staddr[1-6] = B#16#00
62-63 spare WORD 保留,值W#16#0000.

表 01 n

例程描述:
S7 程序中包含了对 FB65 "TCON" 的调用和带有建立 TCP 连接的连接参数数据结构"OUCW_2" 创建的DB1 。也包含了来自于 Standard Library -> Communication Blocks 下的 FB63 "TSEND" 和 FB64 "TRCV" 的调用。 FB63 "TSEND" 用于发送数据到 S7 站或 S5 站,以及到 PC 站或到第三方系统. FB64 "TRCV" 用于接收来自其他 S7 站,S5 站,PC 站和第三方系统的数据。n

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

STEP 7 程序由OB100,OB1,FB1, DB11,DB1,DB100,DB200 , FB63,FB64,FB65 和 FB66。n

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

OB1:
OB1 循环调用。 FB1 在 OB1 中被调用 (背景数据块: DB11) , M0.3作为 INIT_COM 参数,M10.0作为ABORT参数。在 OB1 中调用 FB1结束后,复位M0.3。n

如何编程通信块 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 以实现用 S7-300 或 S7-400 CPU 的 PROFINET 口进行基于 TCP 协议的数据交换?
图. 01n

FB1:
在 OB1 中调用 FB1。该 FB1 中调用以下功能块:n

  • FB65 "TCON"n
  • FB63 "TSEND",n
  • FB64 "TRCV"n
  • FB66 "TDISCON"

定义连接ID
你可以随意修改连接ID。修改FB1 network2中的连接ID和你的组态保持一致。连接ID保存在DB11的静态变量中。
本例中定义连接ID为 "2"。 n

如何编程通信块 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 以实现用 S7-300 或 S7-400 CPU 的 PROFINET 口进行基于 TCP 协议的数据交换?
图. 02n连接建立
通过 FB65"TCON" 的输入参数 "REQ" 的上升沿触发来建立连接。数据块DB11 的背景数据块中集成了带有连接参数的数据结构 "OUCW_2"。
FB65 "TCON" 的输入参数 "CONNECT" 需要指定一个含有连接参数的存储区。
在系统启动时连接建立并保持,直到调用 FB66 "TDISCON" 来断开连接,或让CPU 进入停止模式或关闭电源来断开连接。 n

如何编程通信块 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 以实现用 S7-300 或 S7-400 CPU 的 PROFINET 口进行基于 TCP 协议的数据交换?
图. 03n

在 "FB63 "TSEND" 的输入参数 "REQ" 上施加上升沿以触发发送请求。发送任务的触发是由时钟标志 M100.6 和变量 "SEND_BUSY" 来控制的。如果发送任务运行, "C1.SEND_BUSY" 则被置位,无法再触发新的发送请求。
可以为输入参数 "DATA" 指定包含要发送数据的存储区。
并在输入参数 "LEN" 填写要发送的字节数。
本例中发送数据保存在DB100中,向通信伙伴发送100个字节。
输出参数 "DONE", "ERROR" 和 "STATUS" 用于任务评价。n

如何编程通信块 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 以实现用 S7-300 或 S7-400 CPU 的 PROFINET 口进行基于 TCP 协议的数据交换?
图. 04n

如果发送任务成功完成, "SEND_BUSY" 被复位。这时新的发送任务才可以被触发。
如果发送任务执行出错,那么 "SEND_BUSY" 变量同样被复位,FB63 的输出参数 "STATUS" 的值被保存用于错误分析。n

如何编程通信块 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 以实现用 S7-300 或 S7-400 CPU 的 PROFINET 口进行基于 TCP 协议的数据交换?
图. 05

如何编程通信块 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 以实现用 S7-300 或 S7-400 CPU 的 PROFINET 口进行基于 TCP 协议的数据交换?
图. 06

一旦 TCP 连接建立了,就能接收数据。
用输入参数 "DATA" 指定保存接收数据的存储的地址和长度。
本例中接受100个字节并保存在DB200中。

如何编程通信块 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 以实现用 S7-300 或 S7-400 CPU 的 PROFINET 口进行基于 TCP 协议的数据交换?
图. 07

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

如何编程通信块 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 以实现用 S7-300 或 S7-400 CPU 的 PROFINET 口进行基于 TCP 协议的数据交换?
图. 08

如果数据未被成功接收,那么输出参数 "STATUS" 可以保存下来并用于评估状态。

如何编程通信块 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 以实现用 S7-300 或 S7-400 CPU 的 PROFINET 口进行基于 TCP 协议的数据交换?
图. 09

可以通过 FB66 "TDISCON" 有目的地结束 TCP 连接。在 FB66 "TDISCON" 的输入参数"REQ" 上施加上升沿以请求结束 TCP 连接。

如何编程通信块 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 以实现用 S7-300 或 S7-400 CPU 的 PROFINET 口进行基于 TCP 协议的数据交换?
图. 10

注意:

示例程序中TCP 协议用来数据传输,需在数据结构 "OUCW_2"中设定参数 "coection_type" 为 "B#16#11" 。

S7-300 CPUs V2.3 支持 TCP (兼容模式)。如在S7-300 CPU V2.3 中运行示例程序,需在数据结构"OUCW_2" 中设定参数 "coection_type" 为"B#16#01" 。

STEP 7 项目下载
示例的 STEP 7 项目包含了调用 FB1和FB65 "TCON"、 FB66 "TDISCON"、FB63 "TSEND" 和 FB64 "TRECV"以及状态评估。 该程序由 STEP 7 V5.5 创建。

如何编程通信块 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 以实现用 S7-300 或 S7-400 CPU 的 PROFINET 口进行基于 TCP 协议的数据交换? Sample_open_TCP.zip ( 286 KB )

配置额外TCP 连接
要配置其它的额外的 TCP 连接,将 FB1 复制一份命名为其它功能块 (如 FB101),修改参数并生成一个新的背景数据块。

注意:

  • 在手册 "System and Standard Functions for S7-300/400 Volume 1 and Volume 2"中提及的工业以太网开放式通讯协议的详细信息参见条目 44240604
  • 对于配置 S7-300 和 S7-400 工业以太网CP进 行TCP连接的说明息可参见条目 22385024

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

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

相关推荐

发表回复

登录后才能评论