UltraLogik – система программирования контроллеров АСУ ТП: Учебное пособие, страница 9

3.1.1. Установка функциональных блоков в программе

При установке функциональных блоков необходимо помнить правило, что очерёдность выполнения блоков в программе сверху вниз, слева направо, а точка привязки – левый верхний угол блока. Например, необходимо сложить переменные А, В (тип FLOAT), привести сумму к типу INTEGER, сравнить с переменной С (тип INTEGER)и результат переместить в переменную D. Блок EQU будет выполняться последним, т. к. его точка привязки расположена ниже точки привязки блока CMP (порядок выполнения блоков указан цифрами внутри блоков).


На рис. 11, 12 приведены примеры правильной реализации алгоритма.

3.1.2. Ветвление по нескольким условиям

Рассмотрим пример программы, в которой выполняются различные процедуры, в зависимости от значения переменной SW.

 Программа на языке FBD будет выглядеть, как показано на рис.13.


Для удобства применения данный фрагмент программы можно свернуть в библиотечный блок (рис. 14).

3.1.3. Организация циклов

Существует два принципиальных подхода к организации циклов: организация ''непрозрачного'' цикла, организация ''прозрачного'' цикла.

Во время ''прозрачного'' цикла в данной программе другие программы  системы исполнения также выполняются. Во время ''непрозрачного'' цикла – ожидают его окончания.

В ''непрозрачном'' цикле (рис.15) программа будет исполняться непрерывно за один цикл контроллера до тех пор, пока переменная i не примет значение true. Все остальные программы системы исполнения будут ожидать окончания цикла. В "прозрачном цикле'' (рис.16) программа будет исполняться один раз в полном цикле системы исполнения, пока переменная i имеет  значение false. Выполнение других программ не зависит от окончания цикла. Очевидно, что подход, реализованный в ''непрозрачном'' цикле, не мешает работе других программ и является предпочтительным. Напротив, организация ''непрозрачных'' циклов может существенно снизить быстродействие системы исполнения и привести к потере управления процессом.

3.1.4. Ожидание события

Задача ожидания события также организуется как ''прозрачный'' цикл. Условием  выполнения программы является наступление события. На рис. 17 приведён пример программы, ожидающей событие, когда переменная i примет значение 5. Таким же образом можно решить задачу выполнения программы через строго определённые промежутки времени. На рис.18 приведён пример программы, которая выполняется один раз в 10 секунд.

 


Пока таймерная переменная t меньше 10s, исполняется оператор RETURN и выполнение тела программы не происходит. При достижении переменной t значения 10s оператор RETURN игнорируется, и программа выполняется полностью. Обратите внимание, что сразу после блока CMP стоит оператор TSTART. Чтобы обеспечить правильные промежутки времени между выполнениями программы, нужно инициализировать таймерную переменную t  сразу после блока сравнения, а не в конце тела программы.

3.1.5. Подсчёт событий

Для реализации счётчика событий достаточно блока ADD. На нём можно реализовать схему, ведущую счёт как в положительную, так и в отрицательную стороны с произвольным шагом (рис. 19).

Эти функции можно реализовать и блоком SUB, а также с переменным шагом, если вместо константы применить переменную.  Для примера можно посмотреть на реализацию библиотечного блока CPS (библиотека LIB1 – разное). Значение переменной CURувеличивается на 1 в каждом цикле системы исполнения, а раз в секунду копируется в переменную CPS. По величине CPS можно судить о производительности системы исполнения.

В примере, приведённом на рис. 20, переменная S увеличивает своё значение на +1, когда переменная tick изменит своё  состояние из FALSE в TRUE. Переменная М увеличивает своё значение на +1, когда значение переменной S  достигнет значения 60. По умолчанию все переменные равны нулю.

3.1.6. Установка таймерных переменных

Таймерные переменные являются простым инструментальным средством, позволяющим организовать счёт времени, элементы задержки, селекторы длительности и т.п. Таймерную переменную можно сравнить с секундомером, который запускается командой TSTART, а останавливается командой TSTOP. Количество таймерных переменных, как и переменных других типов, ограничено лишь ресурсами системы исполнения.

Рассмотрим несколько примеров использования таймерных переменных. На рис. 21, а приведена программа, в которой реализован селектор импульсов по длительности, а на рис 21, б – временная диаграмма работы программы.

Переменная Out примет значение переменной Inp  только в том случае, если переменная Inp не изменит своё состояние в течение 1s. В секции INITпроисходит начальное задание значения переменной  Out (на выходе копируется состояние входа) и инициализируется таймерная переменная Т. Далее в секции MAIN любое  значение Inp приводит к перезапуску таймерной переменной Т. Значение переменной Т сравнивается с константой =1s. Если Т больше 1s, то значение переменной Inp копируется в Out. Таким образом, осуществляется ''подавление дребезга'' сигнала Inp. Время селекции можно сделать любым, если вместо константы =1s использовать таймерную или другую константу.

На рис. 22 приведена программа управления насосом. Таймерные переменные (Твкл, Тоткл) используются для определения контрольных промежутков времени между сигналом на включение насоса (НАСОС) и приходом сигнала подтверждения включения от датчика обратной связи (ДАТЧИК). Этот блок включен в библиотеку ''LIB1-разное''  под названием PUMP.

После выдачи команды на включение насоса (ВКЛ=TRUE) и если нет аварии (АВАРИЯ=FALSE), устанавливается сигнал включения насоса (НАСОС=TRUE).