通过全局数据(Global data,GD)通信,同一个MPI子网中最多15台S7-300/400之间可以周期性地相互交换少量的数据。每个CPU都可以通过全局数据通信访问其他CPU的过程输入、过程输出、存储器标志位(M)、定时器、计数器和数据块中的数据。
1.全局数据通信的特点
1)使用CPU集成的MPI接口,不需要增加硬件成本,就可以实现多CPU之间的通信。
2)使用简单方便。只需要组态,不需要编程。
3)可以实现事件驱动的全局数据通信,只是在事件发生时才调用SFC来发送数据。
4)传输的数据量较少,有S7-300参与时每个全局数据包仅22B。
5)采用广播方式来传输数据,数据被接收后不返回确认信息,不能保证通信数据的完整性和准确性。如果要求进行可靠的数据交换,应使用S7通信或其他通信服务。
2.全局数据的结构
(1)全局数据环
参与收发全局数据包的CPU组成了全局数据环(GD Circle)。CPU可以向同一个环内的其他CPU发送数据或接收数据。在一个MPI网络中,最多可以建立16个GD环。每个GD环最多允许15个CPU参与全局数据交换。
(2)全局数据包
每个全局数据占全局数据表中的一行。同一个全局数据环中,具有相同的发送站和接收站的全局数据的字节数之和如果没有超出允许值,编译时它们被自动组合成一个全局数据包GD Packet)。GD 3.1.2是3号GD环的1号GD包中的2号全局数据。
(3)CPU的全局数据通信功能
S7-300 CPU可以发送和接收的GD包的个数(4个或8个)与CPU的型号有关,S7-400 CPU可以发送8个或16个GD包,接收16个或32个GD包,有S7-300参与的每个GD包最多22B数据,S7-400之间每个GD包最多54B数据。
3.组态MPI网络
在SIMATIC管理器中新建一个项目,项目名称为“MPI_GD”(见随书光盘中的同名例程)。首先在SIMATIC管理器中生成3个站,对它们的硬件组态,它们的CPU分别为CPU 413-1、CPU 313C和CPU 312C。单击SIMATIC管理器的工具栏上的按钮,打开网络组态工具NetPro,出现了一条自动生成的标有MPI(1)的网络,以及没有与网络相连的3个站的图标,图9-1是已经连接好的MPI网络。
图9-1 NetPro中已连接好的MPI网络
双击某个站的CPU方框中的小红方块,打开MPI接口属性对话框(见图9-2),用鼠标选中“参数”选项卡的“子网”列表框中的“MPI(1)”,该行的背景变为深蓝色,单击“确定”按钮,CPU被连接到MPI(1)子网上。也可以将图9-1的CPU方框中的小红方块直接“拖放”到MPI网络上,该站便被连接到网络上了。
可以用“地址”选择框设置MPI站地址,各站的MPI地址应互不重叠。用同样的方法将3个站连接到MPI网络,并设置好它们在MPI网络中的站地址。在“网络设置”选项卡可以设置子网的传输速率,一般采用默认的187.5 kbit/s。
图9-2 MPI接口与MPI网络属性组态
4.生成和填写GD表
用鼠标右键单击NetPro中的MPI网络线,执行弹出的快捷菜单中的“定义全局数据”命令。在出现的全局数据表中(见图9-3),对全局数据通信进行组态。
图9-3 全局数据表
双击“全局数据(GD)ID”(全局数据标识符)右边的灰色单元,在出现的“选择CPU”对话框左边的窗口中(见图9-4),打开SIMATIC 400站点,双击其中的“CPU 413-1”图标,自动关闭“选择CPU”对话框,CPU 413-1站点出现在全局数据表最上面一行指定的方格中。用同样的方法,在最上面一行生成另外两个S7-300站点。
图9-4 “选择CPU”对话框
在CPU下面的第一行生成第一个全局数据,将CPU 413-1的IW0发送给CPU 313C的QW0。“全局数据(GD)ID”列各行的GD标识符是编译后生成的。(www.xing528.com)
选中CPU 413-1下面第一行的单元,单击工具栏上的按钮,该单元变为深色,同时在单元的左端出现符号“>”,表示在该行中CPU 413-1为发送站,在该单元中输入要发送的全局数据的地址IW0。只能输入绝对地址,不能输入符号地址。包含定时器和计数器地址的单元只能作为发送方。在每一行中应定义一个并且只能有一个CPU作为数据的发送方。同一行中各个单元接收或发送的字节数应相同。用左键选中CPU 313C下面的单元,直接输入QW0,该单元的背景为白色,表示在该行中CPU 313C是接收站。
在图9-3的第1行和第2行中,CPU 413-1和CPU 313C组成1号GD环,两个CPU分别向对方发送GD包,同时接收对方的GD包,相当于全双工点对点通信方式。
变量的复制因子用来定义连续的数据区的长度,例如MB10:8表示从MB10开始的连续的8个字节(8B)。图9-3中的第3行是CPU 413-1向CPU 313C和CPU 312C发送GD包,相当于1:N的广播通信方式。
为CPU 312C生成共享数据块DB2,在DB2中生成一个10B的数组。图9-3中的第4行和第5行都是CPU 312C向CPU 413-1发送数据,它们是3号GD环1号GD包中的两个全局数据。
S7-300的数据包最大22B,MB20:10表示从MB20开始的10B,MB30:10表示从MB30开始的10B。如果全局数据包由若干个连续的数据区组成,一个连续的数据区占用的空间为数据区的字节数加上两个头部说明字节。一个单独的双字占6B,一个单独的字占4B,一个单独的字节占3B,一个单独的位也占3B。值得注意的是第一个连续数据区的两个头部说明字节不包括在22B之内,例如DB2.DBB0:10和MB10:10一共占用22B。
发送方CPU自动地周期性地将指定地址中的数据发送到接收方指定的地址区中。例如图9-3中的第5行意味着CPU 312C定时地将MB10~MB19中的数据发送到CPU 413-1的MB30~MB39。CPU 413-1对它自己的MB30~MB39的访问,就好像在访问CPU 312C的MB10~MB19一样。
完成全局数据表的输入后,应单击工具栏上的编译按钮,对它进行第一次编译,将发送方、接收方相同的某些全局变量组合为GD包,同时生成GD环。图9-3中的“全局数据(GD)ID”列中的GD标识符是在编译时自动生成的,不是用户输入的。
5.设置扫描速率和状态双字的地址
扫描速率用来定义CPU刷新全局数据的时间间隔,其单位是CPU的扫描周期。在第一次编译后,执行菜单命令“查看”→“扫描速率”,每个数据包将增加标有“SR”的行(见图9-5),用来设置该数据包的扫描速率(1~255),S7-300默认的扫描速率为8,S7-400的扫描速率为22,用户可以修改它们。如果设置S7-400的扫描速率为0,表示是事件驱动的GD数据传输。扫描速率如果过快,可能造成通信中断。建议采用默认的扫描速率。
可以用GD数据传输的状态双字来检查数据是否被正确地传送,第一次编译后执行菜单命令“查看”→“GD状态”,在出现的GDS行中可以给每个数据包指定一个用于状态双字的地址。最上面一行的全局状态双字GST是同一个CPU各GDS行中的状态双字相“或”的结果。状态双字中被使用的各位的意义见表9-1,被置位的位将保持其状态不变,直到它被用户程序复位。
图9-5 设置扫描速率与状态双字
表9-1 GD通信的状态双字
状态双字使用户程序能及时了解通信的有效性和实时性,增强了系统的故障诊断能力。
6.下载与运行
设置好扫描速率和状态双字的地址后,应单击工具栏上的编译按钮 ,对全局数据表进行第二次编译,从激活的全局数据表创建系统数据,并将它们保存到全局数据表指定的CPU的系统数据中。可以在SIMATIC管理器中将系统数据分别下载到各CPU,也可以在全局数据表中将它的组态数据分别下载到各CPU。
下载完成后用电缆连接各CPU的MPI接口,将各CPU切换到RUN模式,CPU之间将开始自动地交换全局数据。在循环周期结束时发送方的CPU发送数据,在循环周期开始时,接收方的CPU将接收到的数据传送到相应的地址区中。
由图9-3可知,CPU 413-1和CPU 313C的IW0分别控制对方的QW0,可以在运行时改变某台PLC的IW0中输入点的状态,观察对方对应的QW0中输出点的状态是否随之而变。
可以在OB35中编写简单的程序,使发送的数据不断地动态变化。在运行时同时打开各个站的变量表,调节它们的大小后,可以在屏幕上同时显示各变量表中的动态数据。也可以用变量表改变发送站发送的变量的值,观察接收站对应的地址的变量值是否随之而变。
7.通信错误组织块OB87
在使用全局数据(GD)通信时,如果出现下列通信错误,操作系统将调用OB87:
1)接收全局数据时,检测到错误的帧标识符(ID)。
2)在全局数据通信期间帧长度出错。
3)接收到非法的全局数据包编号。
如果没有生成和下载OB87,在出现上述通信错误时,S7-300 CPU切换到STOP模式,S7-400 CPU不会切换到STOP模式。
8.事件驱动的全局数据通信
调用SFC60“GD_SEND”和SFC61“GD_RCV”,S7-400之间可以用事件驱动的方式发送和接收GD包,实现全局数据通信。应在全局数据表中组态用事件驱动方式发送的GD包,并将该GD包的扫描速率设置为0。参考文献[1]给出了事件驱动的全局数据通信的例子。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。