OPENG

 

OPENG 布尔工具


OPENG 布尔工具只提供了一个函数,用来判断布尔变量的上升沿和下降沿。在PLC编程中,上升沿和下降沿的概念非常重要,在数据采集中也同样很常用。

当布尔量前一个装状态为FALSE,当前状态为TRUE,我们称之为“上升沿”,当布尔量前一个状态为TRUE,当前状态为FALSE,称之为下降沿。

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

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

Paragraph.

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



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



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

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

bool count(bool button) /* Up Trig */ 

{

   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个状态,在每一个状态中又可以分解成三个子状态,进入准备(初始化),运行,退出(清理),显然进入准备和退出清理必须是在条件发生变化的时候执行一次,这就需要沿的操作。

我们看看OPENG是如何实现的,它使用了LV2型全局变量,用未初始化的移位寄存器保持上次的值,并与本次值相比较,进而判断出上升沿和下降沿。

判断上升沿和下降沿有多种方法,LABVIEW逐点分析库中也提供了类似的函数,功能更为强大,FPGA也提供了同样功能的函数,由于FPGA资源的宝贵,因此它判断的方法更赋予技巧性,因为这不属于OPENG的内容,我将在别的专栏中讨论。