Различия
Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
doc:jroboplc:modules:raduga [2023/09/28 14:53] denis [Состояния простой линии (simple)] |
doc:jroboplc:modules:raduga [2023/10/01 19:16] (текущий) denis [Состояния комбинированной линии (combo)] |
||
|---|---|---|---|
| Строка 271: | Строка 271: | ||
| Каждый дозатор имеет физическое ограничение по весу, который он может набрать за один раз. Это значение может быть прописано в модуле дозатора в сохраняемом теге ''SetWeightMax''. По умолчанию равно 0, что означает "без ограничений". | Каждый дозатор имеет физическое ограничение по весу, который он может набрать за один раз. Это значение может быть прописано в модуле дозатора в сохраняемом теге ''SetWeightMax''. По умолчанию равно 0, что означает "без ограничений". | ||
| - | В тоже время задача может требовать от дозатора загрузки в одном цикле веса, превышающего его ''SetWeightMax''. В этом случае дозатор выполняет дозирование несколько проходов, количество которых рассчитывается в начале цикла, а заданный вес цикла дозатора, делится на равный части для каждого прохода. | + | В тоже время задача может требовать от дозатора загрузки в одном цикле веса, превышающего его ''SetWeightMax''. В этом случае дозатор выполняет дозирование в несколько проходов, количество которых рассчитывается в начале цикла, а заданный вес цикла дозатора, делится на равный части для каждого прохода. |
| Все действия по загрузке и разгрузке дозаторов выполняются синхронно, в том числе и выполнение проходов. | Все действия по загрузке и разгрузке дозаторов выполняются синхронно, в том числе и выполнение проходов. | ||
| + | |||
| + | ===== Совместное использование основных дозаторов комбинированными линиями ===== | ||
| + | |||
| + | Для дозирования основных компонентов комбинированные линии используют одну и ту же группу дозаторы. Т.к. группа основных дозаторов одномоментно может обслуживать только одну линию, то, во избежание конфликтов, организован шеринг основных дозаторов при помощи тегов ''HoldDosers'', при этом действуют следующие правила: | ||
| + | |||
| + | - Если линия хочет начать работать с основными дозаторами, то она должна выставить 1 в своем теге ''HoldDosers'' | ||
| + | - Линия не может выставить 1 в своем теге ''HoldDosers'', если: | ||
| + | - у другой линии уже установлен тег ''HoldDosers'' | ||
| + | - другая линия также хочет захватить основные дозаторы и она захотела это сделать раньше (соблюдение очереди) | ||
| + | - Если две и более линий имеют у себя тег ''HoldDosers'' установленным, то линии переходят в состояние ошибки | ||
| + | |||
| + | Аналогично с оборудованием транспорта основных компонентов, только с использованием тега ''HoldTransport''. | ||
| + | ===== Описание состояний ===== | ||
| + | | ||
| + | |||
| ===== Состояния простой линии (simple) ===== | ===== Состояния простой линии (simple) ===== | ||
| + | |||
| + | ---- | ||
| ** 0 - NONE ** - Задача не установлена | ** 0 - NONE ** - Задача не установлена | ||
| Для установки задачи записать в ''TaskId'' значение ''RD_TASK.ID'' | Для установки задачи записать в ''TaskId'' значение ''RD_TASK.ID'' | ||
| + | \\ | ||
| + | \\ | ||
| ---- | ---- | ||
| ** 1 - IDLE **- Ожидание команды старт | ** 1 - IDLE **- Ожидание команды старт | ||
| + | |||
| Ожидание записи 1 в тег ''Start'', после чего: | Ожидание записи 1 в тег ''Start'', после чего: | ||
| * генерируется новое значение ''CycleId'' | * генерируется новое значение ''CycleId'' | ||
| * запоминаются текущие значения счетчиков дозаторов в ''SumWeightBeg'' питателей | * запоминаются текущие значения счетчиков дозаторов в ''SumWeightBeg'' питателей | ||
| * переход в состояние ''PREPARING'' | * переход в состояние ''PREPARING'' | ||
| + | |||
| + | Если линия имеет установленный параметр ''autostart: on'', то ''Start'' всегда считается равным 1. | ||
| Если задача выполнена, т.е. ''SetWeightTot'' меньше или равно ''ExeWeightTot'', то переход в состояние ''TASK_FINISHED''. | Если задача выполнена, т.е. ''SetWeightTot'' меньше или равно ''ExeWeightTot'', то переход в состояние ''TASK_FINISHED''. | ||
| + | \\ | ||
| + | \\ | ||
| ---- | ---- | ||
| ** 2 - PREPARING **- Подготовка дозаторов к старту цикла | ** 2 - PREPARING **- Подготовка дозаторов к старту цикла | ||
| + | Посылаем дозаторам команду "старт цикла". Ожидаем от дозаторов состояния готовности к приему задачи. | ||
| + | |||
| + | Здесь и далее участвуют только дозаторы задействованные в рецепте, а остальные дозаторы игнорируются. | ||
| + | \\ | ||
| + | \\ | ||
| ---- | ---- | ||
| ** 3 - SETTING **- Установка задания дозаторам | ** 3 - SETTING **- Установка задания дозаторам | ||
| + | |||
| + | Посылаем дозаторам команды "установить задачу". Если хотя бы один из дозаторов по каким-либо причинам не принимает задачу, то переход в состояние ''ERROR''. | ||
| + | Если все дозаторы принимают задачу, то переход в следующее состояние. | ||
| + | \\ | ||
| + | \\ | ||
| ---- | ---- | ||
| ** 4 - LOADING **- Идет дозирование (загрузка). Ожидание завершения дозирования | ** 4 - LOADING **- Идет дозирование (загрузка). Ожидание завершения дозирования | ||
| + | |||
| + | Если загрузка разрешена, то посылаем дозаторам команды "начать задачу" и "начать загрузку". Ожидаем все дозаторы в состоянии готовности к разгрузке и переход в следующее состояние. | ||
| + | \\ | ||
| + | \\ | ||
| ---- | ---- | ||
| ** 5 - UNLOADING **- Идет разгрузка. Ожидание завершения разгрузки | ** 5 - UNLOADING **- Идет разгрузка. Ожидание завершения разгрузки | ||
| + | |||
| + | Если разгрузка разрешена, то посылаем дозаторам команды "начать разгрузку". Ожидаем все дозаторы в состоянии стоп и, если все дозаторы выполнили все проходы, то переход в следующее состояние. Если же не все дозаторы выполнили все проходы, то возврат к состоянию ''PREPARING''. | ||
| + | \\ | ||
| + | \\ | ||
| ---- | ---- | ||
| ** 99 - ERROR **- Ошибка установки задачи | ** 99 - ERROR **- Ошибка установки задачи | ||
| + | |||
| + | Ожидание отмены или сброса задачи. | ||
| + | \\ | ||
| + | \\ | ||
| ---- | ---- | ||
| ** 100 - CYCLE_FINISHED **- Цикл дозирования закончен | ** 100 - CYCLE_FINISHED **- Цикл дозирования закончен | ||
| + | |||
| + | Возврат в состояние IDLE | ||
| + | \\ | ||
| + | \\ | ||
| ---- | ---- | ||
| ** 101 - TASK_FINISHED **- Задача выполнена | ** 101 - TASK_FINISHED **- Задача выполнена | ||
| + | |||
| + | Ожидание отмены или сброса задачи. | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| ===== Состояния комбинированной линии (combo) ===== | ===== Состояния комбинированной линии (combo) ===== | ||
| + | Далее обозначение "Аналогично simple" означает "тоже самое, что и для простой линии". | ||
| + | |||
| + | ---- | ||
| ** 0 - NONE **- Задача не установлена | ** 0 - NONE **- Задача не установлена | ||
| + | Аналогично simple | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 1 - IDLE **- Ожидание команды старт | ** 1 - IDLE **- Ожидание команды старт | ||
| + | Аналогично simple | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 8 - HOLD_DOSERS **- Ожидание захвата дозаторов ОК | ** 8 - HOLD_DOSERS **- Ожидание захвата дозаторов ОК | ||
| + | Ожидаем ''HoldDosers==0'' по всем combo-линиям, после чего, в соответствии с очередностью, устанавливаем 1 в ''HoldDosers'' и переход в следующее состояние. | ||
| + | С этого момента основными дозаторами владеет данная линия. Остальные линии только читают и ничего не пишут в дозаторы, а также никак не реагируют на изменения счетчиков. | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 9 - PREPARING_C **- Подготовка дозатора контроля к старту цикла | ** 9 - PREPARING_C **- Подготовка дозатора контроля к старту цикла | ||
| + | Аналогично simple, только для дозатора контроля | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 10 - SETTING_C **- Установка задания дозатору контроля | ** 10 - SETTING_C **- Установка задания дозатору контроля | ||
| + | Аналогично simple, только для дозатора контроля | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 11 - START_SEQ_BEFORE_LOAD_C **- Запуск оборудования перед дозатором контроля | ** 11 - START_SEQ_BEFORE_LOAD_C **- Запуск оборудования перед дозатором контроля | ||
| + | Устанавливаем тег ''CmdSeqBeforeLoadC'' и ожидаем 1 в теге ''InpSeqBeforeLoadC'' | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 12 - PREPARING_P **- Подготовка дозаторов ОК к старту цикла | ** 12 - PREPARING_P **- Подготовка дозаторов ОК к старту цикла | ||
| + | Аналогично simple, только для основных дозаторов | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 13 - SETTING_P **- Установка задания дозаторам ОК | ** 13 - SETTING_P **- Установка задания дозаторам ОК | ||
| + | Аналогично simple, только для основных дозаторов | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 14 - LOADING_P **- Идет загрузка дозаторов ОК | ** 14 - LOADING_P **- Идет загрузка дозаторов ОК | ||
| + | Аналогично simple, только для основных дозаторов | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 15 - HOLD_TRANSPORT **- Ожидание захвата транспорта ОК | ** 15 - HOLD_TRANSPORT **- Ожидание захвата транспорта ОК | ||
| + | Аналогично состоянию ''HOLD_DOSERS'', только для тега ''HoldTransport'' | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 16 - UNLOADING_P **- Идет разгрузка дозаторов ОК | ** 16 - UNLOADING_P **- Идет разгрузка дозаторов ОК | ||
| + | Аналогично simple, только для основных дозаторов | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 17 - DELAY_TRANSPORT_P **- Задержка времени для транспорта ОК | ** 17 - DELAY_TRANSPORT_P **- Задержка времени для транспорта ОК | ||
| + | Сбрасываем тег ''HoldDosers''. | ||
| + | |||
| + | Задержка задается в теге ''TimeTransportP''. В теге ''TimeCnt'' идет обратный отсчет. Это время необходимо для полного прохождения | ||
| + | продукта после разгрузки основных дозаторов | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 18 - WAIT_CRUSHER_EMPTY **- Ожидание опустошения дробилки | ** 18 - WAIT_CRUSHER_EMPTY **- Ожидание опустошения дробилки | ||
| + | Сбрасываем тег ''HoldTransport''. | ||
| + | |||
| + | Ожидание 1 в теге ''InpCrusherEmpty'' | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 19 - LOADING_C **- Идет загрузка дозатора контроля (набор мин.вес, стабилизация веса) | ** 19 - LOADING_C **- Идет загрузка дозатора контроля (набор мин.вес, стабилизация веса) | ||
| + | Сбрасываем тег ''CmdSeqBeforeLoadC''. | ||
| + | |||
| + | Если загрузка разрешена, то посылаем дозатору контроля команды «начать задачу» и «начать загрузку». | ||
| + | Ожидаем на дозаторе контроля стабилизацию текущего веса ''Stable==1'' и достижение текущего веса до значения заданного с учетом допустимого недобора: | ||
| + | SetWeightP - <контрольный дозатор>.CurWeight <= UnderweightLimitC | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 20 - STOP_LOAD_C **- Остановка загрузки дозатора контроля | ** 20 - STOP_LOAD_C **- Остановка загрузки дозатора контроля | ||
| + | Посылаем контрольному дозатору команду "стоп загрузки". | ||
| + | Ожидаем на дозаторе контроля стабилизацию текущего веса и состояния готовности к разгрузке, после чего: | ||
| + | * фиксируем текущий вес контрольного дозатора в теге ''ExeWeightC'' | ||
| + | * сохраняем зафиксированный вес в таблице ''RD_TASK_CTL'' | ||
| + | * рассчитываем ''SetWeight'' для микродозаторов в соответствии с зафиксированным весом | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 21 - PREPARING_M **- Подготовка дозаторов МК к старту цикла | ** 21 - PREPARING_M **- Подготовка дозаторов МК к старту цикла | ||
| + | Аналогично simple, только для микродозаторов | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 22 - SETTING_M **- Установка задания дозаторам МК | ** 22 - SETTING_M **- Установка задания дозаторам МК | ||
| + | Аналогично simple, только для микродозаторов | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 23 - LOADING_M **- Идет загрузка дозаторов МК | ** 23 - LOADING_M **- Идет загрузка дозаторов МК | ||
| + | Аналогично simple, только для микродозаторов | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 24 - WAIT_MIXER_READY **- Ожидание готовности миксера к загрузке | ** 24 - WAIT_MIXER_READY **- Ожидание готовности миксера к загрузке | ||
| + | Ожидание 1 в теге ''InpMixerBusy'' | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 25 - START_SEQ_BEFORE_LOAD_MIXER **- Запуск оборудования разгрузки дозаторов контроля и МК в миксер | ** 25 - START_SEQ_BEFORE_LOAD_MIXER **- Запуск оборудования разгрузки дозаторов контроля и МК в миксер | ||
| + | Устанавливаем тег ''CmdSeqBeforeLoadMixer'' и ожидаем 1 в теге ''InpSeqBeforeLoadMixer'' | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 26 - UNLOADING_C_M **- Идет разгрузка дозаторов контроля и МК | ** 26 - UNLOADING_C_M **- Идет разгрузка дозаторов контроля и МК | ||
| + | Аналогично simple, только для микродозаторов и дозатора контроля | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 27 - DELAY_AFTER_UNLOAD_C_M **- Задержка времени после разгрузки дозаторов контроля и МК | ** 27 - DELAY_AFTER_UNLOAD_C_M **- Задержка времени после разгрузки дозаторов контроля и МК | ||
| + | Аналогично DELAY_TRANSPORT_P, только для тега ''TimeAfterUnloadCM'' | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 28 - START_MIXING **- Запуск цикла смешивания | ** 28 - START_MIXING **- Запуск цикла смешивания | ||
| + | Устанавливаем тег ''CmdSeqStartMixing'' и ожидаем 1 в теге ''InpMixerBusy'', после чего сбрасываем теги ''CmdSeqBeforeLoadMixer'' и ''CmdSeqStartMixing'' | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 99 - ERROR **- Ошибка установки задачи | ** 99 - ERROR **- Ошибка установки задачи | ||
| + | Аналогично simple | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 100 - CYCLE_FINISHED **- Цикл дозирования закончен | ** 100 - CYCLE_FINISHED **- Цикл дозирования закончен | ||
| + | Аналогично simple | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | ---- | ||
| ** 101 - TASK_FINISHED **- Задача выполнена | ** 101 - TASK_FINISHED **- Задача выполнена | ||
| + | |||
| + | Аналогично simple | ||
| + | \\ | ||
| + | \\ | ||
| + | |||