使用SFC 60“GD_SEND”和SFC61“GD_RCV”,S7-400之间可以用事件驱动的方式发送和接收GD包,实现全局数据通信。应在全局数据表中组态用事件驱动方式发送的GD包,并将该GD包的扫描速率设置为0。
打开SIMATIC管理器,新建一个名为“MPI_GD_B”的项目(见光盘中的同名例程)。
用鼠标右键点击项目图标,执行出现的快捷菜单中的命令,插入一个SIMATIC 400站点(见图14-22)。用鼠标双击右边窗口中的“硬件”图标,打开硬件组态工具HW Config,将电源模块、CPU 413-2DP和信号模块插入机架。
图14-22 组态好的MPI网络
双击S7-400的机架中MPI/DP所在的行,点击打开的对话框中的“属性”按钮,在打开的MPI接口属性对话框中,将CPU连接到MPI网络上,采用默认的MPI地址2和默认的网络参数,传输速率为187.5kbit/s。
在SIMATIC管理器中生成另一个S7-400站。在HW Config中,将CPU 413-1和电源模块、信号模块插入机架,设置CPU的MPI地址为3,将它连接到MPI网络上。
在SIMATIC管理器生成数据块DB1、DB2和组织块OB100、OB35、OB87,在各数据块中生成一个数组。各CPU的OB100和OB35中的程序见随书光盘中的项目MPI_GD_3。
关闭HW Config,点击SIMATIC管理器的工具栏上的按钮,打开网络组态工具NetPro,可以看到MPI网络上的两个站(见图14-22)。
用鼠标右键点击NetPro中的MPI网络线,执行弹出的快捷菜单中的“定义全局数据”命令。用出现的GD表(见图14-23)对全局数据通信组态,将双方的ID0发送到对方的QD0。将双方的DB1中的54B数据发送到对方的DB2。
图14-23 全局数据表
为了实现事件驱动的全局数据通信,将全局数据包GD2.1的扫描速率(SR2.1)设置为0。
SFC 60和SFC 61可以在用户程序中的任何一点被调用,全局数据表中设置的扫描速率不受调用SFC 60和SFC 61的影响。
SFC 60和SFC 61可能被更高优先级的块中断。为了保证全局数据交换的连续性,在调用SFC 60之前,调用SFC 39“DIS_IRT”或SFC 41“DIS_AIRT”,来禁止或延迟更高优先级的中断和异步错误。执行完SFC 60后,调用SFC4 0“EN_IRT”或SFC 42“EN_AIRT”,允许处理高优先级的中断和异步错误。下面是2号站的CPU413-2DP的OB1中的程序,用SFC60发送数据包GD2.1。
程序段1:延迟处理高中断优先级的中断和异步错误
(www.xing528.com)
程序段2:发送全局数据包GD2.1
程序段3:允许处理高中断优先级的中断和异步错误
下面是3号站的OB1调用SFC61接收数据包GD2.1的程序:
将组态信息和程序分别下载到各CPU,然后用PROFIBUS电缆连接编程用的计算机和两台PLC的MPI接口。将两台CPU切换到RUN模式,CPU之间开始自动地交换全局数据。
图14-24~图14-26是系统运行时复制的各站点的变量表。进入RUN模式后,通信双方开始周期性地将ID0传送给对方的QD0,3号站周期性地将DB1中的数据传送到2号站的DB2。
3号站的DB2的前54B数据被OB100初始化为0。在2号站的I0.0的上升沿调用SFC60,将2号站的DB1中的数据传送到3号站的DB2。
图14-24 2号站的变量表
图14-25 3号站刚开始进入RUN模式的变量表
图14-26 3号站事件触发数据发送后的变量表
图14-25和图14-26是I0.0第一个上升沿触发数据发送之前和触发发送之后的3号站的变量表。2号站的DB1的前54B数据被OB100初始化为16#4131,OB35将DB1.DBW0不断加1。在每次I0.0的上升沿,2号站的DB1中的数据被发送给3号站的DB2,3号站的DB2.DBW0的值才会变化。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。