Различия
Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
doc:jroboplc:modules:raduga [2023/09/28 16:21] denis |
doc:jroboplc:modules:raduga [2023/10/01 19:16] (текущий) denis [Состояния комбинированной линии (combo)] |
||
|---|---|---|---|
| Строка 271: | Строка 271: | ||
| Каждый дозатор имеет физическое ограничение по весу, который он может набрать за один раз. Это значение может быть прописано в модуле дозатора в сохраняемом теге ''SetWeightMax''. По умолчанию равно 0, что означает "без ограничений". | Каждый дозатор имеет физическое ограничение по весу, который он может набрать за один раз. Это значение может быть прописано в модуле дозатора в сохраняемом теге ''SetWeightMax''. По умолчанию равно 0, что означает "без ограничений". | ||
| - | В тоже время задача может требовать от дозатора загрузки в одном цикле веса, превышающего его ''SetWeightMax''. В этом случае дозатор выполняет дозирование несколько проходов, количество которых рассчитывается в начале цикла, а заданный вес цикла дозатора, делится на равный части для каждого прохода. | + | В тоже время задача может требовать от дозатора загрузки в одном цикле веса, превышающего его ''SetWeightMax''. В этом случае дозатор выполняет дозирование в несколько проходов, количество которых рассчитывается в начале цикла, а заданный вес цикла дозатора, делится на равный части для каждого прохода. |
| Все действия по загрузке и разгрузке дозаторов выполняются синхронно, в том числе и выполнение проходов. | Все действия по загрузке и разгрузке дозаторов выполняются синхронно, в том числе и выполнение проходов. | ||
| ===== Совместное использование основных дозаторов комбинированными линиями ===== | ===== Совместное использование основных дозаторов комбинированными линиями ===== | ||
| - | todo | + | |
| - | | + | Для дозирования основных компонентов комбинированные линии используют одну и ту же группу дозаторы. Т.к. группа основных дозаторов одномоментно может обслуживать только одну линию, то, во избежание конфликтов, организован шеринг основных дозаторов при помощи тегов ''HoldDosers'', при этом действуют следующие правила: |
| + | |||
| + | - Если линия хочет начать работать с основными дозаторами, то она должна выставить 1 в своем теге ''HoldDosers'' | ||
| + | - Линия не может выставить 1 в своем теге ''HoldDosers'', если: | ||
| + | - у другой линии уже установлен тег ''HoldDosers'' | ||
| + | - другая линия также хочет захватить основные дозаторы и она захотела это сделать раньше (соблюдение очереди) | ||
| + | - Если две и более линий имеют у себя тег ''HoldDosers'' установленным, то линии переходят в состояние ошибки | ||
| + | |||
| + | Аналогично с оборудованием транспорта основных компонентов, только с использованием тега ''HoldTransport''. | ||
| ===== Описание состояний ===== | ===== Описание состояний ===== | ||
| | | ||
| Строка 359: | Строка 367: | ||
| ===== Состояния комбинированной линии (combo) ===== | ===== Состояния комбинированной линии (combo) ===== | ||
| + | |||
| Далее обозначение "Аналогично simple" означает "тоже самое, что и для простой линии". | Далее обозначение "Аналогично simple" означает "тоже самое, что и для простой линии". | ||
| Строка 365: | Строка 374: | ||
| Аналогично simple | Аналогично simple | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| ** 1 - IDLE **- Ожидание команды старт | ** 1 - IDLE **- Ожидание команды старт | ||
| + | |||
| Аналогично simple | Аналогично simple | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 379: | Строка 389: | ||
| Ожидаем ''HoldDosers==0'' по всем combo-линиям, после чего, в соответствии с очередностью, устанавливаем 1 в ''HoldDosers'' и переход в следующее состояние. | Ожидаем ''HoldDosers==0'' по всем combo-линиям, после чего, в соответствии с очередностью, устанавливаем 1 в ''HoldDosers'' и переход в следующее состояние. | ||
| С этого момента основными дозаторами владеет данная линия. Остальные линии только читают и ничего не пишут в дозаторы, а также никак не реагируют на изменения счетчиков. | С этого момента основными дозаторами владеет данная линия. Остальные линии только читают и ничего не пишут в дозаторы, а также никак не реагируют на изменения счетчиков. | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 386: | Строка 396: | ||
| Аналогично simple, только для дозатора контроля | Аналогично simple, только для дозатора контроля | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 393: | Строка 403: | ||
| Аналогично simple, только для дозатора контроля | Аналогично simple, только для дозатора контроля | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 400: | Строка 410: | ||
| Устанавливаем тег ''CmdSeqBeforeLoadC'' и ожидаем 1 в теге ''InpSeqBeforeLoadC'' | Устанавливаем тег ''CmdSeqBeforeLoadC'' и ожидаем 1 в теге ''InpSeqBeforeLoadC'' | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 407: | Строка 417: | ||
| Аналогично simple, только для основных дозаторов | Аналогично simple, только для основных дозаторов | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 414: | Строка 424: | ||
| Аналогично simple, только для основных дозаторов | Аналогично simple, только для основных дозаторов | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 421: | Строка 431: | ||
| Аналогично simple, только для основных дозаторов | Аналогично simple, только для основных дозаторов | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 428: | Строка 438: | ||
| Аналогично состоянию ''HOLD_DOSERS'', только для тега ''HoldTransport'' | Аналогично состоянию ''HOLD_DOSERS'', только для тега ''HoldTransport'' | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 435: | Строка 445: | ||
| Аналогично simple, только для основных дозаторов | Аналогично simple, только для основных дозаторов | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 445: | Строка 455: | ||
| Задержка задается в теге ''TimeTransportP''. В теге ''TimeCnt'' идет обратный отсчет. Это время необходимо для полного прохождения | Задержка задается в теге ''TimeTransportP''. В теге ''TimeCnt'' идет обратный отсчет. Это время необходимо для полного прохождения | ||
| продукта после разгрузки основных дозаторов | продукта после разгрузки основных дозаторов | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 454: | Строка 464: | ||
| Ожидание 1 в теге ''InpCrusherEmpty'' | Ожидание 1 в теге ''InpCrusherEmpty'' | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 465: | Строка 475: | ||
| Ожидаем на дозаторе контроля стабилизацию текущего веса ''Stable==1'' и достижение текущего веса до значения заданного с учетом допустимого недобора: | Ожидаем на дозаторе контроля стабилизацию текущего веса ''Stable==1'' и достижение текущего веса до значения заданного с учетом допустимого недобора: | ||
| SetWeightP - <контрольный дозатор>.CurWeight <= UnderweightLimitC | SetWeightP - <контрольный дозатор>.CurWeight <= UnderweightLimitC | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 476: | Строка 486: | ||
| * сохраняем зафиксированный вес в таблице ''RD_TASK_CTL'' | * сохраняем зафиксированный вес в таблице ''RD_TASK_CTL'' | ||
| * рассчитываем ''SetWeight'' для микродозаторов в соответствии с зафиксированным весом | * рассчитываем ''SetWeight'' для микродозаторов в соответствии с зафиксированным весом | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 483: | Строка 493: | ||
| Аналогично simple, только для микродозаторов | Аналогично simple, только для микродозаторов | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 490: | Строка 500: | ||
| Аналогично simple, только для микродозаторов | Аналогично simple, только для микродозаторов | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 497: | Строка 507: | ||
| Аналогично simple, только для микродозаторов | Аналогично simple, только для микродозаторов | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 504: | Строка 514: | ||
| Ожидание 1 в теге ''InpMixerBusy'' | Ожидание 1 в теге ''InpMixerBusy'' | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 511: | Строка 521: | ||
| Устанавливаем тег ''CmdSeqBeforeLoadMixer'' и ожидаем 1 в теге ''InpSeqBeforeLoadMixer'' | Устанавливаем тег ''CmdSeqBeforeLoadMixer'' и ожидаем 1 в теге ''InpSeqBeforeLoadMixer'' | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 518: | Строка 528: | ||
| Аналогично simple, только для микродозаторов и дозатора контроля | Аналогично simple, только для микродозаторов и дозатора контроля | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 525: | Строка 535: | ||
| Аналогично DELAY_TRANSPORT_P, только для тега ''TimeAfterUnloadCM'' | Аналогично DELAY_TRANSPORT_P, только для тега ''TimeAfterUnloadCM'' | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| Строка 532: | Строка 542: | ||
| Устанавливаем тег ''CmdSeqStartMixing'' и ожидаем 1 в теге ''InpMixerBusy'', после чего сбрасываем теги ''CmdSeqBeforeLoadMixer'' и ''CmdSeqStartMixing'' | Устанавливаем тег ''CmdSeqStartMixing'' и ожидаем 1 в теге ''InpMixerBusy'', после чего сбрасываем теги ''CmdSeqBeforeLoadMixer'' и ''CmdSeqStartMixing'' | ||
| - | // | + | \\ |
| - | // | + | \\ |
| ---- | ---- | ||
| ** 99 - ERROR **- Ошибка установки задачи | ** 99 - ERROR **- Ошибка установки задачи | ||
| - | Аналогично | + | |
| - | // | + | Аналогично simple |
| - | // | + | \\ |
| + | \\ | ||
| ---- | ---- | ||
| ** 100 - CYCLE_FINISHED **- Цикл дозирования закончен | ** 100 - CYCLE_FINISHED **- Цикл дозирования закончен | ||
| - | Аналогично | + | |
| - | // | + | Аналогично simple |
| - | // | + | \\ |
| + | \\ | ||
| ---- | ---- | ||
| ** 101 - TASK_FINISHED **- Задача выполнена | ** 101 - TASK_FINISHED **- Задача выполнена | ||
| - | Аналогично | + | |
| - | // | + | Аналогично simple |
| - | // | + | \\ |
| + | \\ | ||