Программирование привода стрелы шлагбаума

Начнем с программирования части проекта, отвечающей за подъем стрелы. Для этого применим стандартный функциональный блок триггер, который имеет два устойчивых состояния: включен или выключен. Переключение между состояниями происходит по входам установки и сброса.

Выберем на панели Блоки функциональный блок RS-триггер и перетащим его на схему:

_images/910.png

Для добавления нескольких одинаковых блоков перетаскивайте с панели с помощью правой кнопки мыши или удерживая клавишу Shift. В этом случае выбранный блок останется на указателе мыши, и его можно будет вставлять многократно простым щелчком по схеме. Для выхода из режима вставки нажмите Esc или кнопку Режим выделения на панели рисования.

Дважды щелкнем по добавленному блоку и откроем редактор свойств. Установим имя блока RSBarrierUp, активируем опцию Вывод заголовка для отображения названия и нажмем ОК:

_images/5.png

Переменную Action подключим к входу S. Для этого выделим ее в списке переменных и перетащим на схему - добавится соответствующий блок управления.

Логическая переменная Action принимает значение 1 при нажатии и удерживании управляющей кнопки шлагбаума. Все действия программы должны выполняться точно в момент нажатия кнопки, то есть по переднему фронту сигнала. Для его детектирования используем блок Передний фронт из группы Битовые операции панели блоков. Соединим соответствующие выходы связями - для создания связи достаточно выделить нужный вход или выход блока и протянуть линию до целевого элемента. Соединение выходов с выходами и входов с входами не допускается. После создания связей схема примет следующий вид:

_images/step6.png

Поскольку одна кнопка управляет как подъемом, так и опусканием стрелы, необходимо определять текущее положение и следующее действие. Введем вспомогательную логическую переменную NextUp. При значении 1 стрела будет открываться. Объединим ее с переменной Action через логическое И (AND). Выберем в панели блоков элемент И группы Битовые операции и разместим на схеме. Соединим элементы, как показано на рисунке:

_images/step7.png

Подключим переменную BarrierUp привода стрелы к выходу Q блока RS. Для этого переместим нужную переменную на схему и изменим тип блока переменной на Запись через окно редактирования свойств (двойной щелчок мыши):

_images/n_step6.png
_images/step9.png

В задаче определены три причины останова процесса открытия стрелы. Установим оператор ИЛИ (OR) с тремя входами перед входом R блока RS. Оператор объединит все три причины: датчик BarrierOpen сигнализирует о достижении верхнего положения, нажатие кнопки управления во время работы привода и ошибка движения (генерируется при перегрузке привода или превышении времени операции). Переменная ошибки будет называться Error.

Первая цепь управления готова:

_images/step10.png

Вторая цепь отвечает за процесс закрытия и аналогична первой. Скопируем существующую цепь через меню редактирования (Ctrl + C / Ctrl + V) и разместим ниже исходной. Заменим переменные открытия на переменные закрытия через окно свойств блоков управления:

_images/step11.png

В этой цепи необходимо использовать инверсное значение переменной NextUp. Для инверсии выделим нужный вход, откроем свойства и активируем флажок Инверсия. Инверсный вход будет отображаться с кружком.

Третья цепь устанавливает вспомогательную переменную NextUp, определяющую направление движения. Добавим новую цепь ниже существующих и разместим блок RS с именем RSNextDirection. Подключим переменную NextUp к выходу этого блока. Направление движения определяется по предыдущим операциям: задний фронт переменной BarrierOpen указывает на завершение открытия, а задний фронт переменной BarrierDown сигнализирует о завершении закрытия. Эти переменные подадим на входы блока RS через детекторы Задний фронт:

_images/step12.png

Основная часть управления шлагбаумом завершена. Далее необходимо реализовать управление лампой и обработку аварийных ситуаций.