Язык st codesys таймер

Язык st codesys таймер Языки
Таймеры CoDeSys

Участник
Язык st codesys таймер

Присоединился: 02 Сентябрь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 54 Язык st codesys таймерСвойства публикации

Добрый день, уважаемые коллеги!
Может быть я просто не внимательный (как всегда), но вот это программа мне никак не хочет останавливать таймер:

PROGRAM proba
VAR
Tmr_1: TP;
i: INT;
y: TIME;
END_VAR

IF Tmr_1.IN =FALSE THEN
Tmr_1(IN:=TRUE, PT:=T#5s);
END_IF;

IF Tmr_1.Q THEN
i:=i+1;
y:=Tmr_1.ET;
END_IF;

IF Tmr_1.Q = FALSE THEN
Tmr_1(IN:=FALSE);
END_IF;

Участник
Язык st codesys таймер

Присоединился: 02 Сентябрь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 54 Язык st codesys таймерСвойства публикации

Действительный член
Язык st codesys таймер
Язык st codesys таймер

Присоединился: 27 Ноябрь 2006
Категория: Albania
Online Status: Offline
Публикации: 134 Язык st codesys таймерСвойства публикации

млин, жаль с CodeSys никогда не работал, а то бы сумничал как-нить. ))
а вообще, на мой скорый взгляд в этом куске случаем не зацикливание?
может быть вместо

Первоначально опубликовано Mixer

IF Tmr_1.Q THEN
i:=i+1;
y:=Tmr_1.ET;
END_IF;

IF Tmr_1.Q = FALSE THEN
Tmr_1(IN:=FALSE);
END_IF;

попробовать нечто вроде
IF Tmr_1.Q THEN
i:=i+1;
y:=Tmr_1.ET;
ELSEIF Tmr_1.Q = FALSE THEN
Tmr_1(IN:=FALSE);
END_IF;

IF Tmr_1.Q THEN
i:=i+1;
y:=Tmr_1.ET;
ELSE Tmr_1(IN:=FALSE);
END_IF;

сразу прошу прощения, с синтаксисом не знаком, поэтому вероятны ошибки
Язык st codesys таймер

Участник
Язык st codesys таймер

Присоединился: 02 Сентябрь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 54 Язык st codesys таймерСвойства публикации

Действительный член
Язык st codesys таймер

Присоединился: 29 Январь 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 293 Язык st codesys таймерСвойства публикации

В рабочей ветке блок таймера вообще не вызывается! С чего вдруг его выход должен меняться?

Надо добавить красную строчку:

PROGRAM proba
VAR
Tmr_1: TP;
i: INT;
y: TIME;
END_VAR

IF Tmr_1.IN =FALSE THEN
Tmr_1(IN:=TRUE, PT:=T#5s); (*Вызов таймера и запуск = OK*)
END_IF;

Tmr_1; (* Вызов экз. функ. блока *)
i:=i+1;
y:=Tmr_1.ET;
END_IF;

IF Tmr_1.Q = FALSE THEN
Tmr_1(IN:=FALSE); (*Вызов таймера и останов = OK*)
END_IF;

Подробно о работе с временем, датами и таймерами МЭК см. тут.

Действительный член
Язык st codesys таймер
Язык st codesys таймер

Присоединился: 27 Сентябрь 2006
Online Status: Offline
Публикации: 125 Язык st codesys таймерСвойства публикации

Перед обращением к полю ЕТ надо вызвать функцию:

IF Tmr_1.Q THEN
i:=i+1;

Tmr_1(IN:=TRUE);
y:=Tmr_1.ET;
END_IF;

P.S. Пока писал, оказывается, уже ответили

Участник
Язык st codesys таймер

Присоединился: 02 Сентябрь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 54 Язык st codesys таймерСвойства публикации

Действительный член
Язык st codesys таймер

Присоединился: 08 Март 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 440 Язык st codesys таймерСвойства публикации

Минимально покушаясь на авторство, начальный кусок можно переделать так :

b: BOOL := FALSE; (* Добавляем булеву переменную *)

IF NOT(b) THEN
b := TRUE;
END_IF

Участник
Язык st codesys таймер

Присоединился: 02 Сентябрь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 54 Язык st codesys таймерСвойства публикации

Действительный член
Язык st codesys таймер
Язык st codesys таймер

Присоединился: 27 Сентябрь 2006
Online Status: Offline
Публикации: 125 Язык st codesys таймерСвойства публикации

Первоначально опубликовано sanwork

Мне кажется, здесь всё усложнено и запутано («. это не фунция. «, «должен вызываться, чтобы все правильно работало» и прочее). Напишите первой строкой программы вызов функции:

остальные обращения к ней можно убрать. Получится, что таймер вызывается каждый раз при вызове программного блока (если вам нужно, чтобы таймер всё время работал). Главная идея такая. Система следит только за обновлением системного таймера (суммирует импульсы от кварцевого генератора), выходные поля вашего таймера будут обновлены после явного вызова функции (в данном случае TP).

Источник

Видео:Часть 20: Работа с таймерами в CoDeSysСкачать

Часть 20: Работа с таймерами в CoDeSys

Язык st codesys таймер: Язык st codesys таймерЯзык st codesys таймер

Товарищи доброе время суток!
Я новичок в Codesys 🙂
Хотел поинтересоваться есть ли в codesys таймер TON с паузой. (под паузой подразумевается остановка времени отсчёта и возобновление после команды по входу )
Если нет то подскажите как его организовать на ST?
Заранее благодарен

для ТON время отсчета включения с задержкой увеличить на время паузы? Так не легче после паузы сброшенный таймер запустить по новой, у него же до этого момента всёравно выход «потушен»

для ТON время отсчета включения с задержкой увеличить на время паузы? Так не легче после паузы сброшенный таймер запустить по новой, у него же до этого момента всё равно выход «потушен»

С таймером разобрался как на CFC написать.Но всё же хочется увидеть как это будет на ST выглядеть, хотя бы пару основных строк.

Товарищи доброе время суток!
Я новичок в Codesys 🙂
Хотел поинтересоваться есть ли в codesys таймер TON с паузой. (под паузой подразумевается остановка времени отсчёта и возобновление после команды по входу )
Если нет то подскажите как его организовать на ST?
Заранее благодарен

Время которое вы задаете в TON отсчитывает контроллер,что бы его остановить нужно сделать СТОП программе.

Время которое вы задаете в TON отсчитывает контроллер,что бы его остановить нужно сделать СТОП программе.

Вы хоть покажите как на CFC сделали, может народ быстренько этот вариант на ST и переложит..

Читать 7 часть «Отладка прикладных ПЛК программ в CoDeSys» http://prolog-plc.ru/pb1
В самом начале статьи будет такой таймер http://prolog-plc.ru/docs/iecdeb07.pdf

Берёте исходный код TON: https://bitbucket.org/mjsousa/matiec/src/36fb9443b6ea676ced5f9029f9b7ab070b2eb7e3/lib/timer.txt?at=default&fileviewer=file-view-default#timer.txt-128

Фрагмент ,CURRENT_TIME,,__CURRENT_TIME)> заменяете на CURRENT_TIME := TIME(); (в КДС именно такой способ узнать «текущее время»)

Так skinnbatter это начинающий. Ему в самый раз пригодится разобраться в устройстве «стандартного TON». По-моему, весьма хорошая задача.

Ну тогда просто необходимо разобраться именно самостоятельно, чтоб уяснить саму суть, а не смотреть чужие примеры, иначе следующий вопрос будет : «С TON разобрался, помогите сделать TOF с паузой» ))
Релиз таймеров находится на уровне обязательной программы для изучения. Типа «жы-шы пишы с буквы ы»

Учиться нужно на задачах.
Задача «добавить паузу» в имеющийся TON вполне норм задача.

Вариант «помогите сделать TOF с паузой» будет как раз в том случае, если человек не разберётся, а, неглядя, возьмёт вариант capzap’а, который по случаю оказался «TON’ом с паузой» (ну или чем там, неважно).

никогда не понимал и наверное уже не судьба понять, шутите или нет, против или поддерживаете, так навсякий случай потестил, проблем не вижу и ЕТ тут вообще ни причем он как свое считало так и будет считать пока не достигнет РТ

Вы зачем тогда примеры просили на ST, если только запутались больше

а номер у этого сименсовского таймера есть или хотя бы название, а то скорее всего пользуйтесь чьей то наработкой, кто то за Вас «наплясался»

а номер у этого сименсовского таймера есть или хотя бы название, а то скорее всего пользуйтесь чьей то наработкой, кто то за Вас «наплясался»

ну Вы как бы тоже не считайте, что тут сименсом ни кто не занимается, привожу эпюру этого таймера. Она ни как не похожа на Вашу задачу, запоминанием здесь считается не пауза и запоминание прошедшего времени чтоб потом с этого момента запуститься дальше, а то что пускающий сигнал был и надо продолжать отсчитывать время на включение, даже если он пропал

А готовый таймер, предложенный тут (http://www.owen.ru/forum/showthread.php?t=7077&p=161598&viewfull=1#post161598), не подошел?

Да бы не создавать тему про таймеры напишу здесь.
В общем блинк не подошел т.к. у него сначала выход не активный и он не сбрасывается а сохраняет состояние до следующего раза. Посмотрел кто как что делал, написал свой вариант ФБ.

FUNCTION_BLOCK My_BLINK
VAR_INPUT
run: BOOL;
high: TIME:=t#0s;
low: TIME:=t#0s;
END_VAR

VAR_OUTPUT
time_left: TIME;
out: BOOL;
END_VAR

VAR
TOF1: TOF;
pt: TIME;
END_VAR

IF Start_pwm1 THEN
IF Auto_mode1 THEN
b1.run:=1;
pwm1:=b1.out;
ELSE
pwm1:=1;
END_IF
ELSE
pwm1:=0;
b1.run:=0;
END_IF

И таких однотипных алгоритмов порядка 25 штук. Плк справится? помимо этого плк будет еще и по интерфейсам собирать данные порядка 250 и отправлять в скада систему(функция побочная в алгоритме управления используется порядка 30 переменных) остальное транзит из одного интерфейса в другой(плк как преобразователь интерфейсов).

Источник

Видео:Вебинар «Основы программирования ПЛК1хх на языке ST»Скачать

Вебинар «Основы программирования ПЛК1хх на языке ST»

Язык st codesys таймер: Язык st codesys таймерЯзык st codesys таймер

Часовой пояс: UTC + 3 часа (Russia: MSK)

Язык st codesys таймерЯзык st codesys таймер

Видео:#2 - Structured Text // Создадим копию таймера TON и добавим к нему памятьСкачать

#2 - Structured Text // Создадим копию таймера  TON и добавим к нему память

Язык st codesys таймер: Таймер на ST?Таймер на ST?

Регистрация: Чт сен 26, 2013 13:01
Сообщения: 2

Добрый вечер. Помогите, пожалуйста, разобраться как функция TIMX работает на ST. Вызываю ее: TIMX(in1, timer1, 500). Таймер работает, но как узнать, что таймер сработал?

UPD: Или мы можем только вызывать его, а обрабатывать событие необходимо на LD?

Регистрация: Пт авг 09, 2013 08:20
Сообщения: 36

Регистрация: Чт сен 26, 2013 13:01
Сообщения: 2

Язык st codesys таймер

Регистрация: Чт ноя 06, 2014 15:41
Сообщения: 12

Если объявлять не как TIMER, а например как BOOL (встретил на форуме пост о подобном раздвоении личности таймера) то получаю ошибку «Невозможно выполнить преобразование из BOOL в TIMER».

Кто умеет пользоваться таймерами в ST, внутри FB и в задачах? Может выложите хоть простейший пример, который компилируется без ошибок.

Язык st codesys таймер

Регистрация: Пт сен 22, 2006 13:17
Сообщения: 175
Откуда: Novokuznetsk

Как-то баловался с таймерами.
См. прикрепленный архив, может пригодится.

Пример 1:
Таймер, реализованный функциональным блоком, в программе на ST.

Пример 2:
ФБ внутри ФБ.
Программер ругается на неизвестную ошибку при компиляции, если «TBit1» и «TBit2» сделать IN/OUT, поэтому ввел переменные «_T1» и «_T2».
Есть ограничения (из хелпа): «The maximum of eight function blocks can be nested including a FB instance call in a main ladder program.»
Попытался вставить 9 екземпляров, компилятор не ругался.

У вас нет необходимых прав для просмотра вложений в этом сообщении.

Язык st codesys таймер

Регистрация: Чт ноя 06, 2014 15:41
Сообщения: 12

100 шагов.
Добавить контакт и таймер в ладдере = 4 шага.

(Памяти у меня осталось еще

1500 шагов на все доработки).

А работать с таймером из ST как в примере выше, через TIMX() хоть кому-нибудь удавалось?

Язык st codesys таймер

Регистрация: Пт сен 22, 2006 13:17
Сообщения: 175
Откуда: Novokuznetsk

Site Admin
Язык st codesys таймер

Регистрация: Вт сен 19, 2006 21:13
Сообщения: 3292
Откуда: Москва

Язык st codesys таймер

Регистрация: Чт ноя 06, 2014 15:41
Сообщения: 12

Пусть бы и только внутри FB, но увы независимо FB или нет, получаю ошибку
«Cимвол del_tim в программе SFC/ST имеет недопустимый тип данных (TIMER или COUNTER)»

Кстати при переделке программы под СJ2M ошибки пропадают, хоть FB хоть нет (жаль мне не на чем попробовать корректно ли работают эти TIMX внутри ST)

Но тогда возникает вопрос:
Где в документации четко написано, что таймеры в ST работают только в CJ2?
И почему CX-Programmer ругается не на саму инструкцию TIMX которая похоже недопустима для ST под CJ1, а на то что я якобы неправильно подсовываю ей аргумент или завожу локальную переменную?

Язык st codesys таймер

Регистрация: Пт сен 22, 2006 13:17
Сообщения: 175
Откуда: Novokuznetsk

Site Admin
Язык st codesys таймер

Регистрация: Вт сен 19, 2006 21:13
Сообщения: 3292
Откуда: Москва

100 шагов.
Добавить контакт и таймер в ладдере = 4 шага.
(Памяти у меня осталось еще

1500 шагов на все доработки).

Язык st codesys таймер

Регистрация: Чт ноя 06, 2014 15:41
Сообщения: 12

Язык st codesys таймер

Регистрация: Сб сен 30, 2006 14:07
Сообщения: 677
Откуда: Москва

Site Admin
Язык st codesys таймер

Регистрация: Вт сен 19, 2006 21:13
Сообщения: 3292
Откуда: Москва

Часовой пояс: UTC + 3 часа (Russia: MSK)

Язык st codesys таймерЯзык st codesys таймер

Кто сейчас на конференции

Сейчас этот форум просматривают: в настоящее время на конференции нет зарегистрированных пользователей и гости: 0

Источник

Видео:4. Основы программирования на языке STСкачать

4. Основы программирования на языке ST

Язык st codesys таймер: Таймеры и триггеры CODESYS. Еще один шаг Arduino к классическому ПЛКТаймеры и триггеры CODESYS. Еще один шаг Arduino к классическому ПЛК

Язык st codesys таймер

Случается программировать контроллеры (ПЛК) в среде CODESYS. Все, кто имел дело с этой системой, знают, что в любом проекте присутствует библиотека Standard.lib, в которой реализованы базовые таймеры, триггеры, счетчики и некоторое кол-во других функций и функциональных блоков. Многие из этих блоков постоянно используются в программах для ПЛК. А сама библиотека, как и языки программирования CODESYS, является воплощением стандарта IEC 61131-3, т.е. призвана помочь при программировании классических ПЛК задач.

Одна из особенностей программ для ПЛК в том, что основной цикл программы должен выполняться без существенных задержек, в нем не должно быть внутренних циклов с неопределенным временем выхода или синхронных вызовов «задумчивых» функций, особенно это касается коммуникаций по медленным каналам. Обновление входных и выходным образов процесса происходит только на границе основного цикла, и чем дольше мы будем «сидеть» внутри одной итерации цикла, тем меньше мы будет знать о реальном состоянии объекта управления, в конечном итоге сработает watchdog переполнения времени выполнения цикла. Многие могут мне возразить, сказав, что современные ПЛК многозначны, есть с поддержкой аппаратных прерываний. Согласен, но разговор о таких системах не входит в мои планы, я же хочу поговорить о (квази, псевдо — выбирайте) ПЛК однозадачной реализации (без прерываний) на базе микропроцессорной платформы Arduino, в котором есть только один основной цикл. Кстати, не лишним будет сказать, что на написание данной заметки меня сподвигла статья Ардуино-совместимый ПЛК CONTROLLINO, часть 1 о попытке аппаратного воплощения Arduino в пром. ПЛК.

Несколько слов об Arduino. С точки зрения программиста ПЛК, Arduino — это типичный контроллер с одним очень быстрым или, наоборот, очень медленным циклом loop(). На время выполнения цикла не накладывается никаких ограничений, и он может отработать и один, и бесконечное кол-во раз — по замыслу программиста. Когда программа проста и сводится к выполнению последовательных операций, регуляторов, без параллельных событий, то достаточно чередовать операции бесконечными вложенными циклами проверки условий и синхронными задержками типа delay(). Последовательные шаги такой программы будут выполняться буквально построчно, просто и логично. Но, как только возникает необходимость в программировании параллельных операций, необходимо менять парадигму программы.

В однозадачной системе добиться видимой параллельности можно только очень быстрым последовательным сканированием параллельных состояний, не задерживаясь подолгу на каждом вызове функции или проверке условия. С физическими входами-выходами проблем нет, функции отрабатывают достаточно быстро, а вот delay() становится неоправданным тормозом. И вот тут на смену приходят неблокирующие таймеры, те самые, которые в программировании ПЛК являются классикой. Суть в том, что для их работы используется миллисекундный счетчик времени, и все действия привязаны к значениям этого глобального счетчика.

А теперь давайте вспомним ту самую Standard.lib из CODESYS. В ней как раз реализованы МЭК-овские неблокирующие таймеры. Я взял ее за основу и портировал функции таймеров и триггеров в библиотечный код Arduino (С++). Т.е. попытался приблизить Arduino к классическому ПЛК.

Ниже я приведу краткое описание портированных функциональных блоков (FB) CODESYS и их аналоги в моей библиотеке plcStandardLib, все временные диаграммы верны для новой библиотеки Arduino. Подробнее описание исходных блоков можно посмотреть, например, в русскоязычной справке по CODESYS.

TON — функциональный блок «таймер с задержкой включения»

Входы 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.

В Arduino IDE:

Временная диаграмма работы TON:

Язык st codesys таймер

TOF — функциональный блок «таймер с задержкой выключения»

Входы IN и PT типов BOOL и TIME соответственно. Выходы Q и ET аналогично типов BOOL и TIME. Если IN равен TRUE, то выход Q = TRUE и выход ET = 0. Как только IN переходит в FALSE, начинается отсчет времени (в миллисекундах) на выходе ET. При достижении заданной длительности отсчет останавливается. Выход Q равен FALSE, если IN равен FALSE и ET равен PT, иначе — TRUE. Таким образом, выход Q сбрасывается с задержкой PT от спада входа IN.

В Arduino IDE:

Очень похоже на TON, для краткости:

Временная диаграмма работы TOF:

Язык st codesys таймер

TP — функциональный блок «импульс-таймер»

Входы IN и PT типов BOOL и TIME соответственно. Выходы Q и ET аналогично типов BOOL и TIME. Пока IN равен FALSE, выход Q = FALSE, выход ET = 0. При переходе IN в TRUE выход Q устанавливается в TRUE и таймер начинает отсчет времени (в миллисекундах) на выходе ET до достижения длительности, заданной PT. Далее счетчик не увеличивается. Таким образом, выход Q генерирует импульс длительностью PT по фронту входа IN.

В Arduino IDE:

Очень похоже на TON, для краткости:

Временная диаграмма работы TP:

Язык st codesys таймер

R_TRIG — функциональный блок «дeтектор фронта»

Функциональный блок R_TRIG генерирует импульс по переднему фронту входного сигнала. Выход Q равен FALSE до тех пор, пока вход CLK равен FALSE. Как только CLK получает значение TRUE, Q устанавливается в TRUE. При следующем вызове функционального блока выход сбрасывается в FALSE. Таким образом, блок выдает единичный импульс при каждом переходе CLK из FALSE в TRUE.

Пример CODEDESYS на языке ST:

В Arduino IDE:

F_TRIG — функциональный блок «дeтектор спада»

Функциональный блок F_TRIG генерирует импульс по заднему фронту входного сигнала.
Выход Q равен FALSE до тех пор, пока вход CLK равен TRUE. Как только CLK получает значение FALSE, Q устанавливается в TRUE. При следующем вызове функционального блока выход сбрасывается в FALSE. Таким образом, блок выдает единичный импульс при каждом переходе CLK из TRUE в FALSE.

В Arduino IDE:

RS_TRIG — функциональный блок RS-триггер / SR_TRIG — функциональный блок SR-триггер

Переключатель с доминантой выключения, RS-триггер:

Переключатель с доминантой включения:

Входные переменные SET и RESET1 — как и выходная переменная Q1 типа BOOL.

Источник

📺 Видео

CoDeSys создание первого проекта - счётчик (ST)Скачать

CoDeSys создание первого проекта - счётчик (ST)

Программирование ПЛК на FBD с нуля. Урок 3. ТаймерыСкачать

Программирование ПЛК на FBD с нуля. Урок 3. Таймеры

CoDeSys. Циклический таймерСкачать

CoDeSys. Циклический таймер

ST (структурированный текст) Таймер TONСкачать

ST (структурированный текст) Таймер TON

Программирование ПЛК. 12.Таймеры.Скачать

Программирование ПЛК. 12.Таймеры.

Лекция 14. Программируемые логические контроллеры. Триггеры, таймеры, счетчикиСкачать

Лекция 14. Программируемые логические контроллеры. Триггеры, таймеры, счетчики

CoDeSys 2.3 Урок 1 | Блоки времени TON, TOF, TPСкачать

CoDeSys 2.3 Урок 1 | Блоки времени TON, TOF, TP

Лекция 12. Программируемые логические контроллеры. Язык программирования STСкачать

Лекция 12. Программируемые логические контроллеры. Язык программирования ST

Видео 31. TON на ST в Owen LogicСкачать

Видео 31. TON на ST в Owen Logic

Видео CoDeSys ПЛК Овен ТаймерыСкачать

Видео CoDeSys ПЛК Овен Таймеры

Часть 14: Язык программирования STСкачать

Часть 14: Язык программирования ST

№1 Codesys FB Таймер с памятью (LD) - Часть 1Скачать

№1 Codesys FB Таймер с памятью (LD) - Часть 1

Создание двух связанных таймеров на языке LDСкачать

Создание двух связанных таймеров на языке LD

Видео CoDeSys ПЛК Овен язык программирования ST Часть№5Скачать

Видео CoDeSys ПЛК Овен язык программирования ST Часть№5

Создание таймера в программе на LDСкачать

Создание таймера в программе на LD
Поделиться или сохранить к себе:
Технологии | AltArena.ru
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных, принимаю Политику конфиденциальности и условия Пользовательского соглашения.