-
Использование таймеров
Подскажите, как правильно пользоваться таймерами CodeSys в такой ситуации: после выполнения некоторой операции А операция В должна выполняться не ранее чем через 10 с, причем сама операция А может выполняться повторно до истечения этого интервала. Использовать TP не получается: согласно описанию, он, будучи раз запущен, уже ни на что не реагирует.
Если написать так:
delay: TOF:=(PT:=T#10s);
delay(IN:=FALSE);
if condition_for_A then
do_A;
delay(IN:=TRUE);
delay(IN:=FALSE);
end_if
if not delay.Q then
do_B;
end_if
это будет работать? Или delay(IN:=TRUE) / delay(IN:=FALSE) нужно разносить по разным циклам?
-
Естественно разносить, иначе он так и незапустится. При операции А его, когда необходимо, нада запускать и тикакать:
delay: TON:=(PT:=T#10s);
if condition_for_A then
do_A;
delay(IN:=TRUE);
end_if
а в В контролировать и отключать:
if delay.Q then
do_B;
delay(IN:=FALSE);
end_if
Последний раз редактировалось Назаров Александр; 20.12.2008 в 17:51.
-
Сообщение от
Назаров Александр
...
При этом он запустится на первой операции А и отработает, а мне нужно обеспечить задержку от последней . Возможно, я не очень понятно объяснил в первом посте - сейчас подредактировал его.
Последний раз редактировалось alex1963; 21.12.2008 в 11:01.
-
А если так?
PROGRAM PLC_PRG
VAR
R_TRIG1: R_TRIG;
RS1: RS;
TON1: TON;
condition_for_A: BOOL;
PUSK_TIME_B: BOOL;
PUSK_B: BOOL;
STOP_B: BOOL:=1;
END_VAR
__________________________
R_TRIG1(CLK:=PUSK_TIME_B );
RS1(SET:=R_TRIG1.Q , RESET1:=STOP_B );
TON1(IN:=RS1.Q1 , PT:=T#10s , Q=>PUSK_B );
IF condition_for_A THEN
TON1(IN:=FALSE );(*это если требуется, что б запуск В был только по последнему А*)
do_A;
IF STOP_B THEN
PUSK_TIME_B:=1;
STOP_B:=0;
END_IF
END_IF
IF PUSK_B THEN
do_B;
PUSK_TIME_B:=0;
STOP_B:=1;
END_IF
Последний раз редактировалось Jeck; 21.12.2008 в 16:31.
Ваши права
- Вы не можете создавать новые темы
- Вы не можете отвечать в темах
- Вы не можете прикреплять вложения
- Вы не можете редактировать свои сообщения
-
Правила форума