Сообщение от
Umkamaks
Доброго Вам суток форумчане! Кто подскажет как использовать таймеры, счетчки, блинки в методах класса! Использую псевдо-ООП при построении приложения на языке ST!
Добрый день!
Чтобы внести ясность, при использовании таймера невозможно "затормозить" выполнение POU, функции, метода до тех пор пока не сработает таймер.
В остальных случаях используйте такой подход:
1.1) В теле ФБ объявляете экземпляр таймера (счетчика, триггера и т.д.)
Код:
FUNCTION_BLOCK POU
VAR
m_fb_Delay : Standard.TON;
END_VAR
1.2) Добавляете метод:
Код:
(*
Возвращает TRUE, когда истекла пауза в 30 секунд
*)
METHOD isDelayPassed : BOOL
VAR_INPUT
END_VAR
в котором, собственно и вызываете таймер, например так:
Код:
m_fb_Delay.IN := TRUE;
m_fb_Delay.PT := T#30S;
m_fb_Delay();
isDelayPassed := m_fb_Delay.Q;
Вариант №2:
2.1) Объявляете таймер (счетчик, триггер и т.д.) непосредственно в методе
между ключевыми словами VAR_INST и END_VAR
Код:
(*
Возвращает TRUE, когда истекла пауза в 30 секунд
*)
METHOD isDelayPassed : BOOL
VAR_INST
_fb_Delay : Standard.TON;
END_VAR
VAR_INST указывает, что переменная относится не к методу, а к экземпляру класса и ее значения будут сохраняться между вызовами.
2.2) Работаете с таймером так же, как в предыдущем варианте
Код:
_fb_Delay.IN := TRUE;
_fb_Delay.PT := T#30S;
_fb_Delay();
isDelayPassed := _fb_Delay.Q;
Возможен еще вариант №3, в котором таймер (счетчик, триггер и т.д.) вызывается непосредственно в теле ФБ, а метод только получает доступ к переменным, например так:
3.1) В теле ФБ объявляете экземпляр таймера (счетчика, триггера и т.д.)
Код:
FUNCTION_BLOCK POU
VAR
m_fb_Delay : Standard.TON;
END_VAR
Вызываете таймер тут же в теле:
Код:
m_fb_Delay.IN := TRUE;
m_fb_Delay.PT := T#30S;
m_fb_Delay();
3.2) А в методе:
Код:
(*
Возвращает TRUE, когда истекла пауза в 30 секунд
*)
METHOD isDelayPassed : BOOL
VAR_INPUT
END_VAR
просто узнаете, сработал таймер или нет
Код:
isDelayPassed := m_fb_Delay.Q;
Выбор конкретного варианта будет зависеть от задачи.