前面的文章《西门子SCL编程入门教程连载(5)-沿信息检测指令》,有小伙伴留言问:
SCL里使用沿检测必须使用DB块码?和梯形图不能一样么?
网友留言今天这篇文章,我来回答这个问题。
第一种情况:
如果使用SCL语言指令列表中的R_TRIG或者F_TRIG指令,在添加这些指令的时候系统会自动添加背景数据块或者多重背景数据块,所以这种情况下必须使用数据块的;
第二种情况:
沿信号检测指令的关键之处在于要记住之前的信号状态,然后将当前的信号状态与之前的进行比较,从而来判断是否是上升沿或者下降沿。
基于这一原理,我们可以自己编写沿信号检测代码:
首先,创建功能块FB_EdgeDetect,声明变量如下:
request:用于检测的输入信号;
edgeUp:上升沿输出信号;
edgeDown:下降沿输出信号;
requestMemory:输入信号的记忆值(上一个扫描周期的状态值),注意是静态变量;
编写代码如下:
当然,在FB中实现该代码仍然需要背景数据块。所以,我也介绍下如何在FC中实现这个功能。
比如,创建一个功能FC_EdgeDetect,声明变量如下:
代码不用变,如下:
在OB1中调用FC_EdgeDetect的示例代码如下:
需要注意的是,requestMemory要使用全局变量或者静态变量,不能使用临时变量;
好了,关于自己编写沿信号检测的代码就先介绍到这里,有任何问题欢迎留言。
我最近开通了