Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
doc:jroboplc:modules:raduga [2023/09/28 14:51] 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'' | ||
Строка 286: | Строка 307: | ||
* переход в состояние ''PREPARING'' | * переход в состояние ''PREPARING'' | ||
- | Если задача выполнена, т.е. ''SetWeightTot <= ExeWeightTot'', то переход в состояние ''TASK_FINISHED''. | + | Если линия имеет установленный параметр ''autostart: on'', то ''Start'' всегда считается равным 1. |
+ | |||
+ | Если задача выполнена, т.е. ''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 | ||
+ | \\ | ||
+ | \\ | ||
+ | |||