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

Тема: Использование таймеров

  1. #1

    По умолчанию Использование таймеров

    Подскажите, как правильно пользоваться таймерами 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) нужно разносить по разным циклам?

  2. #2

    По умолчанию

    Естественно разносить, иначе он так и незапустится. При операции А его, когда необходимо, нада запускать и тикакать:

    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.

  3. #3

    По умолчанию

    Цитата Сообщение от Назаров Александр Посмотреть сообщение
    ...
    При этом он запустится на первой операции А и отработает, а мне нужно обеспечить задержку от последней . Возможно, я не очень понятно объяснил в первом посте - сейчас подредактировал его.
    Последний раз редактировалось alex1963; 21.12.2008 в 11:01.

  4. #4

    По умолчанию

    А если так?
    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.

Ваши права

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