1. Что разбираем
Логика конвейера - это один из самых удобных учебных примеров для изучения PLC и FBD.
В такой задаче есть кнопки оператора, разрешающие условия, аварийный запрет и выход управления двигателем. На этом примере хорошо видно, как отдельные логические элементы объединяются в рабочую программу.
Основной пример урока запускает конвейер кнопкой Start, останавливает кнопкой Stop и снимает разрешение работы при Safety_OK = FALSE. Датчик Product_Stop_Sensor временно останавливает двигатель; после освобождения датчика движение продолжается автоматически, если разрешение оператора сохранено.
Start_Button + Stop_Button + Safety_OK + Product_Stop_Sensor -> логика PLC -> Motor_Run
2. Где это применяется
Похожая логика встречается во многих реальных задачах промышленной автоматизации.
- запуск и остановка ленточного конвейера;
- подающий транспортер перед упаковочной машиной;
- накопительный конвейер перед роботом;
- рольганг подачи коробов или паллет;
- выдающий транспортер после станка;
- учебная модель запуска двигателя с блокировками.
В реальной системе выход PLC обычно не включает двигатель напрямую. Он может подавать команду на контактор, частотный преобразователь, сервопривод или промежуточное реле.
3. Сигналы примера
| Сигнал | Тип | Назначение |
|---|---|---|
| Start_Button | вход | кнопка запуска конвейера |
| Stop_Button | вход | кнопка остановки конвейера |
| Safety_OK | вход | общее разрешение работы: аварии нет, дверь закрыта |
| Product_Stop_Sensor | вход | датчик заполнения на выходе конвейера |
| Conveyor_Enable_Latch | RS-блок | хранит разрешение оператора на выходе Q |
| Motor_Run | выход | команда двигателя конвейера |
Для формул ниже обозначим Q блока Conveyor_Enable_Latch как Conveyor_Enable. Это состояние RS-блока, а не отдельный блок INTERNAL_SIGNAL. В загружаемом JSON есть все четыре входа из таблицы и один выход Motor_Run.
4. Основная идея логики
Простой конвейер обычно не должен работать только пока оператор держит кнопку Start. После краткого нажатия Start команда работы должна запомниться.
Поэтому в загружаемой схеме используется RS-блок Conveyor_Enable_Latch с приоритетом сброса. Он сохраняет разрешение после отпускания Start. Эквивалентная формула памяти:
Conveyor_Enable = (Start_Button OR previous_Conveyor_Enable) AND NOT Stop_Button AND Safety_OK
Смысл этой формулы:
- Start_Button запускает конвейер;
- previous_Conveyor_Enable — разрешение, сохранённое после предыдущего скана;
- Stop_Button снимает команду работы;
- Safety_OK запрещает работу при аварии или отсутствии разрешения.
Motor_Run = Conveyor_Enable AND NOT Product_Stop_Sensor
Датчик влияет на Motor_Run, но не сбрасывает Conveyor_Enable. При одновременных Start и Stop побеждает Stop, поскольку используется RS, а не SR.
5. Таблица работы
В таблице показано изменение разрешения Conveyor_Enable. При Product_Stop_Sensor = FALSE выход Motor_Run повторяет это разрешение.
| Start_Button | Stop_Button | Safety_OK | Conveyor_Enable до цикла | Conveyor_Enable после цикла |
|---|---|---|---|---|
| FALSE | FALSE | TRUE | FALSE | FALSE |
| TRUE | FALSE | TRUE | FALSE | TRUE |
| FALSE | FALSE | TRUE | TRUE | TRUE |
| FALSE | TRUE | TRUE | TRUE | FALSE |
| TRUE | TRUE | TRUE | FALSE | FALSE |
| TRUE | FALSE | FALSE | FALSE | FALSE |
| FALSE | FALSE | FALSE | TRUE | FALSE |
Важный момент: Stop_Button = TRUE или Safety_OK = FALSE сбрасывают разрешение, поэтому после их снятия для нового запуска требуется Start. Product_Stop_Sensor только приостанавливает двигатель и не требует нового Start.
6. Разрешения и аварийные условия
Сигнал Safety_OK лучше понимать как общее разрешение работы. Он может объединять несколько условий.
Safety_OK = Emergency_OK AND Door_Closed AND Drive_Ready
Тогда логика конвейера становится более понятной:
Conveyor_Enable = (Start_Button OR previous_Conveyor_Enable) AND NOT Stop_Button AND Safety_OK
Если любое разрешающее условие пропадает, Safety_OK становится FALSE, а Conveyor_Enable сбрасывается.
В загружаемом примере Safety_OK — один вход. Объединение Emergency_OK, Door_Closed и Drive_Ready через AND выше — теоретическое расширение.
7. Другой вариант: повторный Start после заполнения
Часто конвейер должен останавливаться не только по кнопке Stop, но и по состоянию датчика. Например, если на выходе накопилась деталь или следующая зона занята.
Если нужно сбрасывать запомненную команду при заполнении и требовать нового Start после освобождения датчика, условие датчика включают в формулу памяти:
Conveyor_Run = (Start_Button OR Conveyor_Run) AND NOT Stop_Button AND Safety_OK AND NOT Product_Stop_Sensor
В этом варианте Product_Stop_Sensor = TRUE сбрасывает Conveyor_Run, и оператор должен снова нажать Start после освобождения датчика. Это отдельный теоретический вариант; основной JSON урока реализует автоматическое продолжение, описанное ниже.
8. Загружаемая схема: автоматическое продолжение
В некоторых задачах нужно, чтобы конвейер временно остановился при заполнении и автоматически продолжил работу, когда место освободится.
Тогда лучше разделить два сигнала:
| Сигнал | Назначение |
|---|---|
| Conveyor_Enable | запомненная команда оператора: конвейер разрешен к работе |
| Motor_Run | фактическая команда на двигатель с учетом датчиков и разрешений |
Conveyor_Enable = (Start_Button OR previous_Conveyor_Enable) AND NOT Stop_Button AND Safety_OK Motor_Run = Conveyor_Enable AND NOT Product_Stop_Sensor
В этом варианте Stop_Button снимает разрешение работы, а Product_Stop_Sensor только временно запрещает включение двигателя.
Именно этот вариант реализован в основном примере урока. Conveyor_Enable хранится в RS-блоке Conveyor_Enable_Latch; отдельного именованного сигнала Conveyor_Run в JSON нет.
9. Связь с реальным оборудованием
В реальной системе команда Motor_Run обычно идет не прямо на двигатель, а на управляющее устройство.
- катушка контактора;
- дискретный вход частотного преобразователя;
- вход Enable или Run привода;
- модуль управления мотором;
- промежуточное реле.
Кроме программной логики, в реальной линии обязательно учитываются требования безопасности. Аварийная остановка, защитные двери и цепи безопасности не должны зависеть только от учебной логики программы.
10. Практика в симуляторе
Откройте основной пример урока и запустите симуляцию. Наблюдайте Q блока Conveyor_Enable_Latch и выход Motor_Run. После каждого изменения входов дождитесь следующего скана в режиме «Старт».
- Установите Safety_OK = TRUE, а Start_Button, Stop_Button и Product_Stop_Sensor — в FALSE.
- Нажмите Start_Button: Q блока Conveyor_Enable_Latch и Motor_Run станут TRUE.
- Отпустите Start_Button: оба значения останутся TRUE.
- Установите Product_Stop_Sensor = TRUE. Motor_Run станет FALSE, а Q блока останется TRUE.
- Верните Product_Stop_Sensor в FALSE. Motor_Run снова станет TRUE без нового нажатия Start.
- Нажмите Stop_Button: Q блока и Motor_Run станут FALSE. Отпустите Stop и проверьте, что двигатель не запускается самостоятельно.
- Снова запустите конвейер, затем установите Safety_OK = FALSE: оба значения станут FALSE. Верните Safety_OK в TRUE при отпущенном Start: для запуска нужно новое нажатие.
- Проверьте одновременные Start_Button = TRUE и Stop_Button = TRUE: оба значения должны быть FALSE.
Кнопка «Связанный пример» загружает другую схему: пуск/стоп конвейера на SR-триггере. В ней нет Safety_OK и Product_Stop_Sensor, а при одновременных Set и Reset приоритет имеет Set. Для упражнения выше используйте основной пример урока.
Цель упражнения - увидеть, как кнопки, память состояния и разрешающие условия вместе формируют команду работы конвейера.
11. Краткий итог
Логика конвейера объединяет несколько базовых тем: TRUE/FALSE, AND, OR, NOT, самоподхват и разрешающие условия.
Conveyor_Enable = (Start_Button OR previous_Conveyor_Enable) AND NOT Stop_Button AND Safety_OK Motor_Run = Conveyor_Enable AND NOT Product_Stop_Sensor
В более сложных схемах к этой логике добавляют датчики наличия детали, сигналы готовности соседних механизмов, таймеры, аварии и режимы работы.
Важно разделять простую учебную модель и реальную промышленную систему. Учебная схема помогает понять принцип, но реальное оборудование требует дополнительной проверки безопасности и аппаратных цепей защиты.
Практический блок
Откройте связанный пример в редакторе, запустите симуляцию и повторите упражнение из статьи. JSON можно скачать отдельно для просмотра или переноса.