在梯形图中,我们都经常要用到上升沿和下降沿指令,书写起来也比较简单,只是不同PLC之间的差异比较大,如下图的西门子和三菱:
左:西门子PLC上升沿表达方式;
右:三菱PLC上升沿表达方式;
虽然表达形式不同,单其实原理都是一样的,都是根据检测信号由OFF状态突然变为ON状态的一瞬间,给出一个扫描周期的TURE信号,在西门子PLC中直接显示了用于辅助记录的信号;其实在三菱中也是同样的道理,只是不显示。
边沿触发指令的用途:比如我们有一个按钮,虽然我们只是按一下,但是与PLC的执行扫描时间比,按下的那一次接通时间已经远远大于了PLC的执行扫描时间,那么如果要让指令只执行一次就无法满足,特别是在伺服控制或其他高精度要求的控制系统中。所以就引入了边沿触发指令,那么在ST语言中如何表示呢?
·上升沿触发指令
在西门子PLC中:
"R_TRIG_DB_2"(CLK:=_bool_in_,Q=>_bool_out_);
在三菱PLC中:
R_TRIG_1(CLK:=<表达式>,Q:=<变量>);
根据以上上升沿表达方式可以看出,不同PLC之间表现形式还是有差异的,当然我们也可以根据触发原理,引入中间变量利用之前分享的逻辑运算符编写同样功能的ST语言上升沿指令。
·下降沿触发指令
下降沿与上升沿用法刚好相反,是用来检测信号由ON状态变为OFF状态的瞬间,送出一个接通一个扫描周期ON的信号。同样来看一下西门子和三菱PLC中表达形式:
"F_TRIG_DB"(CLK:=_bool_in_,Q=>_bool_out_);西门子
F_TRIG_1(CLK:=<表达式>,Q=<变量>);
下面我们变换一个等同的上升沿触发指令(利用检测上升沿原理):
按上图西门子PLC中的上升沿信号(三菱中不显示辅助BOOL变量)来转换,此处我们需要引入一个辅助变量,定义一个M_1;
M_1 := “REV” AND NOT “Tag_1”;
“Tag_1” := “REV”;
同样,还是拿电机的正反转控制电路为例子,如果我们采用启动按钮按下后松开的时候让电机开始旋转;那么用下降沿指令如何编写呢?欢迎留言讨论。下篇分享编写方法。