PDA

Просмотр полной версии : Почему не работает TON внутри FB



RomanB
08.03.2017, 09:43
Добрый день. Объясните плиз, почему не работает таймер CH_timer ( TON) внутри POMPCH12 (FB). Я не совсем новичок в ПЛК но первый раз пишу на CoDeSys v2... Мне нужно что бы вёлся обратный отсчёт в счётчике CH_ch по выше названому таймеру.
Уже и так попробовал и так и книжку со справкой несколько раз перечитал по разделу ФБ... :((
Чуть не забыл - ПЛК110.32 старой версии

RomanB
08.03.2017, 15:14
я уже не знаю как его вызывать. И в цикле и в тело основной программы вставил и переменные глобальными сделал... Программа заходит в ФБ, но внутри этого ФБ есть таймер ТОН. Этот таймер не считает. Почему?

zendo057
08.03.2017, 17:50
Функциональный блок нужно вызвать в основной программе.Читайте примеры и полезности

amn
09.03.2017, 00:29
Добрый день. Объясните плиз, почему не работает таймер CH_timer ( TON) внутри POMPCH12 (FB).
У Вас внутри этого блока таймер в каждом цикле сбрасывается и снова устанавливается, поэтому не успевает сработать. Поставьте в симуляторе точку останова где-нибудь на 6 строке в этом блоке и понажимайте клавишу F5 и F8 и при этом контролируйте свой таймер (можно рядом открыть окно с переменными, там где у Вас таймер задан).

RomanB
13.03.2017, 19:31
Вот кусок кода упростил до максимума. Таймер запущен, но счёт нет. И не могу понять почему. Помогите...

Dimensy
14.03.2017, 10:24
Вот кусок кода упростил до максимума. Таймер запущен, но счёт нет. И не могу понять почему. Помогите...
Выражение CH_timer.IN:=true не запускает таймер. Чтобы запустить таймер надо его вызвать. Добавь - CH_timer()

RomanB
14.03.2017, 11:43
То есть везде нужно использовать такую конструкцию CH_timer(IN:=true )? А для проверки срабатывания CH_timer(Q=>true )?

ferret_maybe
14.03.2017, 12:47
То есть везде нужно использовать такую конструкцию CH_timer(IN:=true )? А для проверки срабатывания CH_timer(Q=>true )?
Вызов таймера можно выполнить CH_timer(IN:=true ) и таким способом, но тогда как изменять входное воздействие?
1. Вызов CH_timer()
Обращение к параметрам
CH_timer.IN:= значение; (*нyжно вставить переменную boolean*)
CH_timer.PT:= значение_времени; (*нужно вставить переменную времени типа Time*)
значение_времени1 := CH_timer.ET; (*выходной переменной присваиваешь во временную тип Time*)
Выход_таймера:= CH_Timer.Q; (*здесь пояснений не нужно*);

2. CH_timer(IN:=переменная); (*тоже вызов таймера, но "переменная" уже передается как параметр при вызове*)
(*далее можно можно подставлять параметры в другие переменные *)
CH_timer.PT:= значение_времени; (*нужно вставить переменную времени типа Time*)
значение_времени1 := CH_timer.ET; (*выходной переменной присваиваешь во временную тип Time*)
Выход_таймера:= CH_Timer.Q; (*здесь пояснений не нужно*);

3. CH_timer(PT:=переменная);

и др. варианты передачи параметров в вызываемый таймер.

Dimensy
14.03.2017, 14:51
Для проверки срабатывания используешь CH_timer.Q

Василий Кашуба
14.03.2017, 14:58
Для проверки срабатывания используешь CH_timer.Q
Работу таймера можно посмотреть по значение_времени1 := CH_timer.ET;

RomanB
14.03.2017, 15:28
ferret, спасибо за столь подробное объяснение, хотя это лишнее. Я не совсем валенок... просто зациклился на использовании в программе конструкции типа CH_timer.IN:= значение; Вместо того что бы использовать CH_timer(IN:=true . Хотя и так делал... И таймер считал, но я не обращал внимание на такую разницу. Ещё раз спасибо. Буду пробовать

RomanB
14.03.2017, 15:28
Василий, вам тоже маленькое спасибо :)