Задача. Генератор импульсов с заданой периодичностью и длительностью 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 мин, можно воспользоваться системными битовыми меандрами. |