利用BSEND/BRCV功能实现S7-300/400与WinCC的大数据量交换

本文介绍了如何在WinCC中使用BSEND/BRCV类型的原始数据类型,来实现与S7-300/400 PLC的大数据量交换。

一.WinCC BSEND/BRCV功能介绍

WinCC 支持Rawdata(原始数据)类型的变量,可以实现和PLC的批量数据交换。其中Send/Receive类型的Rawdata变量因其受PDU尺寸的限制(240/480字节),故最大尺寸为208/448 字节,能够实现中小规模的批量数据交换。

但对于大批量的数据交换可以考虑使用AR_SEND和BSEND/BRCV功能。两者都需要PLC端调用功能块,主动将最大16K字节的数据发到WinCC的Rawdata变量。

AR_SEND(SFB37)只适用于S7-400 系列PLC,S7-300PLC不支持。

关于此内容请参见文档:

WinCC 高速数据采集的实现(点击)

而对于BSEND/BRCV 功能,PLC端需要调用BSEND/BRCV功能块(SFB12/13,FB12/13)将数据发送给WinCC的Rawdata变量。使用 S7-300PLC也可以实现(需要CP模板或集成的PN口等硬件支持)。但WinCC无法直接在画面中使用该变量,需要用脚本处理字节数组的方式来访问它。

本文以Step7 5.4 、WinCC V6.2和CPU315 -2 PN/DP 为例,利用以太网实现8K字节的批量数据交换。

二.Step7 中的组态:

打开Simatic Manager, 新建项目插入一个S7-315 - 2 PN/DP 站,在硬件组态HW Config中设置PN口的IP地址:192.168.2.125 ,子网掩码:255.255.255.0。 并为其建立一个子网。

编译保存并下载该硬件组态。

点击工具栏上的NetPro按钮或点击菜单“Option”->“Configure Network”,打开NetPro编辑器。 点击选中S7-300站中的CPU315-2PN/DP,然后右键单击下面列表的空白处,出现菜单,如下图所示:

在点击菜单第一项“Insert New Connection”, 在弹出的对话框中点选 “(Unspecified)”

点击 “OK”确认输入,然后弹出下面的对话框:

请按上图所示设置,其中

1:此处IP为WinCC站的IP地址;

2:Local ID 在Step7的BSEND/BRCV中会用到;

3:不要选择此选项;

4:完后点击按钮“Address Details… ”, 在弹出的对话框中的Partner 列中选择连接资源 10,如下图所示:该参数会在WinCC的连接中使用:

完后点击 “OK”,一次关闭各对话框。保存编译NetPro,确认编译正确,然后点选该S7-300站后将该组态信息下载到PLC。

建立共享数据块DB1作为发送到WinCC的数据区(或用来接收WinCC的数据),在其中定义一个含有8000个字节元素的数组:

打开OB1,在语句表状态下输入“CALL SFB12, DB12”回车, 这样会自动将 SFB12 /BSEND函数和其背景数据块自动生成,同样调用“CALL SFB13, DB13”,具体示例程序如下:

注意:函数BSEND/BRCV中的参数 ID 就是NetPro中的 Local ID; R_ID要和WinCC中的设置一致。对于BSEND:SD_1为发送区始地地址和发送区最大长度;LEN: 为要发送数据的长度(字节)(本例中请先给MW204赋值:8000 )

对于BRCV:RD_1为接收区起始地址和接收区最大长度;LEN: 为接收到数据的长度(字节)。

编译保存OB1。

关于函数的详细说明请参见Step7的帮助文档。

在OB100中给 BSEND的LEN参数MW204 赋初值 8000:

保存编译OB100。

完后将整个站下载到PLC。

选中CPU,下载整个站。

三.WinCC的设置:

设置WinCC站的IP地址:在计算机“控制面板”“网络连接”中设置网卡的IP地址为:192.168.2.232,与NetPro 中的设置一致,子网掩码:255.255.255.0。可以用Ping 命令,确认网络是否连通。

注意:WinCC的IP地址必须和NetPro中所设置的IP一致。

打开WinCC新建项目。在变量管理器中添加通道“Simatic S7 Protocol Suite”,然后右键单击 “TCP/IP”,添加“新驱动程序连接”,参照下图设置:

图中 :

3:选择发送接收原始数据块

4:此处 连接资源与 BSEND/BRCV中的R_ID参数要一致。

添加Rawdata类型的变量“Raw”:

设置变量地址:选择类型为“BSEND/BRCV”;设置R_ID为 15,务必与BSEND/BRCV功能块中的参数R_ID一致。

设置WinCC逻辑设备名:右键单击TCP/IP,点击系统参数项

在弹出式对话框的第二页中,下拉菜单中选择或直接输入“CP-TCPIP”

确定,退出WinCC,并重新启动WinCC。

接下来,需要在操作系统的控制面板中设置“Set PG/PC interface”中的访问节点 “CP-TCPIP”:

双击“设置PG/PC接口”,弹出对话框,在下拉菜单中选择“CP-TCPIP” 项(如下图所示的 1)。如果没有该项,选择“<添加/删除>”(如下图所示的 2),添加一个 “CP-TCPIP” 访问节点。然后将该访问节点指向实际的物理网卡(如下图所示的 1)。

至此,通讯设置完成。

在WinCC编写脚本读写PLC的DB块。

打开WinCC 图形编辑器,在画面上放置两个按钮和一个诊断对话框,

一个按钮用来向PLC写入8000个BYTE的数据(下图中的2);

一个按钮用来从PLC读取8000个BYTE的数据(下图中的1)。

诊断对话框(下图中的3)是一个“应用程序窗口”,用来显示PLC数据。在对象选项板的智能对象中可以找到它,将其放置到画面上时选择其模式为“Globle Script”和“GSC Diagnostics”,注意该对象的名称应改为英文字母,如“aaa”等,如是中文对象名时,无法显示诊断内容。

图中4是点击“SetRawData”按钮时触发的一次性写入PLC 8000 字节数据的示例脚本。

下面的脚本为点击“GetRawData”按钮时触发的一次读取8000字节数据的示例脚本。

激活 WinCC运行系统。

可以通过WinCC通道诊断确定连接建立。

下图为WinCC运行画面中点击按钮“GetRawData”后,诊断窗口中显示的部分RawData数据:

注意:读取数据前,先将M200.0(REQ)置1,让PLC 调用BSEND将数据发送到WinCC的缓冲区中,否则缓冲区中可能没有数据,显示为0; 或数据没有更新,为上一次的值。

写入操作:在WinCC运行画面中点击按钮SetRawData,数组a[8000]将被写入到PLC,注意因为M300.0 空闲时一直为1,即BRCV的EN_R处于使能状态,故可以随时接收WinCC的写入数据。