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

Тема: Ton не сбрасывается!

  1. #1

    По умолчанию Ton не сбрасывается!

    пишу такой код:
    myTON(IN:= TRUE ,PT:=t#5s);

    IF myTON.Q=TRUE THEN

    (* Vikl *)
    DO2e:= 0; DO2f:= 0; ; (* Wo2*)
    DO3e:=0; DO3f:= 0; ; DO3i:= 0; (* Wo3*)
    DO4a:= 0; DO4b:= 0; DO4c:= 0; DO4d:= 0; DO4e:= 0; DO4k:= 0; (* Wo4*)
    myTON.IN:= FALSE;
    END_IF;


    в начале запускается счетчик, выход Q через 5 секунд переходит в TRUE, но при IN = FALSE счетчик должен сбрасыватся. А он не сбрасывается ... В чем косяк ? Запускаю прогу режиме симуляции .

  2. #2

    По умолчанию

    Цитата Сообщение от kanava Посмотреть сообщение
    В чем косяк ? Запускаю прогу режиме симуляции .
    Ошибка в том, что вы изменяете только состояние входа, а к самому экземпляру ФБ более не обращаетесь, потому он и не сбрасывается. Правильнее было бы так:

    myTON(IN:= TRUE ,PT:=t#5s);

    IF myTON.Q=TRUE THEN

    (* Vikl *)
    DO2e:= 0; DO2f:= 0; ; (* Wo2*)
    DO3e:=0; DO3f:= 0; ; DO3i:= 0; (* Wo3*)
    DO4a:= 0; DO4b:= 0; DO4c:= 0; DO4d:= 0; DO4e:= 0; DO4k:= 0; (* Wo4*)
    myTON(IN:= false ,PT:=T#5s);
    END_IF;

  3. #3

    По умолчанию

    Цитата Сообщение от Kirill Посмотреть сообщение
    Ошибка в том, что вы изменяете только состояние входа, а к самому экземпляру ФБ более не обращаетесь, потому он и не сбрасывается. Правильнее было бы так:

    myTON(IN:= TRUE ,PT:=t#5s);

    IF myTON.Q=TRUE THEN

    (* Vikl *)
    DO2e:= 0; DO2f:= 0; ; (* Wo2*)
    DO3e:=0; DO3f:= 0; ; DO3i:= 0; (* Wo3*)
    DO4a:= 0; DO4b:= 0; DO4c:= 0; DO4d:= 0; DO4e:= 0; DO4k:= 0; (* Wo4*)
    myTON(IN:= false ,PT:=T#5s);
    END_IF;

    А щас в чем ошибка ?

    CASE RO OF
    0: (* Vkl*)
    CH1:=CH1+1; // CH переменная нужна для не повторения запуска таймера
    DO8a:= 1; DO8b:= 1;


    IF CH1=1 THEN // Запуск таймера если CH1=1
    myTON(IN:= TRUE ,PT:=t#5s);
    END_IF;
    IF myTON.Q THEN

    (* Vikl *)
    DO2e:= 0; DO2f:= 0; ; (* Wo2*)
    myTON(IN:= FALSE) ; // сбрасываем счетчик

    END_IF
    IF CH1>20 THEN CH1:=2 END_IF;
    1: (*Vkl*)
    CH1:=0;
    DO8a:= 1;
    END_CASE;

  4. #4

    По умолчанию

    Значение выходных переменных обновляется только после вызова ФБ,
    таймер запускается по фронту IN, повторный вызов с IN:=true к перезапуску не приводит. Для перезапуска надо сначала выполнить вызов с
    IN:=false, затем снова с IN:=true.

    Должно быть так:

    CASE RO OF
    0: (* Vkl*)
    CH1:=CH1+1; // CH переменная нужна для не повторения запуска таймера
    DO8a:= 1; DO8b:= 1;


    IF CH1=1 THEN // Запуск таймера если CH1=1
    myTON(IN:= TRUE ,PT:=t#5s);
    END_IF;

    myTON(); (*вызов ФБ для обновления переменных *)

    IF myTON.Q THEN

    (* Vikl *)
    DO2e:= 0; DO2f:= 0; ; (* Wo2*)
    myTON(IN:= FALSE) ; // сбрасываем счетчик

    END_IF
    IF CH1>20 THEN CH1:=2 END_IF;
    1: (*Vkl*)
    CH1:=0;
    DO8a:= 1;
    END_CASE;

Ваши права

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