Программирование привода стрелы шлагбаума
Начнем с программирования части проекта, отвечающей за подъем стрелы. Для этого применим стандартный функциональный блок триггер, который имеет два устойчивых состояния: включен или выключен. Переключение между состояниями происходит по входам установки и сброса.
Выберем на панели Блоки функциональный блок RS-триггер и перетащим его на схему:
Для добавления нескольких одинаковых блоков перетаскивайте с панели с помощью правой кнопки мыши или удерживая клавишу Shift. В этом случае выбранный блок останется на указателе мыши, и его можно будет вставлять многократно простым щелчком по схеме. Для выхода из режима вставки нажмите Esc или кнопку Режим выделения на панели рисования.
Дважды щелкнем по добавленному блоку и откроем редактор свойств. Установим имя блока RSBarrierUp, активируем опцию Вывод заголовка для отображения названия и нажмем ОК:
Переменную Action подключим к входу S. Для этого выделим ее в списке переменных и перетащим на схему - добавится соответствующий блок управления.
Логическая переменная Action принимает значение 1 при нажатии и удерживании управляющей кнопки шлагбаума. Все действия программы должны выполняться точно в момент нажатия кнопки, то есть по переднему фронту сигнала. Для его детектирования используем блок Передний фронт из группы Битовые операции панели блоков. Соединим соответствующие выходы связями - для создания связи достаточно выделить нужный вход или выход блока и протянуть линию до целевого элемента. Соединение выходов с выходами и входов с входами не допускается. После создания связей схема примет следующий вид:
Поскольку одна кнопка управляет как подъемом, так и опусканием стрелы, необходимо определять текущее положение и следующее действие. Введем вспомогательную логическую переменную NextUp. При значении 1 стрела будет открываться. Объединим ее с переменной Action через логическое И (AND). Выберем в панели блоков элемент И группы Битовые операции и разместим на схеме. Соединим элементы, как показано на рисунке:
Подключим переменную BarrierUp привода стрелы к выходу Q блока RS. Для этого переместим нужную переменную на схему и изменим тип блока переменной на Запись через окно редактирования свойств (двойной щелчок мыши):
В задаче определены три причины останова процесса открытия стрелы. Установим оператор ИЛИ (OR) с тремя входами перед входом R блока RS. Оператор объединит все три причины: датчик BarrierOpen сигнализирует о достижении верхнего положения, нажатие кнопки управления во время работы привода и ошибка движения (генерируется при перегрузке привода или превышении времени операции). Переменная ошибки будет называться Error.
Первая цепь управления готова:
Вторая цепь отвечает за процесс закрытия и аналогична первой. Скопируем существующую цепь через меню редактирования (Ctrl + C / Ctrl + V) и разместим ниже исходной. Заменим переменные открытия на переменные закрытия через окно свойств блоков управления:
В этой цепи необходимо использовать инверсное значение переменной NextUp. Для инверсии выделим нужный вход, откроем свойства и активируем флажок Инверсия. Инверсный вход будет отображаться с кружком.
Третья цепь устанавливает вспомогательную переменную NextUp, определяющую направление движения. Добавим новую цепь ниже существующих и разместим блок RS с именем RSNextDirection. Подключим переменную NextUp к выходу этого блока. Направление движения определяется по предыдущим операциям: задний фронт переменной BarrierOpen указывает на завершение открытия, а задний фронт переменной BarrierDown сигнализирует о завершении закрытия. Эти переменные подадим на входы блока RS через детекторы Задний фронт:
Основная часть управления шлагбаумом завершена. Далее необходимо реализовать управление лампой и обработку аварийных ситуаций.