Показано с 1 по 4 из 4

Тема: Пробный меандр на таймерах

  1. #1

    По умолчанию Пробный меандр на таймерах

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

    Почему не работает тест ПЛК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

  2. #2

    По умолчанию

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

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

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

  3. #3

    По умолчанию

    вызывайте таймеры до входа в 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;

  4. #4

    По умолчанию

    Цитата Сообщение от swerder Посмотреть сообщение
    вызывайте таймеры до входа в 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

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •