您现在的位置是:首页 > PLC技术 > PLC技术
S7-300/400组态全局数据通信
来源:艾特贸易2017-06-05
简介1 .全局数据通信 通过全局数据 ( Global data , GD) 通信,同一个 MPI 子网中最多 15 台 S7-300/400 和 C7 之间可以周期性地相互交换少量的数据。每个 CPU 都可以访问其他 CPU 的过程输入、过程
1.全局数据通信
通过全局数据( Global data,GD)通信,同一个MPI子网中最多15台S7-300/400和C7之间可以周期性地相互交换少量的数据。每个CPU都可以访问其他CPU的过程输入、过程输出、标志位(M)、定时器、计数器和数据块中的数据。
全局数据通信使用CPU的MPI接口,不需要增加通信硬件,对CPU也没有特殊的要求,因此这是一种经济而有效的通信方式,但是只能传送少量的数据。
全局数据通信采用广播方式来传输数据,数据的接收没有确认信息。全局数据通信不能保证通信数据的完整性和准确性。
只需要在STEP 7的网络组态工具NetPro中用全局数据表对全局数据通信组态,设置各CPU之间需要交换的数据存放的地址区和通信的速率等参数,运行时CPU的操作系统就可以实现周期性的全局数据交换,不需要用户对全局数据通信编程。
2.全局数据的结构
(1)全局数据环
参与收发全局数据包的CPU组成了全局数据环(GD Circle)。CPU可以向同一个环中的其他CPU发送数据或接收数据。在一个MPI网络中,最多可以建立16个GD环。每个GD环最多允许15个CPU参与全局数据交换。
(2)全局数据包
同一个全局数据环中具有相同的发送者和接收者的全局数据组成一个全局数据包(GD Packet)。GD包和GD包中的数据均有编号,例如GD1.2.3是1号GD环的2号GD包中的3号数据。每个全局数据占全局数据表中的一行。
(3) CPU的全局数据功能
S7-300 CPU可以发送和接收的GD包的个数(4个或8个)与CPU的型号有关,每个GD包最多22B数据。
S7-400 CPU可以发送和接收的GD包的个数与CPU的型号有关,可以发送8个或16个GD包,接收16个或32个GD包,S7- 400之间每个GD包最多54B数据。S7-400 CPU具有对全局数据交换的控制功能,支持事件驱动的数据传送方式。
3.生成和填写GD表
用鼠标右键点击NetPro中的MPI网络线,执行弹出的快捷菜单中的“定义全局数据”命令。在出现的GD表对话框(见图7-14)中对全局数据通信进行组态。
双击“GD ID”(GD标识符)所在单元右边的灰色单元,在出现的“选择CPU”对话框中,双击CPU413-1的图标,CPU 413-1便出现在全局数据表最上面一行指定的方格中(见图7-14),同时自动退出“选择CPU”对话框。用同样的方法将另外两个CPU放置在最上面一行。
在CPU下面一行生成1号GD环1号GD包中的1号数据,将CPU 413-1的IW0发送到CPU 313C的QW0。
图7-14 全局数据表
首先用鼠标右键点击CPU 413-1下面的单元(方格),执行出现的快捷菜单中的“发送器”命令,该方格变为深色,同时在单元的左端出现符号“>”,表示在该行中CPU413-1为发送站,在该单元中输入要发送的全局数据的地址IW0。只能输入绝对地址,不能输入符号地址。包含定时器和计数器地址的单元只能作为发送方。在每一行中应定义一个并且只能有一个CPU作为数据的发送方。同一行中各个单元接收或发送的字节数应相同。
用鼠标左键选中CPU 313C下面的单元,直接输入QW0,该单元的背景为白色,表示在该行中CPU 313C是接收站。
变量的复制因子用来定义连续的数据区的长度,例如MB20:10表示从MB20开始的10B。S7-300的数据包最大22B,MB0:22表示从MB0开始的22B,MW0:11表示从MW0开始的11个字。如果数据包由若干个连续的数据区组成,一个连续的数据区占用的空间为数据区内的字节数加上两个头部说明字节。一个单独的双字占6B,一个单独的字占4B,一个单独的字节占3B,一个单独的位也占3B。值得注意的是第一个连续数据区的两个头部说明字节不包括在22B之内。例如DB2. DBB0:10和QW0:5一共占用22B。
在图7-14的第1行和第2行中,CPU 413-1和CPU 313C组成1号GD环,两个CPU分别向对方发送GD包,同时接收对方的GD包,相当于全双工点对点通信方式。
图7-14中的第3行是CPU 413-1向CPU 313C和CPU 312C发送GD包,相当于1:N的广播通信方式。
图7-14中的第4行和第5行都是CPU 312C向CPU 413-1发送数据,它们是3号GD环1号GD包中的两个全局数据。
发送方CPU自动地周期性地将指定地址中的数据发送到接收方指定的地址区中。例如图7-14中的第5行意味着CPU 312C定时地将QW0~QW4中的数据发送到CPU 413-1的MB30~MB39。CPU 413-1对它自己的MB30~ MB39的访问,就好像在访问CPU 312C的QW0~QW4一样。
完成全局数据表的输入后,应点击工具条中的按钮,对它进行第一次编译,将各单元中的变量组合为GD包,同时生成GD环。图7-14中的“GD ID”列中的GD标识符是在编译时自动生成的。
4.设置扫描速率和状态双字的地址
扫描速率用来定义CPU刷新全局数据的时间间隔。在第一次编译后,执行菜单命令“查看”→“扫描速率”,每个数据包将增加标有“SR”的行(见图7-15),用来设置该数据包的扫描速率(1~ 255),扫描速率的单位是CPU的循环扫描周期,S7-300默认的扫描速率为8,S7-400的为22,用户可以修改默认的扫描速率。如果选择S7- 400的扫描速率为0,表示是事件驱动的GD数据传输。扫描速率如果过快,可能造成通信中断。
图7-15 设置扫描速率与状态双字
可以用GD数据传输的状态双字来检查数据是否被正确地传送,第一次编译后执行菜单命令“查看”→“GD状态”,在出现的GDS行中可以给每个数据包指定一个用于状态双字的地址。最上面一行的全局状态双字GST是各GDS行中的状态双字相“或”的结果。状态双字中使用的各位的意义可查阅有关的手册,被置位的位将保持其状态不变,直到它被用户程序复位。
状态双字使用户程序能及时了解通信的有效性和实时性,增强了系统的故障诊断能力。
设置好扫描速率和状态双字的地址后,应对全局数据表进行第二次编译,使扫描速率和状态双字地址包含在组态数据中。
5.下载与运行
第二次编译完成后,需要将组态好的信息下载到各CPU。比较方便的是使用计算机上安装的网卡(例如CP 5611或CP 5613),通过MPI网络下载和监控通信过程。
首先分别单独下载各CPU的MPI地址。然后用MPI电缆连接编程用的计算机和3台PLC的MPI接口,令各台PLC均处于STOP模式。点击按钮,可以在下载对话框中选择下载到所有CPU,或只下载到选中的CPU。
下载完成后将各CPU切换到RUN模式,各CPU之间将开始自动地交换全局数据。由图7-14可知,CPU 413-1和CPU 313C的IW0分别控制对方的QW0,运行时改变某台PLC输入点的状态,观察对方对应的输出点是否随之而变。
在运行时同时打开各个站的变量表,调节它们的大小后,可以在屏幕上同时显示各变量表中的动态数据。用变量表改变发送站发送的变量的值,观察接收站对应的地址区中的变量的值是否随之而变。也可以在OB35中编写简单的程序,使发送的数据不断地动态变化,观察数据传输的动态效果。
6.通信错误组织块OB87
在使用通信功能块或全局数据( GD)通信进行数据交换时,如果出现下列通信错误,操作系统将调用OB87:
1)接收全局数据时,检测到错误的帧标识符(ID)。
2)全局数据通信的状态信息数据块不存在或太短。
3)接收到非法的全局数据包编号。
如果没有生成和下载OB87,CPLT将切换到STOP状态。
7.事件驱动的全局数据通信
使用SFC 60“GD_SEND”和SFC 61“GD_RCV”,S7-400之间可以用事件驱动的方式发送和接收GD包,实现全局通信。在全局数据表中,必须对要传送的GD包组态,并将GD列的扫描速率设置为0。
为了保证全局数据交换的连续性,在调用SFC 60之前应调用SFC 39“DIS_IRT”或SFC 41“DIS_AIRT”来禁止或延迟更高级的中断和异步错误。SFC 60执行完后调用SFC 40“EN_IRT”或SFC 42“EN_AIRT”,允许处理高优先级的中断和异步错误。下面是用SFC 60发送数据包GD3.1的程序。
程序段1:延迟处理高中断优先级的中断和异步错误
CALL“DIS_AIRT” //调用SFC 41,延迟处理高中断优先级的中断和异步错误
RET_VAL := MW100 11返回的错误信息
程序段2:发送全局数据包GD 3. 1
A I 0.0
FP M 1.0
JNB _001 //不是I0.0的上升沿则跳转
CALL “GD_SND” //调用SFC 60
CIRCLE_ID :=B#16#3 //GD环编号,允许值为1~16
BLOCK_ID :=B#16#1 //GD包编号,允许值为1~4
RET_VAL :=MW102 //返回的错误信息
_001:NOP 0
程序段3:允许处理高中断优先级的中断和异步错误
CALL“EN_AIRT" //调用SFC 42,允许处理高中断优先级的中断和异步错误
RET_VAL := MW104 //返回的错误信息
CIRCLE_ID和BLOCK_ID分别是要发送的全局数据包的GD环和GD包的编号,允许的取值范围可以查阅CPU的技术数据。上述编号是用STEP7组态GD数据表时设置的。
RET_VAL是返回的错误信息,错误信息代码可以查阅有关的手册。
点击排行
