新闻中心

EEPW首页 > 测试测量 > 设计应用 > 谈谈UP TRIG 和DOWN TRIG

谈谈UP TRIG 和DOWN TRIG

作者:时间:2017-01-09来源:网络收藏
上文提到了上升沿和下降沿的问题,因为感觉非常实用,再详细谈一下.

沿检测在PLC中用的非常多,PLC是循环扫描的,可以看做是LABVIEW的一个WHILE循环,在PLC中是这样定义的.

本文引用地址:http://www.eepw.com.cn/article/201701/337253.htm

DF:当检测到输入触发信号的上升沿时,仅将触点闭合一个扫描周期。
DFI:当检测到输入触发信号的下降沿时,仅将触点闭合一个扫描周期。
程序示例


示例说明
在检测到 X0的上升沿(OFF→ON)时,Y0仅为 ON一个扫描周期。
在检测到 X1的下降沿(ON→OFF)时,Y1仅为 ON一个扫描周期。


描述
当触发信号状态从 OFF 状态到 ON状态变化时,DF 指令才执行并且输出仅接通一个扫描周期。
当触发信号状态从 ON状态到 OFF 状态变化时,DFI 指令才执行并且输出仅接通一个扫描周期。
若执行条件最初即为闭合,则 PLC接通电源,则不会产生输出。


在LV编程中经常也会遇到类似的问题.

比如统计按钮按下的次数,不采用事件结构而是采用POLLING方式,在C语言中是这样编程的.

boolcount(bool button) /* UpTrig */

{

static int counter=0;

static bool button_Old=FALSE;

if(Button && !Button_Old)counter++; /*OLD=FALSE,NEW=TRUE -->UP TRIG */

button_Old=button /*Update Old Status ,相当于LV的shift Register */

return(Button &&!Button_Old);

}

如果不是沿检测,如if(Button) counter++; 如果按钮一直处于按下状态,将导致COUNTER不断增加,这显然不是我们希望的结果.

再比如一个状态机结构,可以分成N个状态,在每一个状态中又可以分解成三个子状态,进入准备(初始化),运行,退出(清理),显然进入准备和退出清理必须是在条件发生变化的时候执行一次,这就需要沿的操作.

LABVIEW本身就提供了沿判断的VI,在逐点分析库其它中.




它的代码如下图:



它可以根据选择检测FALSE-->TRUE(UP), TRUE-->FALSE(DOWN) 或者EITHER,(UP AND DOWN)

OpenG也提供了一个类似的VI,



这两个VI都是利用了未初始化的SHIFT REGISTER,封装在子VI中,这是一个非常重要的概念,称做LV2型全局变量或者Function Global,以后会专门讨论



关键词: UPTRIGDOW

评论


技术专区

关闭