4 Применение таймеров
В отличие от часов реального времени, таймеры не привязаны к времени или календарю Их работа состоит в формировании задержек заданной длительности. Задержки, формируемые таймерами МЭК 61131-3, не влияют на время выполнения прикладной программы. Можно представить таймер как внешний прибор, вход и выход которого подключен к контроллеру (См. рис. 1). Именно так работают стандартные таймеры. Опрашивая таймер, можно узнать, что заданный интервал времени истек. Как быстро вы обнаружите этот факт, зависит не только от дискретности самого таймера, но и от периода его опроса в вашей программе. Вход и выход таймера это логические переменные BOOL. Все таймеры МЭК реализованы как функциональные блоки. Это означает, что можно создать любое количество независимых экземпляров однотипных таймеров.
Рисунок 1 – Функциональный блок таймер TOF
В стандарте предусмотрены три вида таймеров. Все они имеют одинаковый интерфейс:
– вход IN (BOOL) сигнал запуска таймера;
– вход PT (TIME) задание значения времени;
– выход Q (BOOL) выход таймера;
– выход ET (TIME) время, прошедшее от запуска таймера.
TP импульс — формирует импульс заданной PT длительности по переднему фронту IN. Последующий импульс можно сформировать только после окончания предшествующего, т.е. входной сигнал не может влиять на длительность импульса (См. рис. 2).
Рисунок 2 – Временная диаграмма работы таймера TP
TON задержка включения — включает (TRUE) выход Q с задержкой относительно переднего фронта IN на время PT. Если выключить IN до конца интервала PT, то отсчет времени будет прерван (См. рис. 3).
Рисунок 3 – Временная диаграмма работы таймера TON
TOF задержка выключения — выход Q включается вместе со входом IN. Для выключения Q, входной сигнал должен иметь низкий уровень не менее времени заданного PT. (См. рис. 4).
Рисунок 4 – Временная диаграмма работы таймера TOF
Селекция импульса
В качестве примера применения стандартных таймеров реализуем функциональный блок PulseSel. Он должен формировать единичный выходной импульс, на каждый входной сигнал определенной длительности. Годными считаются входные импульсы в пределах от MinDr, до MinDr+OverDr. FBD реализация PulseSel показана на рис. 5.
Рисунок 5 – Функциональный блок PulseSel
Работу PulseSel поясняет рис. 6. Таймер T1 запускается по фронту входного импульса и обеспечивает фильтрацию коротких импульсов. Если минимальная длительность обеспечена, запускается таймер T0. Он отмеряет максимальную длительность импульса.
Рис. 6 – Временная диаграмма работы PulseSel
Внутреннее устройство таймеров
Для того чтобы построить в вычислительной машине таймер необходимо иметь аппаратную поддержку. На самом деле, для любого числа программных таймеров нужен всего один источник точных интервалов времени. Достаточно иметь одну системную переменную, назовем ее для определенности SYS_TIME. По каждому «тику» – прерыванию таймера, ее значение увеличивается на единицу. Дискретность работы таймеров зависит от интервала обновления SYS_TIME. Все экземпляры функциональных блоков таймеров «засекают» стартовое время и рассчитывают длительность по SYS_TIME. Переменная SYS_TIME должна иметь достаточную разрядность, чтобы исключить возможность переполнения за время между вызовами таймеров. Ее разрядность может быть выше разрядности процессора. В этом случае, при чтении ее значения необходимо запрещать прерывания. Внутренняя реализация функциональных блоков таймеров является аппаратно-зависимой и выполняется на системном уровне.
При использовании стандартных таймеров нельзя полагаться на то, что повторный вызов экземпляра функционального блока в одном рабочем цикле даст различные результаты. Значение SYS_TIME может обновляться по прерыванию или синхронно с обновлением входов. Это зависит от реализации системы исполнения. Не используйте в своих программах циклы (WHILE, REPEAT) с условием окончания итераций по таймеру.
Включим в программу задержку. Для этого воспользуемся стандартным функциональным блоком импульс: TP. Назовем экземпляр функционального блока TIMEOUT. Время в задаче фиксировано, поэтому его можно задать сразу при начальной инициализации:
TIMEOUT: TP := (PT := t#0.5s);
Таймер TP запускается переходом значения IN из FALSE в TRUE, при этом выход Q приобретает значение TRUE. Отработав интервал, таймер устанавливает выход Q в FALSE. Для формирования последующего импульса, таймер необходимо вновь запустить.
Как программировать на codesys 2.3 новичку? Легко
Перед тем, как программировать ПЛК в среде разработки CoDeSyS 2.3 новички часто задаются вопросом: А какие системы требуется установить для корректной работы с аппаратом?? А как конфигурировать входы и выходы контроллера?? А каким образом связать устройство с ПК?? И снова, а как, а как?? Все мы с вами понимаем, устройства сложные и алгоритмы объёмные, и на изучение потребуется время. Я вот думаю, может написать небольшую книжку и назвать codesys для чайников? А вы согласны?
Из этой статьи вы узнаете:
Здравствуйте уважаемые коллеги и гости. Пишет вам автор блога kip-world.ru, Гридин Семён, и в этой статье я вам расскажу, как правильно программировать контроллер. Тема достаточно актуальная, я надеюсь после прочтения статьи, некоторые вопросы отпадут самим собой. =)
Как работает ПЛК?
ПЛК(программируемый логический контроллер) — это устройства полностью автоматизирующие работу аппаратов, различных агрегатов и станков. Фактически, это некий блок, который содержит входы и выходы, для подключения датчиков и исполнительных органов. Внутри прописывается логика.
Вычисления в устройстве выполняются циклически. То есть одни и те же действия выполнения программы выполняются в короткий промежуток времени.
В один цикл осуществляемый прибором выполняются следующие операции:
- Начало цикла;
- Чтение состояния входа;
- Выполнение кода пользователя;
- Запись состояния выходов;
- Обслуживание аппаратных ресурсов;
- Монитор системы исполнения;
- Контроль времени цикла;
- Переход на начало цикла;
Не буду больше разглагольствовать по теории. Давайте сразу перейдём к практике.
Из чего состоит программный комплекс для полноценной работы с ПЛК
Конечно вам поначалу покажется, что слишком много нужно знать, чтобы связать друг с другом основное приложение и утилитки, а потом соединить устройство. Я хочу вам сказать, что ничего сложного в процессе установки и связей — нет. В этом поможет моя статья.
Для начала нам нужно установить основной дистрибутив CoDeSyS 2.3 c официального сайта ОВЕН . А, я предлагаю во многих постах, касающихся программирования, использовать устройство ОВЕН ПЛК63 . Так как это универсальное устройство с экраном. У него на борту есть и дискретные входы, и аналоговые входы, и релейные выходы.
Итак, скачиваем программу:
Затем следует стандартная процедура установки. Указываем путь и все время жмём “Далее”, “Далее”.
Следующим этапом будет установка таргетов для плк. Таргет — это некое описание о конфигурации ПЛК. Инструкция подсказывает CoDeSyS 2.3, какое количество и какие входы/выходы имеет устройство.
Скачиваем также с сайта ОВЕН . Рекомендую установить все таргеты, которые там есть. Чтобы потом не искать и не думать об этом, если придется писать алгоритм на другой ПЛК.
Запускаем автоматический установщик, устанавливаем инструкции. Всё, половину пути мы с вами уже сделали в этой работе! После этих всех процедур можно устанавливать библиотеки, но о них позже. Переходим к следующему пункту.
Рабочее окно программы
Дистрибутив мы с вами установили, таргеты тоже. Давайте мы с вами рассмотрим рабочее окно среды разработки, элементы меню и основные вкладки.
Основное поле на рисунке выше делится на три области:
- Редактор переменных и их типов;
- Дерево объектов;
- Редактор основного алгоритма программы;
Редактор переменных — здесь мы с вами вводим переменные и присваиваем им типы данных. Для тех, кто не знает, переменная — это имя, к которому будет обращаться программа и возвращать результат. А тип данных определяет род информации, диапазон представления чисел и множество других операций.
Дерево объектов — в этом окне располагаются такие объекты, как функции, функциональные блоки, подпрограммы, конфигурация ПЛК, библиотеки. Об этом я расскажу позже.
Редактор программы — тут мы с вами описываем основной алгоритм программы работы контроллера. Пишется на любом языке стандарта МЭК. Более подробно, можете прочитать статью .
Простой пример на ST
Для удобства восприятия информации я постарался структурировать. Поэтапно расписал последовательность действий. Если возникнут вопросы или пожелания, обязательно пишите в комментариях.
Изначально я размещу в статье код на языке ST. Логика работы заключается в следующем: на дискретный вход прибора подаётся сигнал и через задержку времени включается выход. В принципе задача простая, и мы с вами её решим.
Программы для ОВЕН ПЛК-150 и ПЛК-154
При создании проекта используется язык непрерывных функциональных схем CFC, реализующий структуры, подобные языку FBD.
После запуска CoDeSys 2.3 новый проект открывается из главного меню: FileàNew. В открывшемся окне выбирается тип контроллера (Configuration) подтверждается нажатием клавиши ОК.
После выбора проекта выводится экранная форма, задающая тип, имя и язык программирования первичного компонента New POU, главной программы контроллера.
После подтверждения выбора нажатием клавиши ОК откроется окно нового проекта с именем по умолчанию Untitled. В нем присутствует одна вкладка POUs. Весь проект хранится в одном файле, имя которого отображается в заголовке окна.
При отсутствие реального подключенного контроллера в CoDeSys 2.3 предусмотрен режим симуляции работы контроллера. Для его включения устанавливается флаг во вкладке главного меню OnlineàSimulation mode.
Программное соединение с контроллером, в том числе и ассимиляционное, включается из главного меню CoDeSys командой OnlineàLogin.
При работе с реальным контроллером флаг перед строкой меню Simulation Mode должен быть снят.
В обоих режимах работы контроллера, запуск работы программы осуществляется выбором команды OnlineàRun.
Программа защиты от обрыва, выброса или провала сигнала для контроллера фирмы Овен представлена на рис.129 Эта программа, аналогична программе приведённой на рис.11.
При отсутствии возможности непосредственного аппаратного имитирования аналоговых сигналов, как например на рис.121, возможно их имитировать средствами среды разработки. Ситуации выброса, провала, обрыва, как следствие, также имитируются программно. Для этого допустимо использовать один из вариантов программного функционального блока аналогового входа analog_in, приведенного на рис. 123.
Примечание: Для создания в проекте среды CoDeSys 2.3 функционального блока, не входящего в стандартную библиотеку доступных алгоритмов, необходимо в основном меню сверху последовательно выбрать ProjectàObjectàAdd. В появившейся форме выбирается тип Function Block (функциональный блок), его имя и желаемый язык программирования.
Для блока analog_in использовался язык CFC, язык непрерывных функциональных схем, аналогичный языку функциональных блоков[26].
VAR_INPUT (*входа функционального блока*)
x: REAL; (*переменная — входной аналоговый сигнал*)
D_vybr: BOOL; D_obr: BOOL; D_prov: BOOL; (*дискретные переменные имитирования выброса, обрыва, провала*)
VAR_OUTPUT (*выходы функционального блока*)
x_out: REAL; (*переменная основного аналогового выхода*)
VAR (*внутренние переменные функционального блока*)
tp1: TP; tp2: TP; (*переменные типа «таймер»*)
Рис. 124 – Функциональный блок для имитации обрыва, выброса и провала сигнала
Суть работы алгоритма в том, что при имитации кратковременного выброса или провала сигнала к входному аналогового сигналу прибавляется (в блоке суммирования ADD) значение 35 или -35 (допустимо как меньшее так и большее значение) в зависимости от команд в течение 1,5 секунд, определяемых при помощи двух таймеров. При отсутствии выбросов и провалов входное значение аналогового сигнала суммируется с величиной 0, то есть остается неизменной. Значения 0 и -35, 35, согласно рисунку 124, подаются на входа блоков переключения SEL Обрыв имитируется переключением на значение ноль.
В библиотеке алгоритмов CoDeSys 2.3 нет блока запоминания, советующего алгоритму для контроллера Ремиконт Р-130. Ниже приведена одна из возможных реализаций алгоритма на языке ST- структурированный текст, полностью соответствующий работе аналогичного блока для контроллера Ремиконт Р-130.
c: BOOL; (*команда к запоминанию*)
x: REAL; (*входной аналоговый сигнал*)
y: REAL; (*выходной аналоговый сигнал*)
Rtr: R_TRIG; (*тип переменной R-триггер, необходим для использования в коде. R_TRIG является алгоритмом выделения переднего фронта*)
tp_time:TP; (*тип переменной «таймер», В алгоритм введен для формирования кратковременного выходного сигнала d1 о моменте запоминания*)
Текст программы на языке ST.
IF d=TRUE THEN y:=x;
Ниже приведено описание стандартных для среды CoDeSys функциональных блоков.
TP — Функциональный блок «таймер».
TP(IN, PT, Q, ET) Входы IN и PT типов BOOL и TIME соответственно. Выходы Q и ET аналогично типов BOOL и TIME.
Пока IN равен FALSE, выход Q = FALSE, выход ET = 0. При переходе IN в TRUE выход Q устанавливается в TRUE и таймер начинает отсчет времени (в миллисекундах) на выходе ET до достижения длительности, заданной PT. Далее счетчик не увеличивается. Таким образом, выход Q генерирует импульс длительностью PT по переднему фронту сигнала на входе IN.
Примечание: Задание времени импульса в секундах осуществляется присвоением входу PT постоянной вида T#1.5s, где Т – определяет временной тип, а #1.5s соответствующее время в секундах. Для задания времени в миллисекундах используется T#100ms. Аналогично задается любая временная постоянная.
По сути своей работы функциональный блок «таймер» схож с алгоритмом одновибратор из библиотеки алгоритмов для контроллера Ремиконт Р-130.
Рис. 125 Диаграмма работы функционального блока «таймер»
BLINK — Функциональный блок «генератор прямоугольных импульсов» .
Рис. 126 Функциональный блок «генератор прямоугольных импульсов» с заданием времени импульса 2 секунды и паузы 3 секунды
Входы: ENABLE типа BOOL, TIMELOW и TIMEHIGH типа TIME. Выход OUT типа BOOL. Генератор запускается по входу ENABLE = TRUE. Длительность импульса задается TIMEHIGH, длительность паузы TIMELOW.
Генератор прямоугольных импульсов тоже что и мультивибратор библиотеки алгоритмов Ремиконта Р-130, только без функции сброса.
TON — Функциональный блок «таймер с задержкой включения».
TON(IN, PT, Q, ET) Входы IN и PT типов BOOL и TIME соответственно. Выходы Q и ET аналогично типов BOOL и TIME.
Пока IN равен FALSE, выход Q = FALSE, выход ET = 0. Как только IN становится TRUE, начинается отсчет времени (в миллисекундах) на выходе ET до значения, равного PT. Далее счетчик не увеличивается. Q равен TRUE, когда IN равен TRUE и ET равен PT, иначе FALSE. Таким образом, выход Q устанавливается с задержкой PT от фронта входа IN.
В программе аналоговой защиты таймер с задержкой включения используется для задержки включения перезаписи достоверного значения в случае исправности канала после исчезновения нарушения.
Рис. 127 Диаграмма работы «таймера с задержкой включения»
Прочие стандартные функциональные блоки программы на рис.129:
— RS — переключатель с доминантой выключения (RS-триггер);
— OR – логический элемент ИЛИ;
— AND – логический элемент И;
— SUB — вычитание из первого входа второй;
— ABS – модуль значения;
— MUL – перемножение значений;
— GT – больше, возвращает TRUE, если первое значение больше второго;
Программа мажоритарного выбора 2 из 3-х приведена на рис.130.
Для соответствия с программой на рис. 18 был необходим нестандартный для CoDeSys алгоритм переключателя. Его работа полностью соответствует работе одноименного алгоритма библиотеки алгоритмов для контроллера Ремиконт Р-130 в случае трех каналов.
c1, c2, c3: BOOL; (*Команды подключения соответствующих входов x1, x2, x3*)
y:REAL; (*Выход переключателя*)
Текст программы на языку ST:
IF c3=TRUE THEN y:=x3; END_IF;
IF c2=TRUE THEN y:=x2; END_IF;
IF c1=TRUE THEN y:=x1; END_IF;
IF c1=FALSE AND c2=FALSE AND c3=FALSE THEN y:=x1; END_IF;
Прочие стандартные функциональные блоки программы на рис.130:
— AND – логический элемент И;
— SUB — вычитание из первого входа второй;
— ABS – модуль значения;
— DIV – деление первого значения на второе;
— GT – больше, возвращает TRUE, если первое значение больше второго.
На рис. 131 приведена программа циклограммы. Эта циклограмма реализована по циклограмме, изображённой на рис.23 и соответствует программе (рис.28).
В наборе алгоритмов CoDeSys не имеется идентичного алгоритма таймеру для контроллера Ремиконт Р-130, то есть нет такого алгоритма отсчета времени, в котором предусмотрена и остановка и сброс. Необходимо реализовать приведенный ниже функциональный блок таймера с остановкой и сбросом.
Ton codesys как работает
Hi, I am learning CoDeSys and my first attempt is to program a simple or statement to turn on an output using ladder diagram. I have completed that along with an HMI for visualization. I am now just trying to add a timer on delay to my program. I have read the help files and am unable to come to a solution. When I add the TON instruction to my ladder, i get a square box that just says TON. I have also read that the library manager should have this instruction predifined, but i am still unable to find it. I also think that i can create a new data structure and if my syntax is correct the timer instruction will get defined.
Thanks in advance
Wago warez are indeed a pain in the behind
There are 2 ways to add a TON or whatever functions in a rung but they both start the same way.
Put your mouse pointer on the rung and rigth-clcik to pop the selection menu.
- Function block (Ctrl-B)
- Box with EN
- The Help Manager window pops up and you will find the TON function in the "Standard function block library. Just select TON
2. A AND box with an EN input will be on the rung. Click on this AND markings and rewrite TON in its place. The box will transform into a TON looking thingy. Proceed with naming it like the other function I explained above.