我正在尝试想一种通用的方式来编程,只有当从高到低的时候,它才是真的(做一些逻辑)。
编程语言无关紧要,但我更喜欢JAVA或结构化文本。
任何帮助都将不胜感激。
发布于 2021-03-18 21:06:43
在使用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-19 13:12:39
为了检测上升沿或下降沿,程序必须循环工作。在PLC IEC 61131-3中,它已经循环工作。有两种方法可以检测边缘。其中一个已经被@Jacob描述过了。它使用的是F_TRIG和R_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的值。这意味着如果我们在该行之前使用ёШАё,我们可能会发现xStart是TRUE,但xStartM仍然不是,因此是我们切换的时刻。
在JAVA中,你可以使用相同的技术,但你必须在一段时间内完成所有这些工作。我不知道JAVA,但下面是它在PHP中的样子。
<?php
$am = false;
while(true) {
$a = getA();
if ($a && !$am) {
// rise edge
}
if (!$a && $am) {
// fall edge
}
$am = $a;
sleep(1);
}https://stackoverflow.com/questions/66691273
复制相似问题