无确认数据交换S7通讯系统功能块SFB8/SFB9的编程说明

S7通信简介S7通信是S7系列PLC基于MPI、PROFIBUS、ETHERNET网络的一种优化的通信协议,主要用于S7300/400PLC之间的通信。SIMATICS7-PNCPU包含一个集成的PROFINET接口,该接口除了具有PROFINETI/O功能,还可以进行基于以太网的S7通信。SIMATICS7-PNCPU支持无确认数据交换、确认数据交换和单边访问功能。功能块的调用如图所示。


本文主要针对无确认的数据交换通讯系统功能块SFB8、SFB9来进行介绍,在S7-300中用的是FB8/FB9,功能是一样的。

2、组态硬件及配置网络

插入两个400的站,并分别插入两个400CPU。如下图所示:


打开网络组态,配置CPU2(414CPU的连接属性)


勾选"建立主动连接"也就是说CPU2作为CLIENT,而CPU1作为SERVER。我们就可以做CPU1发送给CPU2数据了。


打开两个仿真器,并分别将两个站点下载到仿真器中去。


激活连接,查看连接状态


到此硬件组态及网络配置就完成了,主要注意的是ID,这个ID号在调用系统功能块中会用到。

3、编程

3.1.无确认数据交换SFB/FB8"USEND"向类型为"URCV"的远程伙伴SFB/FB发送数据。执行发送过程而不需要和SFB/FB伙伴进行协调。也就是说,在进行数据传送时不需要伙伴SFB/FB进行确认。S7-300:在REQ的上升沿处发送数据。在REQ的每个上升沿处传送参数R_ID、ID和SD_1。在每个作业结束之后,可以给R_ID、ID和SD_1参数分配新数值。S7-400:在控制输入REQ的上升沿处发送数据。通过参数SD_1到SD_4来指向要发送的数据,但并非都需要用到所有四个发送参数。然而,必须确保参数SD_1到SD_4/SD_1和RD_1到RD_4/RD_1(在相应通讯伙伴SFB/FB"URCV"上)所定义的区域在以下几个方面保持一致:

•编号

•长度

•数据类型

参数R_ID必须在两个SFB中完全相同。如果传送成功完成,则通过状态参数DONE来表示,此时其逻辑数值为1。SFB/FB9"URCV"从类型为"USEND"的远程伙伴SFB/FB中异步接收数据,并把接收到的数据复制到组态的接收区域内。当程序块准备好接收数据时,EN_R输入处的逻辑值为1。可以通过EN_R=0来取消一个已激活的作业。S7-300:在EN_R的每个上升沿处应用参数R_ID、ID和RD_1。在每个作业结束之后,可以给R_ID、ID和RD_1参数分配新数值。S7-400:通过参数RD_1到RD_4来指向接收数据区。必须确保参数RD_i/RD_1和SD_i/SD_1(在相应通讯伙伴SFB/FB"USEND"上)所定义的区域在以下几个方面保持一致:

•编号

•长度

•数据类型。

通过NDR状态参数逻辑数值为1来指示已经成功完成复制处理过程。参数R_ID必须在两个SFB/FB上完全相同。

3.2新建一个FC,并在FC中调用SFB8

在CPU1中建立FC1,并做如下程序:


在CPU2中建立FC1,并做如下程序:


本例的程序就是发送开始的4个字节给CPU2的开始的4个字节。

要注意的是ID为在网络组态中的ID。R_ID两个要保持一致。同时RD_1和SD_1的长度也要保持一致。

仿真如下所示:


免责声明:本文章如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系