Просмотр полной версии : Почему не работает TON внутри FB
Добрый день. Объясните плиз, почему не работает таймер CH_timer ( TON) внутри POMPCH12 (FB). Я не совсем новичок в ПЛК но первый раз пишу на CoDeSys v2... Мне нужно что бы вёлся обратный отсчёт в счётчике CH_ch по выше названому таймеру.
Уже и так попробовал и так и книжку со справкой несколько раз перечитал по разделу ФБ... :((
Чуть не забыл - ПЛК110.32 старой версии
я уже не знаю как его вызывать. И в цикле и в тело основной программы вставил и переменные глобальными сделал... Программа заходит в ФБ, но внутри этого ФБ есть таймер ТОН. Этот таймер не считает. Почему?
zendo057
08.03.2017, 17:50
Функциональный блок нужно вызвать в основной программе.Читайте примеры и полезности
Добрый день. Объясните плиз, почему не работает таймер CH_timer ( TON) внутри POMPCH12 (FB).
У Вас внутри этого блока таймер в каждом цикле сбрасывается и снова устанавливается, поэтому не успевает сработать. Поставьте в симуляторе точку останова где-нибудь на 6 строке в этом блоке и понажимайте клавишу F5 и F8 и при этом контролируйте свой таймер (можно рядом открыть окно с переменными, там где у Вас таймер задан).
Вот кусок кода упростил до максимума. Таймер запущен, но счёт нет. И не могу понять почему. Помогите...
Вот кусок кода упростил до максимума. Таймер запущен, но счёт нет. И не могу понять почему. Помогите...
Выражение CH_timer.IN:=true не запускает таймер. Чтобы запустить таймер надо его вызвать. Добавь - CH_timer()
То есть везде нужно использовать такую конструкцию 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:=переменная);
и др. варианты передачи параметров в вызываемый таймер.
Для проверки срабатывания используешь CH_timer.Q
Василий Кашуба
14.03.2017, 14:58
Для проверки срабатывания используешь CH_timer.Q
Работу таймера можно посмотреть по значение_времени1 := CH_timer.ET;
ferret, спасибо за столь подробное объяснение, хотя это лишнее. Я не совсем валенок... просто зациклился на использовании в программе конструкции типа CH_timer.IN:= значение; Вместо того что бы использовать CH_timer(IN:=true . Хотя и так делал... И таймер считал, но я не обращал внимание на такую разницу. Ещё раз спасибо. Буду пробовать
Василий, вам тоже маленькое спасибо :)
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot