S7-300 中如何编程通信块 FB8 “USEND” 和 FB9 “URCV” 进行数据交换?

说明
要在两个 S7-300 站之间进行交换数据,可以使用在 NetPro 里配置了 S7 连接的方法进行,这种方法必须在 CPU 中调用通信功能块。
功能块 FB9 ("URCV") 用于从远程 CPU 中读出数据,而 FB8 ("USEND") 用于写数据到远程 CPU 中。
本例中必须用于通信的 S7 连接 在两个 S7-300 站中都要配置, 因为通过 FB8 "USEND" 和 FB9 "URCV" 进行的 S7 通信基于客户端-客户端的原则。n

注意
如果在 S7-300 站中,使用工业以太网 CP 进行 S7 连接数据通信,要使用位于"SIMATIC_NET_CP" 库 "CP 300 > Blocks"下的功能块 FB8 "USEND" 和 FB9 "URCV" 。
如果使用 CPU31x-2PN/DP 或 CPU319-3PN/DP 的集成 PROFINET 接口进行 S7 连接数据通信, 要使用位于 "Standard Library -> Communication Blocks -> Blocks" 下 "CPU_300"中的功能块 FB8 "USEND" 和 FB9 "URCV" 。
对于 S7-400,用于 S7 连接数据通信系统功能块SFB8 "USEND" 和 SFB9 "URCV"可在 Standard Library > System Function Blocks > Blocks 下找到。n

功能块 FB8 "USEND" 和 FB9 "URCV" 的特点:n

  • FB8 和 FB9 以及是异步通信块。n
  • 本例中这些块在 OB1 循环中调用。(参见条目 ID:2795485).n
  • FB8 和 FB9 的运行可能需要多个 OB1 循环。n
  • FB8由输入参数 "REQ" 激活。n
  • FB9由输入参数 "EN_R" 激活。n
  • 任务的完成由 "DONE", "NDR" 或 "ERROR"提示。n
  • USEND 和 URCV 可以同时运行在一个连接上。n
  • 数据传输是未经协商的,如数据的接收不会得到对方的确认。n
  • 对应于 CP343-1或者 CP342-5 的最新版本的 FB8 "USEND" 和 FB9 "URCV" 数据通讯块可在SIMATIC_NET_CP 库中的 "CP 300 > Blocks" 下找到。n
  • 对应于 "CPU_300" 家族的,经由集成的 PROFINET 接口的 S7-300 CPU, IM151-8 PN/DP CPU或者IM154-8 CPU 进行数据通讯,最新版本的 FB8 "USEND" 和 FB9 "URCV" 可在标准库 "Communication Blocks > Blocks" 下找到。

示例程序描述:
该 STEP 7 项目包括两个 S7-300 站。
第一个 S7-300 站中包括一个 CPU 315-2 DP 和一个 CP343-1 用于工业以太网数据通信。
第二个 S7-300 站中使用 CPU 319-3 PN /DP. CPU 集成的 PROFINET 接口用于工业以太网数据通信。n

MB10 在两个 S7-300 CPU 中都组态为 时钟标志位。发送请求由此时钟标志位触发。n

在 NetPro 中,在两个 S7-300 站的双边组态了用于通过工业以太网进行数据通信的 S7 连接。
在 NetPro 中选中 S7-300 站的 CPU ,组态的双边 S7 连接在连接表中列出。
在连接表中,右键单击 S7 连接,选择"Object Properties(对象属性)"菜单,打开 S7 连接对话框属性。n

S7-300 中如何编程通信块 FB8 "USEND" 和 FB9 "URCV" 进行数据交换?
图. 01n

通信需要的 IP 地址和 S7-300 接口在 S7 连接属性对话框中定义。
在S7连接的属性对话框里,可以决定 "Local ID" 块参数。这个值在调用 FB8 "USEND" 和 FB9 "URCV" 时作为输入参数 "ID" 的输入。
对于 S7-300 站 "SIMATIC 315",在S7连接属性对话框中激活 "Active Coection Setup" 功能,因为由它主动建立S7连接。
对于 S7-300 站 "SIMATIC 319",在S7连接属性对话框中不要激活 "Active Coection Setup"功能,因为它在建立连接过程中是被动的。
点击 "Address Details..." 按钮.n

S7-300 中如何编程通信块 FB8 "USEND" 和 FB9 "URCV" 进行数据交换?
图. 02n

本地 TSAP 和对方 TSAP 在 "Address Details" 对话框中定义。S7-300 站间 S7 连接由唯一的 TSAP 说明。.n

S7-300 中如何编程通信块 FB8 "USEND" 和 FB9 "URCV" 进行数据交换?
图. 03n

STEP 7 程序包括块 OB100, OB1, FB100, DB100, DB200, FB8 以及 FB9.n

OB100在 CPU315-2 (发送方)和 CPU319-3 PN/DP (接收方) 中的使用
OB100 是一个重启动组织块,在 CPU 重启时(暖启动)运行。在这个块中,通信触发标志位 M0.3 被使能。n

OB1 在 CUP315-2 (发送方) 中的使用
OB1 是循环调用的。在 OB1 中通过 M0.3 使能调用 FB100(背景数据块DB100),M0.3 在 FB100 执行完成后被立即复位。n

S7-300 中如何编程通信块 FB8 "USEND" 和 FB9 "URCV" 进行数据交换?
图. 04n

FB100 在 CUP315-2 (发送方) 中的使用
FB100 在 OB1 中循环调用。在这个例子中,会触发多次 S7 连接的发送任务,即是说在 FB100 中 FB8 ("USEND")会以相同的 "ID" 不同的 "R_ID" 触发多次。

在M10.6 上升沿信号且没有任务运行时由输入参数 "REQ" 激活 FB8。"REQ" 输入参数只有当发送任务成功完成或者出现错误时才能复位。
这个锁定是非常重要的,因为该功能是异步的,可以持续多个循环周期。连续的激活功能块而不等待当前激活任务结束可能会导到致通信过载。
输入参数 "ID" 必须要和 NetPro 中 S7 连接属性对话框中一致。(见图. 01).
利用参数 "R_ID" 定义发送任务和接收任务的一致性。"R_ID" 在发送端 FB8 "USEND" 和 接收端 FB9 "URCV" 必须匹配。
FB8 的输入参数 "SD_1" 用来指定发送数据的地址和长度(发送缓冲区),例如:P#DB200.DBX0.0 BYTE 10。
输出参数 "DONE", "ERROR" 和 "STATUS" 用于任务评估,三个参数只有在同一循环周期中才有效。

第一次调用 FB8 "USEND" 时,输入参数为 ID=1 和 R_ID=1 。

S7-300 中如何编程通信块 FB8 "USEND" 和 FB9 "URCV" 进行数据交换?
图. 05

如果发送任务完成了但是发生了错误,那么 FB8 的输出参数"STATUS" 保存了错误信息。

S7-300 中如何编程通信块 FB8 "USEND" 和 FB9 "URCV" 进行数据交换?
图. 06

第二次调用 FB8 "USEND" 时,输入参数为 ID=1 和 R_ID=2,第三次调用 FB8 "USEND" 输入参数为 ID=1 和 R_ID=2。
如果发送任务完成时出错,同样块的状态字被保存于输出参数 "STATUS" 用于错误分析。

OB1在 CPU319-3 (接收方) 中的使用
OB1 是循环调用的。FB100在 OB1 中被调用(背景数据块:DB100),其使能信号为 M0.3,FB100 运行后使能信号 M0.3 复位。

S7-300 中如何编程通信块 FB8 "USEND" 和 FB9 "URCV" 进行数据交换?
图. 07

FB100 在 CPU319-3 PN/DP (接收方) 中的使用
FB100在 OB1 循环中被调用。在此例中,会触发多次 S7 连接的接收任务,即是说在 FB100 中 FB9 "URCV"会以相同的 "ID" 不同的 "R_ID" 触发多次。

FB9 经由输入参数 "EN_R" 使能,输入参数 "EN_R" 的值一直为"1",这是因为在启动组织块 OB100 中M0.1 被置位成值 "1"。这样 S7-300 站会一直处于准备接收数据的状态。

FB9 "URCV"的输入参数 "ID" 必须来自 NetPro中S7 连接属性对话框 (参见图01)。

利用参数 "R_ID" 定义发送任务和接收任务的一致性。"R_ID" 在接收端 FB9 "URCV" 和发送端 FB8 "SEND" 必须匹配。

FB9的输入参数"SD_1"用来指定接收数据区的地址和长度(接收缓冲区)。例如:P#DB200.DBX0.0 BYTE 10。

输出参数 "NDR", "ERROR" 和 "STATUS" 用于任务评估,三个参数只有在同一循环周期中才有效。

第一次调用 FB9 "URCV" 时的输入参数为 ID=1和 R_ID=1。

S7-300 中如何编程通信块 FB8 "USEND" 和 FB9 "URCV" 进行数据交换?
图. 08

当 FB9 运行完成,块的状态字被保存用于错误分析。

S7-300 中如何编程通信块 FB8 "USEND" 和 FB9 "URCV" 进行数据交换?
图. 9

提示:

  • 手册 "The manual "System and Standard Functions for S7-300/400 Volume 1/2" 第22章中 提供了更多关通信块 FB8 "USEND" 和 FB9 "URCV"的信息,例如:通过 FB8 "USEND" 和 FB9 "URCV" 可以传输的最大数据量。该手册可通过条目号: 44240604下载。
  • 关于组态非指定 S7 连接进行数据通信的信息可参考条目号: 17628518.

STEP 7 项目下载:
该 STEP 7 项目包含调用 FB8 和 FB9 及状态评估的例子程序。该项目使用STEP 7 V5.5 创建。

S7-300 中如何编程通信块 FB8 "USEND" 和 FB9 "URCV" 进行数据交换? Sample_S7-300_USEND_URCV.zip ( 332 KB )

注意:
需要从 SIMATIC_NET_CP 库或者是标准库中拷贝出最新版本的通讯块 FB8 和 FB9 到用户程序中,然后再调用它。

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

(1)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日 下午12:03
下一篇 2021年4月12日 上午12:00

相关推荐

发表回复

登录后才能评论