上一篇文章我们谈到了SCL的沿检测指令——R_TRIG和F_TRIG。如果每一个沿检测指令都要使用一个背景数据块(DB),那多次使用的情况下程序中岂不是会有很多的数据块,这篇文章,我们再来谈谈这个话题。
的确,如果在FC(功能)中使用沿检测指令,我们必须为其创建相应的数据块,这是因为FC没有属于自己的背景数据块,不能保存静态变量。
如果在程序中需要多次使用沿检测指令,建议使用FB(功能块)而非FC(功能)。由于FB有自己的背景数据块,这样,我们可以把沿检测指令需要保存的静态数据存放到FB的背景数据块中,并且可以采用多重背景数据块的方式,来减少程序中需要添加的数据块(DB)的数量。
举个例子:假如我们有三台电机需要进行启停控制。
启动按钮的PLC地址分别是:
I0.0(标签名:E_Start_Motor1);
I0.1(标签名:E_Start_Motor2);
I0.2(标签名:E_Start_Motor3);
添加FB到主程序中,命名为:FB_SCL_Test。
向FB中添加上升沿触发指令:R_TRIG,在出现添加背景数据块对话框中选择“多重背景数据”,并命名为:R_TRIG_Motor1,如下图:
此时可以看到,FB_SCL_Test的静态变量存储区中增加了R_TRIG_Motor1一项,如下图:
同样的方式添加Motor2和Motor3的上升沿触发指令,背景数据块名称分别为:R_TRIG_Motor2和R_TRIG_Motor3,如下图:
接下来我们编程来显示三台电机启动按钮的上升沿检测,这里我们采用两种代码方式:
第一种方式我们采用上篇文章介绍的方法,使用中间变量M0.0(标签名称:Interflag_Motor0),代码如下:
第二种方式采用简单的方法,不使用中间变量,代码如下:
第一种方式的上升沿检测,可以通过判断中间变量M0.0的值是否为1来启动电机,代码如下:
第二种方式的上升沿检测,则需要判断背景数据块中的静态变量来启动电机,代码如下:
可以看出,第一种代码的可读性很好,但显得有点啰嗦;第二种代码很简洁,但可读性稍微差点,选择哪种方式,完全取决个人的爱好。
下降沿的多重背景设置于此类似,不在赘述。
代码写到这里并没有完成,虽然我们在FB_SCL_Test中设置存储静态变量,但到目前为止FB_SCL_Test还是没有背景数据块。
所以,接下来我们要创建一个背景数据块。
可以动手创建。不过简单的办法是在主程序块Main,或者别的FC,FB块中调用FB_SCL_Test,系统会自动提示创建背景数据块FB_SCL_Test_DB,单击确认即可。
打开数据块FB_SCL_Test_DB,可以看到其静态存储区中有我们设置的R_TRIG_Motor2、R_TRIG_Motor2和R_TRIG_Motor3,这样程序就可以正常运行了,如下图:
好了,关于沿检测指令,又做了一次笔记,两种方法,按照自己的习惯使用。