Генарация импульсов

Задача. Генератор импульсов с заданой периодичностью и длительностью 1 цикл. Разработать программу для генерации импульсов с заданной периодичностью, продолжительностью 1 цикл.
Решение 1. Использование таймера.
Один из простых способов реализации этой задачи – использовать таймер TON, который перезапускает сам себя. Вот, как это выглядит в FBD:
На первом цикле контроллера таймер TON_Impuls не запущен и выход его TON_Impuls.Q=FALSE. Таким образом на первом цикле таймер запустится и будет в этом состоянии до тех пор, пока выход таймера не станет TON_Impuls.Q=TRUE, что произойдет после достижения уставки TON_Impuls.ET>=TON_Impuls.PT. Сработав, выход таймера тем самым на следующий цикл скинет его, так как его инвертированый сигнал подается на вход IN. Скидывание таймера приведет к скидыванию выхода Q, что опять приведет к запуску таймера на следующий цикл после скидывания. Таким образом выход Q продержится ровно один цикл и будет появляться каждые Тимп=1s100ms.
Решение 2. Использование системных битовых меандров.
Если заданная периодичность импульсов попадает в набор системных - 10 мс, 100 мс, 1 с или 1 мин, можно воспользоваться системными битовыми меандрами. Битовый меандр - это поочередность значений "0" и "1" с одинаковой длительностью каждого уровня. В опеарционной системе ПЛК под UNITY встроены 4-ре битовых меандра, доступных через системные биты %S:           
%S4 - 10 мс (5 мс - TRUE, 5 мс - FALSE) 
%S5 - 100 мс;
%S6 - 1 с;
%S7 - 1 мин.
Импульс можно сгенерировать по переднему или заднему фронту нужного системного бита %S6. В LD для генерации импульсов 1 раз в секунду это будет выглядеть так: 
В ST можно использовать функции RE и FE, но перед этим придется сделать переприсвоение в EBOOL, так как ячейки %S имеют тип BOOL.
Системные бытовые меандры можно использовать и для генерации импульсов с другой периодичностью, кратной их периодичности. Например, если нужно сгенерировать импульс с периодчностью 1 с 100 мс, можно создать такую программу:
Для этой программы используется переменная Timp тип  INT, хранящая текущее значение импульса в 100 милисекундной базе. Каждые 100 мс эта переменная увеличивается на 1 (для этого используется функция INC). Когда Timp будет равна 11, то есть через 1 с 100 мс, Impuls=TRUE а Timp=0. На следующий цикл Impuls=FALSE.     
 
Задача. Генератор импульсов с заданой периодичностью и длительностью. Разработать генератор импульсов с заданой периодичностью и Решение.  Генератор может быть реализован двумя таймерами: TimerON – генерирует импульс длительности включения, а TimerOFF – длительности отключения. При определенных коррекциях программы можно обойтись и одним таймером, однако для учебного примера мы используем два.
Оба таймера имеют тип TP, то есть при запуске (IN=TRUE) они выдерживают импульс заданной на входе PT длительности. На первом цикле работы ПЛК, до выполнения этого куска программы оба таймера будут отключены, и на выходе выдавать Q=FALSE. При обработке первого таймера TimerON, он запустится инвертированным сигналом TimerOFF.Q, так как он равен FALSE. Сразу же согласно диаграмме таймера TP сработает  выход TimerON.Q, запирая в свою очередь таймер TimerOFF через инвертированный сигнал. После выдержанного времени PT=t#1s, импульс заканчивается, то есть выход TimerON.Q=FALSE, что в свою очередь приводит к старту TiemrOFF,который своим выходом скидывает TimerON. По окончанию времени TP=t#500ms, выход 2-го таймера скинется (TimerOFF.Q=FALSE) что приведет к запуску 1-го таймера.
Таким образом два таймера будут друг друга перезапускать. Выход одного из таймеров используется как импульсный сигнал Imp_1_05. 
Таким образом периодичность импульсов Imp_1_05 - 1 s 500 ms, а длительность - 1s
 
Как проверить. Один из вариантов - в операторских экранах создать экран, туда вставить прямоугольник, привязать анимацию (вкладка Animation) к переменной Imp_1_05, во вкладке AnimationType выбрать Trend Diagram, настроить Sampling=100ms.  
 

Если заданная периодичность и продолжительность импульсов попадает в набор системных - 10 мс, 100 мс, 1 с или 1 мин, можно воспользоваться системными битовыми меандрами.
 
Comments