Сигналы состояний устройств, такие как «Готовность», «Ожидание», «Авария», могут быть сформированы с помощью логических операций над входными переменными. Это не только расширяет функционал таблицы, но и уменьшает количество активных ячеек. В логическом И по столбцу теперь могут участвовать не значения входных переменных, а сигналы состояний механизмов и систем. Вместо использования нескольких активных ячеек, отражающих состояние датчиков какого-либо устройства, будет нужна всего лишь одна активная ячейка с сигналом готовности этого устройства. Такой подход упрощает программу и, самое главное, улучшает ее читаемость.
Добавим в таблицу столбцы, необходимые для выполнения операций над входными значениями. Чтобы улучшить читаемость программы, немного изменим внешний вид таблицы. Вставим дополнительные строки, которые будут разделять программу на блоки, а комментарии в строках, имеющих активные ячейки, выделим светло-серым фоном. Фон в остальных ячейках оставим белым. Табличная программа с внесенными изменениями показана на рис. 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 = 1;
– строка 12: b5 = (NOT b1) XOR b2 // 1 XOR 1 = 0.
Иногда бывает необходимо, чтобы один из выходных сигналов контроллера был инвертирован – например, если в схеме устройства используется сигнал, состояние которого должно быть равным нолю, когда результат логического И по столбцу дает единицу. Чтобы реализовать такую возможность, дополним заголовок таблицы двумя строками: «Операция» и «Результат» (рис. 5).
Рис. 5. Табличная программа с логическими операциями над входными и выходными переменными
Выходным переменным, которым не требуется инверсия, в ячейку «Операция» запишем «=», а переменным, значение которых нужно инвертировать, запишем NOT. В приведенном на рис. 5 примере выходной переменной 3 присваивается инвертированное значение логического И по столбцу 3 с помощью операции NOT.
Управление оборудованием часто требует жестких временных рамок. Иногда нужна задержка между последовательным включением механизмов или систем, иногда наоборот – между последовательным их выключением. Наиболее ответственные операции должны выполняться за определенное время, и если этого не происходит, то оператору выдается предупреждение или происходит остановка процесса. Для формирования временных интервалов в программах контроллеров используются различные таймеры. Наиболее распространенные – таймер с задержкой на включение TON (timer on delay), таймер с задержкой на выключение TOF (timer off delay), таймер, формирующий импульс заданной длительности, TP (timer pulse). Рассмотрим алгоритм работы каждого из них.
В исходном состоянии на выходе таймера с задержкой на включение TON будет ноль (рис. 6). При переходе сигнала на его входе из ноля в единицу, то есть по переднему фронту сигнала, запускается обратный отсчет времени, начиная со значения, предустановленного в параметрах таймера.
Рис. 6. Временная диаграмма таймера с задержкой на включение TON
При достижении счетчиком нулевого значения на выходе таймера устанавливается единица. То есть сигнал, установившийся на входе таймера, появляется на выходе не сразу, а через заданное время. При возвращении входного сигнала в нулевое состояние выход таймера тоже будет равен нолю без какой-либо задержки. Если входной сигнал станет равным нолю до истечения предустановленного времени, то обратный отсчет прекратится, таймер перейдет в начальное состояние и сигнал на выходе не появится.
У таймера с задержкой на выключение TOF в исходном состоянии на выходе будет ноль (рис. 7). При переходе входного сигнала из ноля в единицу на выходе таймера будет единица без какой-либо задержки.
Рис. 7. Временная диаграмма таймера с задержкой на выключение TOF
А при переходе сигнала на его входе из единицы в ноль, то есть по заднему фронту сигнала, запускается обратный отсчет времени, начиная со значения, предустановленного в параметрах таймера. Установившийся на входе таймера ноль появится на выходе не сразу, а через заданное время – при достижении счетчиком нулевого значения. Если входной сигнал станет единицей до истечения предустановленного времени, то обратный отсчет прекратится, таймер перейдет в начальное состояние и на выходе останется единица.
В исходном состоянии на выходе импульсного таймера TP будет ноль (рис. 8). При переходе сигнала на его входе из ноля в единицу, то есть по переднему фронту сигнала, на выходе таймера будет единица без какой-либо задержки. Сразу же запускается обратный отсчет времени, начиная со значения, предустановленного в параметрах таймера. При достижении счетчиком нулевого значения на выходе таймера устанавливается ноль. Таким образом, по переднему фронту будет сформирован импульс заданной длительности. Возвращение входного сигнала в нулевое состояние до истечения заданного времени не повлияет на формирование импульса. Если входной сигнал снова станет единицей и будет сформирован передний фронт, то таймер будет перезапущен и отсчет начнется заново.
Рис. 8. Временная диаграмма таймера, формирующего импульс заданной длительности, TP
Чтобы при необходимости в программе можно было формировать временные интервалы, добавим в таблицу три столбца. Первый соответствует типу используемого таймера, второй – установленному времени, третий – текущему состоянию внутреннего счетчика таймера. Дополнительно сократим названия колонок и отформатируем таблицу. Табличная программа с внесенными изменениями представлена на рис. 9.
Рис. 9. Пример использования таймеров
Битовый результат операции сначала поступает на вход таймера, выходное значение которого будет присваиваться активным ячейкам строки. Если тип таймера не указан, то результат логической операции записывается в активные ячейки без задержки. Если результат операции не используется в активных ячейках строки, то ячейка этой строки в столбце «Знач.» остается пустой. Это сделано для того, чтобы в столбце «Знач.» отображались только те значения, которые принимают участие в формировании результата по столбцу. В приведенной на рис. 9 таблице используются три таймера: таймер с задержкой на включение TON, таймер с задержкой на выключение TOF, таймер, формирующий импульс, TP.
Теперь результат логической операции над входными переменными записывается в ячейки столбца «Резул.», а логический уровень выхода таймера – в ячейки столбца с названием «Знач.». Тип применяемого в строке таймера указывается в столбце «Таймер». Время работы таймера записывается в миллисекундах в столбце «Устан.». При обратном отсчете времени текущее состояние внутреннего счетчика таймера будет выводиться в ячейку «Текущ.». Пример отображения обратного отсчета показан в строке 12 (рис. 9).
Установленная в строке 12 длительность импульса равна 2000 миллисекундам, или 2 секундам, до окончания импульса остается 1610 миллисекунд, или 1,61 секунды. По истечении этого времени значение в столбце «Знач.» строки 12 перейдет из единицы в ноль. В строках 4 и 8 также используются таймеры, однако их текущее значение времени не отображается, следовательно, в данный момент таймеры в этих строках неактивны.
Можно заметить, что заголовок «Входной контакт» заменен на «Адрес», но цифры в столбце остались те же. Это сделано для того, чтобы максимально приблизить табличную программу к электрической схеме. Обычно при программировании контроллера с помощью графических языков переменным присваиваются адреса с точностью до бита, хотя в среде программирования контроллера каждой переменной соответствует определенная структура размером в несколько десятков байтов. Назначение адресов с точностью до бита – не более чем исторически сложившаяся практика. В табличной программе адрес входной или выходной переменной может соответствовать порядковому номеру контакта на разъеме контроллера. Тип переменной будет определяться ее адресом. К примеру, первые десять адресов будут принадлежать входным битовым переменным, а адреса с одиннадцатого по двадцатый – выходным.
Рассмотрим работу табличной программы на конкретном примере управления простым шлагбаумом с электроприводом. Сначала опишем алгоритм работы и основное оборудование такого шлагбаума.
Управление шлагбаумом производится нажимным двухкнопочным выключателем с фиксацией, возврат одной кнопки которого происходит при нажатии другой кнопки. Введем правило: шлагбаум может быть либо открыт, либо закрыт, остановку стрелы шлагбаума в промежуточном состоянии считаем аварийной. Если нажата кнопка «Открыть», то шлагбаум должен открыться, и мы сможем нажать только кнопку «Закрыть», так как кнопка «Открыть» зафиксирована в нажатом состоянии. Верхний и нижний концевые выключатели при срабатывании должны останавливать двигатель.
Так как работа шлагбаума способна нанести вред людям или имуществу, то необходимо предусмотреть в схеме аварийную кнопку и главный контактор, отключающий силовое питание при нажатии на нее. Аварийная кнопка должна иметь дополнительный контакт для сигнализации о том, что она находится в нажатом состоянии. Не углубляясь в схему реверсивного управления двигателем, поднимающего и опускающего стрелу шлагбаума, будем считать, что два выхода контроллера, обозначенные как «Вверх» и «Вниз», будут управлять движением стрелы.
Опишем алгоритм управления шлагбаумом. При нажатии на кнопку «Открыть» на выходе контроллера «Вверх» появляется единица и держится до срабатывания верхнего концевого выключателя. Аналогично, если будет нажата кнопка «Закрыть», на выходе контроллера «Вниз» появляется единица и держится до срабатывания нижнего концевого выключателя. Если во время опускания стрелы шлагбаума оператор увидит помеху, то он может кнопкой «Открыть» переключить двигатель на подъем стрелы. При нештатных ситуациях оператор нажимает аварийную кнопку.
Рассмотрим работу программы при переводе стрелы шлагбаума из открытого состояния в закрытое. Для открытого состояния шлагбаума управляющая программа представлена на рис. 10.
Рис. 10. Табличная программа управления шлагбаумом, соответствующая его открытому состоянию
Можно увидеть, что питание включено, аварий нет, шлагбаум открыт, команды «Вверх» и «Вниз» равны нолю. По тому, что верхний концевой выключатель разомкнут, можно определить, что стрела шлагбаума находится в верхнем конечном положении. Нажатие на кнопку «Закрыть» выключит кнопку «Открыть», активные ячейки в таблице под командой «Вниз» получат состояние «Единица» и станут отображаться зеленым цветом. Логическое И по столбцу 2 даст в результате единицу. На выходном контакте 12 появится напряжение, соответствующее логической единице, и двигатель будет включен для опускания стрелы шлагбаума. Начнется движение стрелы вниз (рис. 11).
Рис. 11. Табличная программа управления шлагбаумом в момент нажатия кнопки «Закрыть»
После начала движения вниз верхний концевой выключатель перейдет в замкнутое состояние. Если не будет никаких действий со стороны оператора, движение стрелы вниз будет совершаться до срабатывания нижнего концевого выключателя. Табличная программа в момент движения стрелы вниз представлена на рис. 12.
Рис. 12. Табличная программа управления шлагбаумом в момент движения стрелы вниз
Как только стрела достигнет положения «Закрыто», сработает нижний концевой выключатель. Соответствующая ему ячейка в столбце под командой «Вниз» получит значение ноль, результатом логического И по этому столбцу станет ноль, и двигатель будет отключен. Таблица покажет состояние «Закрыто» (рис. 13).
Рис. 13. Табличная программа управления шлагбаумом, соответствующая его закрытому состоянию
Бесплатно
Установите приложение, чтобы читать эту книгу бесплатно
О проекте
О подписке