На простом примере несложно увидеть, что благодаря табличному программированию прямо во время выполнения программы можно наблюдать состояния входов, выходов и цепей формирования выходных сигналов. Нет скрытых модулей обработки, полностью понятен алгоритм управления устройством. Во многих случаях нет необходимости в разработке графического интерфейса.
Как только на контроллер с табличной программой будет подано питание и начнет работать системная программа, на экран монитора будет выводиться таблица с программой пользователя, загруженной из постоянной памяти. Внутренний интерпретатор начнет пересчет таблицы, и с самого начала работы будет отображаться состояние программы, управляющей оборудованием, в реальном масштабе времени. Отпадает необходимость в подключении специального компьютера с установленной средой разработки и наличием исходной программы для контроля цепей формирования выходных сигналов. Пока может показаться, что табличное программирование пригодно для простых, даже примитивных алгоритмов, но это не так. Данный, упрощенный вариант программы имеет много недостатков и не может использоваться для управления реальным объектом. В таком упрощенном виде он представлен для демонстрации основной идеи применения табличного программирования. Далее будут рассмотрены более сложные примеры табличных программ.
2.2. Использование триггерных ячеек
Одним из недостатков первой версии программы управления шлагбаумом является жесткая зависимость пуска приводного двигателя от состояния концевых выключателей. Если из-за раскачки стрелы шлагбаума на ветру или намокания контактов произойдет замыкание концевого выключателя, то это может привести к неконтролируемому включению двигателя стрелы, так как одна из кнопок, «Открыть» или «Закрыть», уже нажата. Попробуем повысить надежность системы управления шлагбаумом. Изменим способ подачи команд «открыть» и «закрыть». Вместо двухкнопочного выключателя с фиксацией применим обычные нажимные кнопки. Это более надежное и удобное решение. Также добавим кнопку «Стоп», при нажатии на которую состояние выходов 11 и 12, управляющих движением стрелы шлагбаума, становится равным нолю. Хотя нажатие на кнопку «Стоп» остановит движение, ею нельзя заменить аварийную кнопку. Аварийная кнопка должна отключить систему вне зависимости от работы контроллера.
Необходимо отметить, что контакты кнопок «Открыть» и «Закрыть» нормально открытые, а контакт кнопки «Стоп» нормально замкнутый. Это сделано для того, чтобы при неисправности кнопки «Стоп» или обрыве провода, соединяющего ее с контроллером, заблокировать команды открытия и закрытия. Кнопка «Стоп» наряду с аварийной кнопкой является частью системы безопасности, при неисправности которой запрещается работа механизмов.
Чтобы реализовать алгоритм управления с помощью кнопок, необходимо ввести в программу триггерные ячейки. Кнопка управления обычно имеет нормально открытый контакт, и при ее нажатии на входе контроллера появится единица. А концевой выключатель обычно имеет нормально замкнутый контакт, и при его срабатывании на входе контроллера будет уровень, соответствующий нолю. Но реализуемый в программе алгоритм требует, чтобы срабатывание конечного выключателя также давало единицу. Поэтому необходимо инвертировать некоторые входные логические сигналы. Для инверсии сигналов от конечных выключателей, кнопки «Стоп» и главного контактора в ячейку операции запишем слово «NOT».
Состояние программы при отсутствии силового питания представлено на рис. 14, из которого можно увидеть, что силовое питание выключено, аварий нет, шлагбаум открыт, команды «вверх» и «вниз» равны нолю. В отличие от первоначальной программы, верхняя строка перенесена вниз, а в строке 4 появился входной сигнал от кнопки «Стоп», приходящий на входной контакт номер 7. Во многих активных ячейках символ «&» заменен на «R» или «S».
Начальное значение всех ячеек «RS» равно единице, и если не сбросить их в ноль, то возможно появление на выходах ВВЕРХ и ВНИЗ логической единицы, которая самопроизвольно запустит двигатель при первоначальной подаче питания. Чтобы этого не произошло, в строке 7 на входной контакт номер 1 приходит сигнал с главного контактора, коммутирующего силовое питание. После того, как на контроллер будет подано напряжение, а главный контактор еще не будет включен, на контакте номер 1 будет логический ноль, который после инверсии сбросит ячейки «RS».