0

我正在尝试一种通用的方法来编程只有当位从高到低时才为真(做一些逻辑)的东西。

编程语言无关紧要,但我更喜欢 JAVA 或结构化文本。

任何帮助,将不胜感激。

4

2 回答 2

1

在使用 ST 的 IEC61131-3 世界中,这可以使用F_TRIG(下降触发器)来实现。

只需声明一个 F_TRIG 并使用布尔值调用它并检查是否启用了 F_TRIG (Q):

VAR
   yourFTrig : F_TRIG;
END_VAR
------------------------
yourFTrig(CLK := yourBoolean);
IF yourFTrig.Q THEN
   // Your code that shall be executed only when we have a falling trigger
END_IF
于 2021-03-18T13:06:43.143 回答
0

为了检测上升沿或下降沿,程序必须循环工作。在 PLC IEC 61131-3 中,它已经在循环中工作。有两种检测边缘的方法。@Jacob 已经描述了一个。它是使用F_TRIGR_TRIG功能块。

让我演示一下这个逻辑的基本原理。

PROGRAM demo
  VAR
    xStart : BOOL; (* Bit that we detect edge on *) 
    xStartM: BOOL; (* Bit to store value from last cycle *)
  END_VAR
  
  IF xStart AND NOT xStartM THEN
      (* Rising edge detected *)
  END_IF

  IF NOT xStart AND xStartM THEN
      (* Falling edge detected *)
  END_IF
  xStart := xStartM;
END_PROGRAM;

注意xStart := xStartM;。这条线上方的所有内容都将xStartM等于上xStart一个周期的值。这意味着如果我们在该行之前使用ёШАё,我们可能会发现它xStartTRUExStartM仍然不是,因此这是我们切换的时刻。

在 JAVA 中,您使用相同的技术,但您必须在一段时间内完成所有操作。我不知道 JAVA,但这是它在 PHP 中的样子。

<?php
$am = false;
while(true) {
    $a = getA();
    if ($a && !$am) {
        // rise edge
    }
    if (!$a && $am) {
        // fall edge
    }
    $am = $a;
    sleep(1);
}
于 2021-03-19T05:12:38.663 回答