PDA

Просмотр полной версии : Пробный меандр на таймерах



Herzog
25.03.2011, 16:33
Казалось бы примитивная вещь - таймер. Все вроде бы разжевано...

Почему не работает тест ПЛК100 в таком виде:



Out1 := NOT Out1; (* visual circle of PLC *)
CASE Regim OF
0 : (*----------------- some inits ----------------- *)
Regim := 1;
1 : (*----------------- begin ON ----------------- *)
Tm0.IN := FALSE;
Tm1( IN := In0, PT := gTakt );
Out0 := ON; (* indicate meandr *)
Regim := 2;

2 : (*----------------- continue ON / begin OFF ----------------- *)
IF (Tm1.Q = TRUE) THEN
Tm0( IN := TRUE, PT := gTakt );
Out0 := OFF; (* indicate meandr *)
Regim := 3;
END_IF

3 : (*----------------- continue OFF ----------------- *)
IF (Tm0.Q = TRUE) THEN
Tm1.IN := FALSE;
Regim := 1;
END_IF
ELSE (*----------------- crazy ----------------- *)
Tm1.IN := FALSE;
Regim := 1;
END_CASE

Таймер Tm1 не запускается, его Tm.ET не меняется, соответственно из Regim = 2 никуда не уходим.
Почему?

gTakt = 100мсек. Цикл ПЛК - 2...9999 мсек

С уважением,
Herzog

Herzog
27.03.2011, 11:17
Система ничего не пишет в фб. Это он обращается к системе. А для это должен выполнятся его код. В шаге 2 нет вызова кода таймера tm1. B третьем шаге та же байда.Может быть подскажите, как правильно нужно было организовать работу таймера?

И второй вопрос - как организовать таймером или другим способом задержку на одну минуту?

С уважением,
Herzog

swerder
28.03.2011, 10:24
вызывайте таймеры до входа в CASE, в нужном варианте присваиваете входу in нужного таймера true и проверяете его выход:
Tm0(IN := perem0, PT := gTakt);
Tm1(IN := perem1, PT := gTakt);
CASE Regim OF
0: ------
1: perem1:=true;
2: IF (Tm1.Q = TRUE) THEN
perem0 := TRUE;
END_IF;
3: ---
END_CASE;

Herzog
29.03.2011, 09:26
вызывайте таймеры до входа в CASE, в нужном варианте присваиваете входу in нужного таймера true и проверяете его выход:Спасибо, я уже разобрался.
За пределы case выносить не обязательно. Достаточно написать так:

2 : (*----------------- continue ON / begin OFF ----------------- *)
Tm1();
IF (Tm1.Q = TRUE) THEN
Tm0( IN := TRUE, PT := gTakt );
Out0 := OFF; (* indicate meandr *)
Regim := 3;
END_IF

Спасибо,
Herzog