Основной функционал программы
Подключение к ПЛК
Для взаимодействия с ПЛК нужно настроить подключение в ETL:
- для записи значений переменных из рецептурных карт ETL: порт OPC UA
4840 - для получения решений по отбраковке, а так же обработке команд: порт TCP
5001
Настройки в рецептурных картах
| Переменная ПЛК | Описание |
|---|---|
isStartedProgram |
Отвечает за запуск и остановку алгоритма программы Запустить алгоритм – true, остановить алгоритм – falseЕсли значение false, при этом нужные переменные будут указаны, основной функционал работать не будетПри установке значения в false сбрасываются все остальные значения переменных, а так же внутренние счётчики программы |
debounceProductSensor |
Время устранения дребезга датчика продукта, мс |
isUsedTimer |
Режим работы по таймеру |
delayForTriggerCam |
При режиме работы по таймеру. Задержка срабатывания камеры после срабатывания датчика продукта, мс Время движения продукта от датчика к камере |
delayForDecisionMaking |
При режиме работы по таймеру. Время движения продукта по линии от датчика продукта до отбраковщика, мс |
isUsedEncoder |
Режим работы по энкодеру (если используется энкодер) |
diameterOfEncoderWheel |
Диаметр ролика энкодера, мм Значение указывается, если выбран режим работы по энкодеру |
encoderPulsesPerCycle |
Количество импульсов на оборот Значение указывается, если выбран режим работы по энкодеру |
lengthToTriggerCam |
При режиме работы по энкодеру. Расстояние от датчика продукта до камеры, мм Расстояние, которое проходит продукт от датчика к камере |
lengthToDecisionMaking |
При режиме работы по энкодеру. Расстояние от датчика продукта до отбраковщика, мм Расстояние, которое проходит продукт от датчика к отбраковщику |
durationTriggerCam |
Длительность сигнала, подаваемого на камеру, мс |
cameraIpAddress |
IP адрес камеры. Значения устанавливаются по октетам |
cameraPort |
Порт камеры |
maxTimeUpperSensor |
При режиме работы по таймеру. Время, в течение которого датчик продукта может подавать сигнал. Если датчик продолжает подавать сигнал, считается, что датчик "залип" |
maxLengthUpperSensor |
При режиме работы по энкодеру. Расстояние, на протяжении которого датчик продукта может подавать сигнал. Если датчик продолжает подавать сигнал, считается, что датчик "залип" |
durationForFillPusher |
Длительность сигнала, подаваемого на отбраковщик, время заполнения цилиндра отбраковщика, мс |
stopLineMode |
Инвертирует работу выхода ПЛК B3 |
Принцип алгоритма основного функционала
Принцип работы алгоритма программы основан на очереди: первый вошёл, первый вышел. ПЛК в памяти держит очередь продуктов. Продуктом в программе ПЛК считается структура, имеющая поле, куда записывается код продукта. Для этого ПЛК необходимо подключение к камере.
Очередь наполняется по сигналу от датчика продукта для камеры. При получении сигнала от этого датчика, ПЛК записывает временную метку или позицию по энкодеру, запись того или иного значения зависит от режима работы. На основе этих данных и значений соответствующих переменных, доступных по OPC UA, производится расчёт момента подачи сигнала на внешнее оборудование (камера, отбраковщик, сигнальная колонна, сортировщик).
Продукт выходит из очереди, когда оказывается на месте принятия решения. Место принятия решения – место, где расположен отбраковщик, здесь продукт либо пропускается, либо отбраковывается. Расчёт этого места в ПЛК происходит на основе значений переменных, доступных по OPC UA, и временной метки или позиции по энкодеру, расчёт по тем или иным значениям зависит от режима работы.
Режим работы определяется наличием энкодера и установкой значений соответствующих переменных:
- работа по таймеру (по временным меткам)
- работа по энкодеру (если используется энкодер)
Алгоритм программы ПЛК можно представить в виде следующей принципиальной схемы.

Принцип устранения дребезга датчика продукта
После получения сигнала от датчика продукта ПЛК запускает таймер на время, заданное в переменной debounceProductSensor, в течение которого ПЛК игнорирует последующие сигналы.
Залипание датчика продукта
Если датчик продукта выдаёт сигнал дольше определённого времени maxTimeUpperSensor, или дольше заданного расстояния maxLengthUpperSensor, то включается авария. Расчёт по тому или иному значению происходит в зависимости от режима работы ПЛК.
Обработка залипания включается, если значение соответствующей переменной больше 0.
Подача сигнала на камеру
ПЛК рассчитывает момент подачи сигнала на камеру на основе:
- в режиме работы по таймеру: значения переменной
delayForTriggerCamи временной метки продукта в очереди - в режиме работы по энкодеру: значения переменной
lengthToTriggerCamи позиции продукта в очереди
ПЛК подаёт сигнал на камеру заданное время, определённое в переменной durationTriggerCam.
Подача сигнала на отбраковщик
ПЛК рассчитывает момент подачи сигнала на отбраковщик на основе:
- в режиме работы по таймеру: значения переменной
delayForDecisionMakingи временной метки продукта в очереди - в режиме работы по энкодеру: значения переменной
lengthToDecisionMakingи позиции продукта в очереди
ПЛК подаёт сигнал на отбраковщик заданное время, определённое в переменной durationForFillPusher при условии, что установлено значение true в переменной isUsedPusher.
Сигнал аварии
Сигнал аварии именуется так же: остановка линии, сигнал запущенной программы (isStartedProgram = true).
Сигнал аварии – это функционал, связанный с дополнительным функционалом программы ПЛК, определяющий условия возникновения аварии.
Сигнал аварии связан с выходом B3. По умолчанию, этот выход выдаёт сигнал при запуске основного алгоритма, что означает следующее:
- основной алгоритм запущен (
isStartedProgram=true) - аварии нет
При выполнении одного из условий аварии, ПЛК отключает выход B3.
Сигнал можно инвертировать, чтобы ПЛК выдавал сигнал на выход B3 при возникновении аварии. Чтобы инвертировать сигнал, нужно установить переменной stopLineMode значение true.
Настройка взаимодействия ПЛК с камерой и ETL
ПЛК хранит в памяти очередь продуктов, которые представляют собой структуру с полем для кода. Это поле заполняется данными, полученными от камеры. Для этого нужно указать в рецептурных картах параметры подключения к камере: cameraIpAddress и cameraPort.
ПЛК обрабатывает сообщения от ETL, которые должны содержать решение (браковать или пропустить) по определённому продукту. Для этого ETL должен формировать строку вида решение~код_продукта:
решение– значение1или0:1– пропустить продукт,0– отбраковать продукткод_продукта– код продукта, по которому ПЛК найдёт нужный продукт в очереди и запишет для него решение
Примеры: 1~code1 – пропустить продукт с кодом code1, 0~code2 – отбраковать продукт с кодом code2.
Для отправки таких строк в ETL нужно использовать узел схем "Отправить код на контроллер ENCODE".
Команды ПЛК
| Команда | Описание |
|---|---|
get-program-version |
Получить версию программы ПЛК |
turn-on:Bn |
Включить физический выходn – номер выхода от 1 до 8, кроме 3 |
turn-on:Bn$t |
Включить физический выход на заданное количество времениn – номер выхода от 1 до 8, кроме 3t – количество времени в мс |
turn-off:Bn |
Отключить физический выходn – номер выхода от 1 до 8, кроме 3 |
stop-line |
Включение аварии |
Кнопка сброса
ПЛК поддерживает сброс по кнопке, подключённой на вход A8. Что происходит при сбросе:
- сброс внутренних счётчиков
- очистка очереди продуктов
- сброс сигнала аварии
Используемые входы/выходы
Входы:
A1– энкодер (режим работы по энкодеру)A2– датчик продуктаA8– кнопка сброса
Выходы:
B1– камераB2– отбраковщикB3– сигнал аварии