Чтобы обнаружить нарастающий или спадающий фронт, программа должна работать циклически. В ПЛК IEC 61131-3 это уже работает циклами. Существует 2 способа обнаружения края. Один уже описан @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);
}
person
Sergey Romanov
schedule
19.03.2021