系统函数(SFC)与系统函数块(SFB)固化在S7的CPU中,相当于系统提供可供用户程序调用的FC和FB,实现与CPU系统相关的一些功能,如读写CPU的时钟、CPU状态指示灯信号等功能。SFC、SFB与FC、FB调用方式相同,调用SFB时也需要背景数据块存储相关信息,由于固化在CPU中,SFC、SFB的内容和序号不能修改。
与OB一样,可供调用的SFC、SFB与CPU的型号相关,通过CPU的技术手册可以找到该CPU支持的SFC、SFB的详细信息或在线直接查看CPU中包含SFC、SFB的内容。如果用户程序中调用的SFC、SFB在CPU中没有固化,CPU因不能识别而报错。SFC、SFB的序号、功能分类见表7-11。
表7-11 系统函数(SFC)与系统函数块(SFB)
(续)
(续)
(续)
(续)
(续)
(续)
SFC与SFB实际上是PLC系统与用户程序的接口函数、函数块,通过调用SFC/SFB,实现对PLC内部信息的读取和功能的控制。下面以例子的方式介绍SFC/SFB的使用。
1.设置CPU的时钟
查看表7-11,通过调用SFC0,可以设置CPU的时钟信息,时钟信息的数据类型为复合数据类型DT(DATE_AND_TIME),共8B(按字节排序表示的内容为:年、月、日、时、分、秒、毫秒中前两个有效数字、第8个字节高4位为毫秒中第三个有效数字,低4位为星期值),不能使用普通数据类型(普通数据类型最多4B)接收时钟信息,复合数据类型DT必须在DB或L堆栈(临时变量)中预先定义,例如在DB1中建立一个DT类型的变量,变量的符号名称为“Clock”,如图7-26所示。(www.xing528.com)
图7-26 在DB1中创建DT数据类型变量
在OB1中调用SFC1,程序如下:
系统函数SFC0执行后,修改时钟的月、日、分、秒信号,其他保持原有时钟值,调用SFC0时,应注意只能采用信号触发的方式调用,否则时钟信号保持不变。
2.读出带有诊断功能模拟量输入模块的断线诊断信息
模拟量模块连接4~20mA信号,如果信号低于3.6mA时,模块判断连接传感器的导线断开并报警,通过调用SFC51或SFC59,可以将诊断信息读出。模块的诊断功能必须预先设定,SM331模块参数化界面如图7-27所示。
选择电流测量,可以使能断线诊断功能,如果激活“Diagnostic Interrupt”诊断中断,断线故障同时触发OB82(选择激活“Diagnostic Interrupt”功能,故障出现时,调用OB82一次。同时调用SFC51或SFC59的数量受到CPU资源的限制,如果在OB82中调用,只有在故障事件发生时,才调用SFC51、SFC59,节省CPU内部通信资源)。
SM331模块诊断信息存储于模块数据记录区1中,共16B长度,基于通道诊断信息存储于9~16B中,共8个通道,每个通道占用一个字节,每个字节的位信号分别表示故障的类型,如图7-28所示。
图7-27 SM331参数化界面
图7-28 通道诊断故障信息
假设模块的逻辑地址为256,调用SFC51或SFC59都可以读出第一个通道的断线诊断信息,在OB82中调用SFC51读出SM331模块诊断信息的示例程序如下:
读出第一通道的诊断信息存储于DB1.DBB8中,如果DB1.DBX8.4为1,连接传感器的导线断开。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。