PDA

Просмотр полной версии : R_Trig



igal
21.05.2014, 11:43
Добрый день. Пытаюсь создать апликацию которая бы начинала бы двигать мотор по событию изменения значения переменной BOOL. Попытался для этого использовать R_Trig но система реагирует только на первое нажатие, во всех последуюших нажатиях Q остается FALSE. Посоветуйте пожалуйсто есть ли способ обнулить значение R_Trig или для таких задач существует какая то более удобная команда ?

GoodLuck
21.05.2014, 12:25
При каждом переходе переменной Start в значение TRUE, R-trig будет выдавать короткий импульс
VAR
Start: BOOL;
R_TRIG1: R_TRIG;
Q1: BOOL;
END_VAR

R_TRIG1(CLK:=Start , Q=>Q1 );

IF Start THEN Start := FALSE;
END_IF

Валенок
21.05.2014, 13:39
Для реакции на все передние фронты - просто нужно вызывать фб
VAR
Start: BOOL;
R_TRIG1: R_TRIG;
END_VAR

R_TRIG1(CLK:=Start); // событие для отработки - R_TRIG1.Q
И все.

А если нужно ловить вообще любое изменение чего-либо, то тригеры не нужны - нужны копии.
var
V, Копия : любой тип

if V <> Копия then
Копия := V;
... //отработка события
end_if

igal
21.05.2014, 14:54
Спасибо. Заработало. Теперь пойду читать как используется Ламда (=>) в Codesys :)

Yegor
22.05.2014, 08:20
Нету в кодесисе никакой лямбды. Единственное, что умеет =>, так это присваивать в обратном направлении значения переменных ФБ внешним переменным. Помимо внешнего сходства ничего общего с лямбдами в других языках не имеет.