北岛夜话
原创工业智能控制领域(PLC、单片机/嵌入式、机器人、通信、机器视觉)的技术及经验分享。
文章528 浏览8060089

西门子SCL编程入门教程连载(6)-再谈沿检测指令

上一篇文章我们谈到了SCL的沿检测指令——R_TRIG和F_TRIG。细心的小伙伴在阅读文章后提出一个问题:如果每一个沿检测指令都要使用一个数据块(DB),那多次使用的情况下程序中岂不是会有很多的数据块?这篇文章,我们再来谈谈这个话题。

cover.png

的确,如果在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,如下图:

R_Tirg_mutil_instance.png

此时可以看到,FB_SCL_Test的静态存储区中增加了R_TRIG_Motor1一项,如下图:

FB_static_1.png

同样的方式添加Motor2和Motor3的上升沿触发指令,背景数据块名称分别为:R_TRIG_Motor2和R_TRIG_Motor3,如下图:

FB_static_2.png

接下来我们编程来显示三台电机启动按钮的上升沿检测,这里我们采用两种代码方式:
第一种方式我们采用上篇文章介绍的方法,使用中间变量M0.0(标签名称:Interflag_Motor0),代码如下:

r_trig1.png

第二种方式采用简单的方法,不使用中间变量,代码如下:

r_trig2.png

第一种方式的上升沿检测,可以通过判断中间变量M0.0的值是否为1来启动电机,代码如下:

r_trig_detect1.png

第二种方式的上升沿检测,则需要判断背景数据块中的静态变量来启动电机,代码如下:

r_trig_detect2.png/

可以看出,第一种代码的可读性很好,但显得有点啰嗦;第二种代码很简洁,但可读性稍微差些。选择哪种方式,完全取决你的爱好。

下降沿的多重背景设置与此类似,不再赘述。
代码写到这里并没有完成。虽然我们在FB_SCL_Test中设置存储静态变量,但到目前为止FB_SCL_Test还是没有背景数据块。
所以,接下来我们要创建一个背景数据块。
可以手动创建。不过简单的办法是在主程序块Main中调用FB_SCL_Test,系统会自动提示创建背景数据块FB_SCL_Test_DB,单击确认即可。
打开数据块FB_SCL_Test_DB,可以看到其静态存储区中有我们设置的R_TRIG_Motor1、R_TRIG_Motor2和R_TRIG_Motor3,这样程序就可以正常运行了。如下图:

instance_DB.png

好了,关于沿检测指令我们又讨论了一篇,感谢那个提问题的小伙伴。看似很简单的沿检测指令,仔细思考还是有些内涵。欢迎扫描下方的二维码关注我们的微信公众号。

founderchip.png

西门子SCL编程入门教程连载(6)-再谈沿检测指令.pdf

来源:本站|   大小:467KB|   下载次数:1790次

取消

感谢您的支持,欢迎常来看看!

扫码支持
一点动力,多少随意

打开支付宝扫一扫,即可进行扫码打赏哦

发表评论