Шрифт:
Начальное значение ячеек в строке «RS» равно единице. Это сделано для того, чтобы при отсутствии в столбце активных триггерных ячеек «R» и «S» ячейка «RS» не блокировала нулем результат логического И по столбцу. Выход триггера столбца, которым является ячейка «RS», управляется следующим образом. Если в столбце ячейка «R» принимает значение «единица», то значение ячейки «RS» в заголовке сбрасывается в ноль. Если же в столбце ячейка «S» принимает значение «единица», то значение ячейки «RS» устанавливается в единицу. При возвращении состояния ячейки «R» или «S» в ноль ячейка «RS» не меняет свое значение. Происходит «защелкивание». Так как внутренний интерпретатор проходит по таблице сверху вниз, то при многократном применении в столбце триггерных ячеек значение ячейки «RS» будет определяться нижней триггерной ячейкой. После учета состояния всех ячеек «R» и «S» столбца значение ячейки «RS» участвует в операции «логическое И» наравне с ячейками столбца, обозначенными символом «&».
1.4. Логические операции над входными переменными
Сигналы состояний устройств, такие как готовность к работе или предупреждение о неисправности, могут быть сформированы с помощью логических операций над входными переменными. Применение логических операций над входными переменными не только расширяет функционал таблицы, но также уменьшает количество активных ячеек. В логическом И по столбцу теперь могут участвовать не значения входных переменных, а сигналы состояний механизмов и систем. Вместо использования нескольких активных ячеек, отражающих логические уровни дискретных датчиков какого-либо устройства, будет нужна всего лишь одна активная ячейка с сигналом готовности этого устройства. Такой подход упрощает программирование и, самое главное, улучшает читаемость программы.
Добавим в таблицу столбцы, необходимые для выполнения операций над входными значениями. Чтобы улучшить читаемость программы, немного изменим внешний вид таблицы. Вставим дополнительные строки, которые будут разделять программу на блоки, а комментарии в строках, имеющих активные ячейки, выделим светло-серым фоном. Фон в остальных ячейках оставим белым. Табличная программа с внесенными изменениями показана на рис. 4.
Рис. 4. Табличная программа с логическими операциями над входными переменными
Сначала рассмотрим возможность инвертирования входных логических сигналов для дальнейшего использования в программе. Одни сигналы, поступающие на вход контроллера, могут приходить с датчиков, имеющих нормально открытый контакт (НО), и при срабатывании такого датчика на входе контроллера будет уровень, соответствующий единице. Другие же датчики могут иметь нормально замкнутый контакт (НЗ), и при их срабатывании на входе контроллера появится ноль. Реализуемый в программе алгоритм может потребовать инвертированных входных сигналов. Если инверсии не требуется, запишем в ячейку операции знак «=». Для инверсии входного значения в ячейку операции запишем слово «NOT». В строке 10 таблицы на рис. 4 значение переменной b1 сначала инвертируется, а потом участвует в логической операции «исключающее ИЛИ».
Далее рассмотрим применение основных логических операций – «И», «ИЛИ», «исключающее ИЛИ» – для обработки входных переменных перед присвоением результата активным ячейкам таблицы. Так как для операций «И», «ИЛИ», «исключающее ИЛИ» требуются не менее двух аргументов, то две строки будут формировать аргументы, а результат поместим в третью строку. Конструкция будет напоминать арифметическое действие в столбик. Многострочные логические операции производятся над данными в столбце «Результат», и в этом же столбце записывается ответ. Расположение в одном столбце операндов и результата операции позволяет использовать полученный результат в качестве одного из операндов для следующей операции. На рис. 4 в ячейке «Результат» строки 4 будет ответ на логическое И содержимого двух ячеек, расположенных выше. Аналогично – в строке 8 для операции логическое «ИЛИ» и в строке 12 для операции «исключающее ИЛИ». В обычном для текстовых языков программирования виде это будет выглядеть следующим образом:
– строка 4: b3 = b1 AND b2 // 0 AND 1 = 0;
– строка 8: b4 = b1 OR b2 // 0 OR 1 = 0;
– строка 12: b5 = NOT (b1) XOR b2 // 1 XOR 1 = 0.
1.5. Инверсия выходных переменных
Иногда бывает необходимо, чтобы один из выходных сигналов контроллера был инвертирован – например, если в схеме устройства используется сигнал, состояние которого должно быть равным нолю, когда результат логического И по столбцу дает единицу. Чтобы реализовать такую возможность, дополним верхний заголовок таблицы двумя строками: «Операция» и «Результат» (рис. 5).
Рис. 5. Табличная программа с логическими операциями над входными и выходными переменными
Для выходных переменных, которым не требуется инверсия, в ячейку «Операция» запишем «=», а для переменных, значение которых нужно инвертировать, запишем «NOT». В приведенном на рис. 5 примере выходной переменной 3 присваивается инвертированное значение логического И по столбцу 3 с помощью операции «NOT».
1.6. Таймеры
Управление оборудованием часто требует жестких временных рамок. Иногда требуется задержка между последовательным включением механизмов или систем, иногда наоборот – между последовательным их выключением. Наиболее ответственные операции должны выполняться за определенное время, и если этого не происходит, то оператору выдается предупреждение или происходит остановка процесса. Для формирования временных интервалов в программах контроллеров используются различные таймеры. Наиболее распространенные – таймер с задержкой на включение TON (timer on delay), таймер с задержкой на выключение TOF (timer off delay), таймер, формирующий импульс заданной длительности, TP (timer pulse). Рассмотрим алгоритм работы каждого из них.