如何通过 CPU 集成的 PROFINET 接口或是通过 CP443-1 Advanced 使用 FB63 “TSEND”, FB64 “TRCV”, FB65 “TCON” 和 FB66 “TDISCON” 通讯块实现 ISO-on-TCP 协议的数据交换?

n

描述
可以通过CPU 集成的 PROFINET 接口或 CP443-1 Advanced 使用工业以太网 "开放用户通信方式"进行数据交换, 例如: 这种方式支持下列通信协议:n

  • TCPn
  • ISO-on-TCPn
  • UDP

使用 ISO-on-TCP协议的工业以太网 "开放用户通信方式"可以使用下列通信块:n

  • FB65 "TCON" 用于建立连接n
  • FB66 "TDISCON"用于断开连接n
  • FB63 "TSEND"用于发送数据n
  • FB64 "TRECV"用于接收数据

这些通信功能块可以在函数库 Standard Library -> Communication Blocks 中找到。
在标准程序库中将上述通信功能块的最新版本拷贝至用户程序中,然后编写程序时调用。
用于建立 ISO-on-TCP 连接的连接参数存储于一个数据结构体中。在这次例子中,使用数据结构 "OUCW_1",在这个例子中数据结构保存在 DB1 数据块中,并由用户进行参数化。n

注意

  • 使用 "开放通信向导" 可以方便连接数据的创建。该向导可在此下载,条目号: 98957840。n
  • ISO-on-TCP 通信连接不在 NetPro 中配置。

表 01 提供了数据结构 "OUCW_1" 中哪些连接数据被保存。

字节 参数 数据类型 描述
0 to 1 block_length WORD 数据结构 "OUCW_1" 的长度
2 to 3 id BYTE 对连接的引用
数值范围:W#16#0001 to W#16#0FFF
必须为该连接块的 ID 指定一个参数值。
4 coection_type BYTE ISO-on-TCP协议版本:B#16#12
5 active_est BOOLEAN 建立连接方式的标识号 n

  • FALSE:被动创建连接n
  • TRUE:主动创建连接
6 local_device_id BYTE 通过 CPU 315-2 PN/DP集成的 PROFINET 接口进行通信:B#16#02
7 local_tsap_id_len BYTE 所使用的参数 local_tsap_id 的长度
如果连接类型为 B#16#12,可能的值:2 to 16
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 参数的长度
如果连接类型为 B#16#12,可能的值:0 or 2 to 16 n

  • 主动端:2 to 16n
  • 被动端:0 or 2 to 16 (0 代表未指定)
11 ext_staddr_len BYTE 所使用的参数 next_staddr 的长度
12 to 27 local_tsap_id ARRAY [1..16] of BYTE 本地 TSAP,例如 ISO1:
local_tsap_id[1] = B#16#49
local_tsap_id[2] = B#16#53
local_tsap_id[3] = B#16#4F
local_tsap_id[4] = B#16#31
local_tsap_id[5-16] = B#16#00 n

注意
如果 CPU 不支持 ASCII 格式的TSAP,那么 TSAP 的头两个字节必须写入数值 B#16#E0 和 B#16#02。

28 to 33rem_subnet_idARRAY [1..6] of BYTE该参数当前未使用。必须将 B#16#00 分配给它。
34 to 39rem_staddrARRAY [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 55rem_tsap_idARRAY [1..16] of BYTE远程连接端点的 TSAP,例如 ISO1:
rem_tsap_id[1] = B#16#49
rem_tsap_id[2] = B#16#53
rem_tsap_id[3] = B#16#4F
rem_tsap_id[4] = B#16#31
rem_tsap_id[5-16] = B#16#00 n

注意
如果 CPU 不支持 ASCII 格式的 TSAP,那么 TSAP 的头两个字节必须写入数值 B#16#E0 和 B#16#02。

56 to 61ext_staddrARRAY [1..6] of BYTEext_staddr[1-6] = B#16#00 n

注意
如果 local_device_id=B#16#00,那么这需要指定 (本地) CP 的机架和插槽。

62-63spareWORD保留,分配 W#16#0000 给该参数。

表 01

n

以下 CPU 支持ASCII 格式的 TASP。n

  • CPU 314C-2 PN/DPn
  • CPU 315(F)-2 PN/DP, CPU 317(F)-2 PN/DP V3.1 及以上n
  • CPU 315T-3 PN/DP, CPU 317T-3 PN/DP, CPU 317TF-3 PN/DPn
  • CPU 319(F)-3 PN/DPn
  • CPU 414-3 PN/DP, CPU 416(F)-3 PN/DP V5.2及以上n
  • CPU 414F-3 PN/DP, CPU 412-2 PNn
  • CPU 412-5H PN/DP, CPU 414-5H PN/DP, CPU 416-5H PN/DP, CPU 417-5H PN/DPn
  • IM 151(F)-8 PN/DP CPU V2.7及以上n
  • IM 154(F)-8 CPU V3.2及以上

简单例程描述
S7 程序中包含 FB65 "TCON 的调用和带有 "OUCW_1" 数据结构的 DB1,其中 "OUCW_1" 保存着创建 ISO-on-TCP 连接的参数。S7 程序中还包含函数库 Standard Library -> Communication Blocks 中函数 FB63 "TSEND"和 FB64 "TRCV" 的调用 。通过调用 FB63 "TSEND" 块,可以将数据发送给一个 S7 站或一个 S5 站或一个 PC 站或第三方系统。通过调用 FB64 "TRCV" 块,可以接收从一个 S7 站或一个 S5 站或一个 PC 站或第三方系统发送的数据。n

首先在 S7-300 站中创建硬件配置,将 MB100 作为时钟脉冲。发送请求由时钟脉冲触发。存盘编译并将硬件配置下载到 CPU 中。n

STEP 7 程序包含程序块 OB100, OB1, FB400, DB400, FB420, UDT65和 FB63, FB64, FB65 及 FB66。n

OB100
OB100是一个重启 OB,当 CPU 重新启动时执行一次 (暖起动)。 在这个 OB 块中,第一次的通信可以通过 M0.3 触发。n

OB1
OB1是循环执行。FB1 在 OB1 中调用,其背景数据块是 DB11,且使用 M0.3 作为 INIT_COM 参数,使用M10.0 作为 ABORT 参数。FB1 被调用后,M0.3 在OB1 中被复位。n

如何通过 CPU 集成的 PROFINET 接口或是通过 CP443-1 Advanced 使用 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 通讯块实现 ISO-on-TCP 协议的数据交换?
图 01n

FB1
FB1 在 OB1 中循环调用。下述功能块在 FB1 中被调用。n

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

定义连接数目
用户可以单独修改连接数目,根据配置在 FB1 的网络段 2 中修改连接数目。连接数目保存在一个静态变量中,如背景数据块 DB11 中。本示例定义的连接数为 "1"。n

如何通过 CPU 集成的 PROFINET 接口或是通过 CP443-1 Advanced 使用 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 通讯块实现 ISO-on-TCP 协议的数据交换?
图 02n

建立连接
通过 FB65 "TCON" 的 "REQ"输入参数的上升沿来开始建立一个连接。带有连接参数的数据结构 "OUCW_1" 被整合到数据块 DB1中。
一旦FB65 "TCON" 的输入参数 "CONNECT" 使能,包含连接参数的存储区即被指定。
在系统启动后连接被建立。除非调用 FB66 "TDISCON",或者CPU 进入 STOP 模式,或者切断电源,该连接才会断开。n

如何通过 CPU 集成的 PROFINET 接口或是通过 CP443-1 Advanced 使用 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 通讯块实现 ISO-on-TCP 协议的数据交换?
图 03n

发送请求可通过一个上升沿触发 FB63 "TSEND" 的输入参数 "REQ"来完成。发送请求由时钟位 M10.6 和变量 "SEND_BUSY" 控制。如果发送请求开始执行,那么"SEND_BUSY" 就被置位。这时无法触发一个新的发送请求。
用户在输入参数 "DATA" 指定发送数据的存储区。
用户在输入参数 "LEN" 指定发送字节长度。
本示例中,发送数据存放在 DB100 中,将100 个字节数据发送给伙伴。
输出参数 "DONE","ERROR" 和 "STATUS" 用来评估工作状态。n

如何通过 CPU 集成的 PROFINET 接口或是通过 CP443-1 Advanced 使用 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 通讯块实现 ISO-on-TCP 协议的数据交换?
图 04n

如果发送任务成功完成,"SEND_BUSY" 被置位。一个新的发送任务此时可以被触发。
如果发送任务完成并带有错误,那么 "SEND_BUSY" 同样会被复位,同时 FB63的 "STATUS" 输出参数会保存一个用来进行错误分析的数值。n

如何通过 CPU 集成的 PROFINET 接口或是通过 CP443-1 Advanced 使用 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 通讯块实现 ISO-on-TCP 协议的数据交换?
图 05n

如何通过 CPU 集成的 PROFINET 接口或是通过 CP443-1 Advanced 使用 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 通讯块实现 ISO-on-TCP 协议的数据交换?
Fig. 06n

ISO-on-TCP 连接建立后,就可以接收数据。
用输入参数 "DATA"和 "LEN" 来指定要保存接收数据的数据区的地址和长度。
本示例中,接收 100 字节的数据并保存在 DB200 中。n

如何通过 CPU 集成的 PROFINET 接口或是通过 CP443-1 Advanced 使用 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 通讯块实现 ISO-on-TCP 协议的数据交换?
Fig. 07n

输出参数 "NDR" 用于表示新数据已经被接收。输出参数 "RECV_LEN" 表示被接收数据的长度。
如果数据被成功接收,那么输出参数 "RECV_LEN" 的值被保存。n

如何通过 CPU 集成的 PROFINET 接口或是通过 CP443-1 Advanced 使用 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 通讯块实现 ISO-on-TCP 协议的数据交换?
Fig. 08n

如果数据接收没有成功,那么输出参数 "STATUS" 的值被保存并用来评估。n

如何通过 CPU 集成的 PROFINET 接口或是通过 CP443-1 Advanced 使用 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 通讯块实现 ISO-on-TCP 协议的数据交换?
Fig. 09n

用户可以使用 FB66 "TDISCON" 断开 ISO-on-TCP 连接。可以使用 FB66 "TDISCON" 输入参数"REQ" 的上升沿来启动断开 ISO-on-TCP 连接的请求。n

如何通过 CPU 集成的 PROFINET 接口或是通过 CP443-1 Advanced 使用 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 通讯块实现 ISO-on-TCP 协议的数据交换?
Fig. 10n

下载的 STEP 7 项目
本STEP 7 项目包含一个例子程序,例子程序中包含 FB1 和带有状态评估的功能块 FB65 "TCON", FB66 "TDISCON",FB63 "TSEND"和 FB64 "TRECV"。本项目使用 STEP 7 V5.4 SP3 创建。n

如何通过 CPU 集成的 PROFINET 接口或是通过 CP443-1 Advanced 使用 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 通讯块实现 ISO-on-TCP 协议的数据交换? Sample_open_IoT.zip ( 285 KB ) n

配置其他的 ISO-on-TCP 连接
如果要配置其他的 ISO-on-TCP 连接,可以复制 FB1 得到另一个功能块 (例如 FB101)。修改参数生成新的背景数据块。n

更多信息

  • 详细信息可以参见手册 "System and Standard Functions for S7-300/400 Volume 1 and Volume 2"中提及的工业以太网开放式通讯协议,条目号:44240604
  • 关于使用 S7-300 和 S7-400 工业以太网 CPs 模块组态一个 ISO-on-TCP 通信连接的指南,可以参见条目号:47885440

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

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

相关推荐

发表回复

登录后才能评论