Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 17 из 17

Тема: как воспользоваться RISING_EDGE?

  1. #11

    По умолчанию

    Видимо я чего-то сильно не понимаю в особенностях программирования на МЭК.

    почему такой код не работает:

    Код:
    VAR_GLOBAL
    	f: BOOL := FALSE;
    	t: Standard.TON;
    END_VAR
    
    IF (f = FALSE)	THEN
    	f:=TRUE;
    	t(IN:=f, PT:=T#2S);
    END_IF
    
    IF (t.Q) THEN
    	f := FALSE;
    END_IF
    а такой работает:

    Код:
    VAR_GLOBAL
    	f: BOOL := FALSE;
    	t: Standard.TON;
    END_VAR
    
    (*IF (f = FALSE)	THEN *)
    	f:=TRUE;
    	t(IN:=f, PT:=T#2S);
    (*END_IF*)
    
    IF (t.Q) THEN
    	f := FALSE;
    END_IF

    ???

  2. #12
    Пользователь
    Регистрация
    05.11.2011
    Адрес
    Томск
    Сообщений
    192

    По умолчанию

    Не понятно, что вы хотели добиться?

  3. #13

    По умолчанию

    хотел, что бы t.q сработало.

    т.е. вопрос, почему однократная инициализация глобальной переменной не приводит к срабатыванию таймера?
    Последний раз редактировалось Goga2000; 21.11.2014 в 08:53.

  4. #14
    Пользователь
    Регистрация
    05.11.2011
    Адрес
    Томск
    Сообщений
    192

    По умолчанию

    Код:
    VAR_GLOBAL
    	f: BOOL := FALSE;
    	t: Standard.TON;
    END_VAR
    
    IF (f = FALSE)	THEN       // При первом вызове данного ЕСЛИ мы войдем внутрь условия и начнем выполнять ФБ таймера. 
    	f:=TRUE;            // При последующих вызовах данной программы внутрь условия мы не зайдем, так как f = TRUE. 
    	t(IN:=f, PT:=T#2S); // Чтобы таймер досчитал до 2сек., его надо вызывать. Он у вас вызвался 1 только раз, дальше вы к этому таймеру не обращаетесь
    END_IF
    
    IF (t.Q) THEN  // Соответственно таймер до конца не досчитал и t.q не появилось. 
    	f := FALSE;
    END_IF
    Понятно?

    Ну и немного теории по работе контроллера:
    gl2-3.jpg
    Прогон программы ПЛК и организация памяти: (а) действие ПЛК; (б) последовательность выполнения программы; (в) организация памяти ПЛК
    Последний раз редактировалось Amko; 21.11.2014 в 11:05.

  5. #15

    По умолчанию

    Я себе несколько по другому это представлял. Видимо, предыдущий опыт программирования в не-МЭК средах сказывается.
    Теперь вроде все встает на свои места.

    т.е. обращение к t.Q для проверки его состояния не является обращением к самому таймеру?
    что тогда считать обращением к ФБ? для ТОН достаточно будет обновлять значение IN, или надо еще и РТ обновлять?

  6. #16
    Пользователь
    Регистрация
    05.11.2011
    Адрес
    Томск
    Сообщений
    192

    По умолчанию

    Если вы хотите обратиться к выходу таймера - пишите t.Q
    Чтобы таймер работал (считал, выполнялся) надо его вызывать. Т.е. таймер должен вызываться безусловно, всегда. Если таймер надо перезапустить, следует переменную на входе IN хотя бы на один такт изменить с 1 на 0 и обратно.

    В следующем коде пример периодического сигнала (выход t.q) с длиной импульса = один такт.

    Код:
    VAR_GLOBAL
    	f: BOOL := FALSE;
    	t: Standard.TON;
    END_VAR
    
    t(IN:=f, PT:=T#2S);
    
    IF (t.Q) THEN
    	f := FALSE;
    ELSE
    	f := TRUE;
    END_IF

  7. #17
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    т.е. обращение к t.Q для проверки его состояния не является обращением к самому таймеру?
    Лучше, конечно, говорить о вызове, а не об обращении. «Обновлять» (а правильнее — присваивать значение) обязательно только с переменными типа VAR_IN_OUT. На примере с таймером можно один раз сделать timer(IN := TRUE, PT := T#3s), а дальше просто timer(); или даже timer; (за такое я хочу убивать), чтобы таймер работал. Однако timer.Q уже не будет вызовом ФБ таймера, это обращение к переменной ФБ без вызова.
    Код:
    VAR_GLOBAL
    	f: BOOL := FALSE;
    	t: Standard.TON;
    END_VAR
    
    t(IN:=f, PT:=T#2S);
    
    IF (t.Q) THEN
    	f := FALSE;
    ELSE
    	f := TRUE;
    END_IF
    Отвыкаем писать бессмысленный код. Всё сводится к t(IN := NOT t.Q, PT := T#2s). Самосброс называется. Идиома.
    Последний раз редактировалось Yegor; 21.11.2014 в 14:19.

Страница 2 из 2 ПерваяПервая 12

Похожие темы

  1. Хочется как лучше,не получилось бы как всегда
    от Алекс2013 в разделе Подбор Оборудования
    Ответов: 2
    Последнее сообщение: 07.10.2014, 21:31
  2. Подскажите - Каким прибором лучше воспользоваться..
    от Nikita13 в разделе Подбор Оборудования
    Ответов: 2
    Последнее сообщение: 21.11.2012, 21:05

Ваши права

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