Модуль управления процессом многокомпонентного дозирования. Данный модуль требует включения в задачу.
Позволяет управлять линиями дозирования двух типов:
plugin.raduga: module.rdsvr: database: db emulate: off deleteOtherStuff: on lines: - name: LPS num: 1 type: simple descr: Линия предсмеси hidden: off dosers: - name: "doser 11" module: d11 srcBunkers: - "b111" - name: "doser 12" module: d12 srcBunkers: - "b121" - "b122" - name: "doser 13" module: d13 srcBunkers: - "b131" - "b132" - "b133" - name: "doser 14" module: d14 srcBunkers: - "b141" - "b142" - "b143" - "b144" dstBunkers: - "b101" - "b102" params: - name: spf4 descr: СПФ4 в предкондиционер tagname: FAT%l:%p.SetFlow valtype: double - name: L1A num: 2 type: combo descr: Линия 1А ctlDoserModule: d2c dosers: - name: "doser 21" module: d21 srcBunkers: - "b211" - name: "doser 22" module: d22 srcBunkers: - "b221" - "b222" microDosers: - name: "doser 23" module: d23 srcBunkers: - "b231" - "b232" - "b233" - name: "doser 24" module: d24 srcBunkers: - "b241" - "b242" - "b243" - "b244" dstBunkers: - "b201" - "b202" - "b203" - "b204"
Параметр | Умолчание | Описание |
---|---|---|
database | db | Модуль базы данных (database) |
emulate | off | Режим эмуляции - свободная запись в теги без использования базы данных |
deleteOtherStuff | on | Удаление записей, не относящихся к данному модулю (исключительное использование базы данных одним модулем) |
lines | - | Список линий |
params | - | Список параметров |
lines | ||
type | simple | Тип линии: simple - простая линия (одна группа дозаторов) combo - комбинированная линия (две группы дозаторов и промежуточный контрольный дозатор) |
Для всех типов линий | ||
num | - | Номер линии. Используется только для формирования имен тегов |
name | - | Уникальное имя линии |
descr | - | Описание линии (произвольный текст) |
hidden | off | Линия не будет видна в менеджере рецептов |
autostart | off | Автоматический старт циклов дозирования |
duplicate | - | Имя линии, для которой данная линия будет дублером |
dosers | - | Список дозаторов |
dstBunkers | - | Список имен бункеров готовой продукции |
Только для комбинированной линии (type=combo) | ||
ctlDoserModule | - | Имя модуля дозатора контроля |
microDosers | - | Список микродозаторов (аналогичен списку дозаторов dosers ) |
dosers, microDosers | ||
name | - | Имя (уникальное) модуля дозатора |
module | - | Имя модуля дозатора |
srcBunkers | - | Список имен бункеров сырья |
params | ||
name | - | Имя (уникальное) параметра |
descr | - | Описание параметра (произвольный текст) |
tagname | - | Имя внешнего тега, в формате: module:tagname Допускается использование подстановок: %l - имя линии %p - имя параметра |
valtype | - | Тип значения параметра: bool, int, long, double, string |
Имя тега | Тип данных | Доступ | Описание |
---|---|---|---|
connected | BOOL | | Состояние подключения к базе данных |
Линия (line) любого типа | |||
L1_Cancel | BOOL | RW | Отмена задачи (для оператора) - линия забудет установленную задачу, если дозирование еще не началось, либо после завершения цикла |
L1_CycleId | INT | | Идентификатор цикла дозирования. Генерируется автоматически при начале цикла дозирования |
L1_Descr | STRING | | Описание линии, задается в yml |
L1_Disable | BOOL | RW | Запрет выполнения загрузки/разгрузки дозаторов (для оператора) |
L1_EnableLoad | BOOL | RW | Разрешение загрузки дозаторов (для логики) |
L1_EnableUnload | BOOL | RW | Разрешение разгрузки дозаторов (для логики) |
L1_Error | STRING | | Текст текущей ошибки |
L1_ExeWeight | LONG | | Выполненный вес цикла по всем дозаторам линии |
L1_ExeWeightTot | LONG | | Суммарный выполненный вес задачи (всех циклов) |
L1_Name | STRING | | Имя линии, задается в yml |
L1_ProgressTot | INT | | Процент выполнения задачи, рассчитываемый по ExeWeightTot и SetWeightTot |
L1_RcpWeight | LONG | | Заданный вес цикла по рецепту |
L1_RecipeId | INT | | Идентификатор рецепта |
L1_RecipeName | STRING | | Название рецепта |
L1_Reset | BOOL | RW | Сброс задачи (для мастера) - линия мнгновенно забудет установленную задачу, даже если дозирование уже началось |
L1_SetWeight | LONG | RW | Заданный установочный вес цикла. Запись в тег возможно только при состоянии линии IDLE |
L1_SetWeightTot | LONG | RW | Заданный установочный вес задачи (для оператора) |
L1_Start | BOOL | RW | Старт цикла. После выполнения старта сбрасывается в off |
L1_State | INT | | Состояние линии (см. ниже) |
L1_StateMsg | STRING | | Текст состояния линии |
L1_TaskId | INT | RW | Идентификатор установленной задачи. Запись в тег возможно только при состоянии линии NONE |
Дозатор (doser) | |||
L1_D1_Connected | BOOL | | Состояния подключения к модулю дозатора |
L1_D1_CurProductName | STRING | | Имя текущего дозируемого продукта |
L1_D1_CurWeight | LONG | | Текущий набранный вес дозатора |
L1_D1_Error | STRING | | Текст ошибки подключения к модулю дозатора |
L1_D1_ExeWeight | LONG | | Выполненный вес цикла по всем питателям дозатора |
L1_D1_Name | STRING | | Имя дозатора, задается в yml |
L1_D1_PassCnt | INT | | Счетчик выполнения проходов |
L1_D1_PassQty | INT | | Количество проходов, необходимое для выполнения заданного веса цикла |
L1_D1_RcpWeight | LONG | | Заданный вес по рецепту по всем питателям дозатора |
L1_D1_SetWeight | LONG | | Заданный вес по установочный всем питателям дозатора |
Питатель (feeder) | |||
L1_D1_F1_ExeWeight | LONG | | Выполненный вес цикла |
L1_D1_F1_ProductId | INT | | Идентификатор установленного продукта по рецепту |
L1_D1_F1_ProductName | STRING | | Имя продукта |
L1_D1_F1_RcpWeight | LONG | | Заданный вес цикла по рецепту |
L1_D1_F1_SetWeight | LONG | | Заданный вес цикла установочный |
L1_D1_F1_SetWeightPass | LONG | | Заданный вес прохода |
L1_D1_F1_SumWeight | LONG | | Текущие показания счетчика веса дозатора |
L1_D1_F1_SumWeightBeg | LONG | | Зафиксированные показания счетчика веса дозатора на начало цикла |
Параметры (feeder) | |||
L1_Prm_<name> | - | | Значение параметра, которое записывается в связанный с параметром тег |
Только для комбинированной линии (type=combo) | |||
L1_CmdSeqBeforeLoadC | BOOL | | Выход для логики управления оборудованием загрузки в дозатор контроля |
L1_CmdSeqBeforeLoadMixer | BOOL | | Выход для логики управления оборудованием загрузки миксера (разгрузки дозаторов контроля и микрокомпонентов) |
L1_CmdSeqStartMixing | BOOL | | Выход для логики управления старта цикла смешивания |
L1_EnableLoadM | BOOL | RW | Разрешение загрузки основных дозаторов (для логики) |
L1_EnableLoadP | BOOL | RW | Разрешение разгрузки основных дозаторов (для логики) |
L1_EnableUnloadM | BOOL | RW | Разрешение загрузки микродозаторов (для логики) |
L1_EnableUnloadP | BOOL | RW | Разрешение разгрузки микродозаторов (для логики) |
L1_ExeWeightC | LONG | | Зафиксированный набранный вес дозатора контроля |
L1_ExeWeightM | LONG | | Выполненный вес по микродозаторам |
L1_ExeWeightP | LONG | | Выполненный вес по основным дозаторам |
L1_HoldDosers | INT | | Флаг владения основными дозаторами |
L1_HoldTransport | INT | | Флаг владения траспортом разгрузки основных дозаторов |
L1_InpCrusherEmpty | BOOL | RW | Вход для логики, сигнализирующий об опустошении дробилки |
L1_InpMixerBusy | BOOL | RW | Вход для логики, сигнализирующий о неготовности миксера к загрузке |
L1_InpSeqBeforeLoadC | BOOL | RW | Вход для логики, сигнализирующий о полном включении оборудования загрузки в дозатор контроля |
L1_InpSeqBeforeLoadMixer | BOOL | RW | Вход для логики, сигнализирующий о полном включении оборудования загрузки в миксера |
L1_RcpWeightM | LONG | | Заданный вес цикла по рецепту по микродозаторам |
L1_RcpWeightP | LONG | | Заданный вес цикла по рецепту по основным дозаторам |
L1_SetWeightM | LONG | | Заданный вес цикла установочный по микродозаторам |
L1_SetWeightP | LONG | | Заданный вес цикла установочный по основным дозаторам |
L1_TimeAfterUnloadCM | INT S | RW | Время задержки после выполнения разгрузки дозаторов контроля и микрокомпонентов |
L1_TimeCnt | INT | | Обратный счетчик времени |
L1_TimeTransportP | INT S | RW | Время задержки после выполнения разгрузки основных дозаторов |
L1_UnderweightLimitC | LONG S | RW | Допустимое недобор выполненного веса основных дозаторов и дозатора контроля |
L1_DC_Connected | BOOL | | Состояние подключения дозатора контроля |
L1_DC_CurWeight | LONG | | Текущий вес дозатора контроля |
L1_DC_Error | STRING | | Текст ошибки подключения дозатора контроля |
L1_DC_Stable | BOOL | | Флаг стабилизации текущего веса дозатора контроля |
Количество тегов линий (L*), дозаторов (L*_D*) и питателей (L*_D*_F*) зависит от конфигурации в yml-файле, нумерация от 1.
Временные задержки указываются в циклах выполнения jrobo-задачи, не в секундах.
База данных создается автоматически. Конфигурация (линии, дозаторам, питатели, бункеры, параметры) автоматически добавляются в соответствующие таблицы. Если включен параметр deleteOtherStuff
, то удаляется всё, не относящееся к текущей конфигурации.
Удаление записей происходит установкой поля DELETED=1
и в дальнейшем на стороне клиента данные записи отфильтровываются.
Для установка задачи необходимо записать в тег TaskId
значение RD_TASK.ID
существующей задачи, при этом линия должна находится в состоянии NONE
. После записи в TaskId
появляется установленное значение.
Если задача установлена успешно, то State
принимает одно из соответствующий последующих значений.
Если при установке задачи возникла ошибка, то State
принимает значение ERROR
, а в теге Error
текст сообщения об ошибке.
Из состояния ошибки линию можно вывести только установкой 1 в теги Cancel
или Reset
(см. следующий раздел).
Отменить установленную задачу записью 1 в тег Cancel
можно, только если линия не начала дозирование (загрузку дозаторов), иначе отмена произойдет только после полного завершения цикла дозирования. После выполнения отмены значение тега Cancel
сбрасывается в 0. Возможность отмены задачи тегом Cancel
предоставляется оператору и является нормальным способом смены задач в линии.
Тег Reset
делает тоже, что и Cancel
, но действует без промедления, вне зависимости от текущего состояния линии. Использование тега Reset
предназначено только в аварийных ситуациях, когда завершить цикл уже нет возможности.
Помимо дозируемых компонентов рецепт может содержать набор параметров с заданными значениями, которые при установке задачи должны будут прописаться в реальные внешние теги, например, задание потока жидких компонент. Количество параметров может быть любым, от 0 и более.
Если устанавливаемый в линию рецепт имеет параметры, то данная линия обязана иметь все эти же параметры, иначе установка задачи будет завершена с ошибкой. Если же ситуация обратная - линия поддерживает больше параметров, чем прописано в рецепте, то ошибки не будет.
По умолчанию после установки задачи заданный вес цикла (т.е. вес одного замеса, дозы) принимается тот, который указан в рецепте (RcpWeight
). Однако этот вес может изменен в большую или меньшую стороны, но при условии, что цикл дозирования еще не начат и линия находится в состоянии IDLE
. Для этого новое значение веса цикла записывается в тег SetWeight
, после чего одноименные теги дозаторов и питателей также пропорционально менют свое значение.
Если линия не находится в состоянии IDLE
, то изменение SetWeight
не окажет никакого эффекта.
Изначально вес задачи, т.е. сколько всего задача должна произвести продукта, задается на стороне клиента при формировании задачи. После того, как задачу установили в линию, клиент не может вносить какие-либо изменения, но через саму линию можно корректировать заданный вес задачи через тег SetWeightTot
. При этом значение прописывается как в тег, так и базе данных RD_TASK.SUM_WEIGHT_TOT
.
Данное действие может выполнять оператор линии.
Для управления загрузкой и разгрузкой дозаторов в автоматическом режиме имеются теги EnableLoad
и EnableUnload
соответственно. Данные теги при необходимости связываются с внешней логикой. По умолчанию, если привязки нет, установлено значение on
(разрешено).
Для линий типа combo
разрешения кроме вышеперечисленных тегов есть дополнительные для каждой группы дозаторов (результат определяется по И):
EnableLoadP
и EnableUnloadP
- для основных дозаторовEnableLoadM
и EnableUnloadM
- для микродозаторов
Например, для разрешения загрузки микродозаторов должно быть: EnableLoad==1 && EnableLoadM==1
Каждый дозатор имеет физическое ограничение по весу, который он может набрать за один раз. Это значение может быть прописано в модуле дозатора в сохраняемом теге SetWeightMax
. По умолчанию равно 0, что означает «без ограничений».
В тоже время задача может требовать от дозатора загрузки в одном цикле веса, превышающего его SetWeightMax
. В этом случае дозатор выполняет дозирование в несколько проходов, количество которых рассчитывается в начале цикла, а заданный вес цикла дозатора, делится на равный части для каждого прохода.
Все действия по загрузке и разгрузке дозаторов выполняются синхронно, в том числе и выполнение проходов.
Для дозирования основных компонентов комбинированные линии используют одну и ту же группу дозаторы. Т.к. группа основных дозаторов одномоментно может обслуживать только одну линию, то, во избежание конфликтов, организован шеринг основных дозаторов при помощи тегов HoldDosers
, при этом действуют следующие правила:
HoldDosers
HoldDosers
, если:HoldDosers
HoldDosers
установленным, то линии переходят в состояние ошибки
Аналогично с оборудованием транспорта основных компонентов, только с использованием тега HoldTransport
.
0 - NONE - Задача не установлена
Для установки задачи записать в TaskId
значение RD_TASK.ID
1 - IDLE - Ожидание команды старт
Ожидание записи 1 в тег Start
, после чего:
CycleId
SumWeightBeg
питателейPREPARING
Если линия имеет установленный параметр autostart: on
, то Start
всегда считается равным 1.
Если задача выполнена, т.е. SetWeightTot
меньше или равно ExeWeightTot
, то переход в состояние TASK_FINISHED
.
2 - PREPARING - Подготовка дозаторов к старту цикла
Посылаем дозаторам команду «старт цикла». Ожидаем от дозаторов состояния готовности к приему задачи.
Здесь и далее участвуют только дозаторы задействованные в рецепте, а остальные дозаторы игнорируются.
3 - SETTING - Установка задания дозаторам
Посылаем дозаторам команды «установить задачу». Если хотя бы один из дозаторов по каким-либо причинам не принимает задачу, то переход в состояние ERROR
.
Если все дозаторы принимают задачу, то переход в следующее состояние.
4 - LOADING - Идет дозирование (загрузка). Ожидание завершения дозирования
Если загрузка разрешена, то посылаем дозаторам команды «начать задачу» и «начать загрузку». Ожидаем все дозаторы в состоянии готовности к разгрузке и переход в следующее состояние.
5 - UNLOADING - Идет разгрузка. Ожидание завершения разгрузки
Если разгрузка разрешена, то посылаем дозаторам команды «начать разгрузку». Ожидаем все дозаторы в состоянии стоп и, если все дозаторы выполнили все проходы, то переход в следующее состояние. Если же не все дозаторы выполнили все проходы, то возврат к состоянию PREPARING
.
99 - ERROR - Ошибка установки задачи
Ожидание отмены или сброса задачи.
100 - CYCLE_FINISHED - Цикл дозирования закончен
Возврат в состояние IDLE
101 - TASK_FINISHED - Задача выполнена
Ожидание отмены или сброса задачи.
Далее обозначение «Аналогично simple» означает «тоже самое, что и для простой линии».
0 - NONE - Задача не установлена
Аналогично simple
1 - IDLE - Ожидание команды старт
Аналогично simple
8 - HOLD_DOSERS - Ожидание захвата дозаторов ОК
Ожидаем HoldDosers==0
по всем combo-линиям, после чего, в соответствии с очередностью, устанавливаем 1 в HoldDosers
и переход в следующее состояние.
С этого момента основными дозаторами владеет данная линия. Остальные линии только читают и ничего не пишут в дозаторы, а также никак не реагируют на изменения счетчиков.
9 - PREPARING_C - Подготовка дозатора контроля к старту цикла
Аналогично simple, только для дозатора контроля
10 - SETTING_C - Установка задания дозатору контроля
Аналогично simple, только для дозатора контроля
11 - START_SEQ_BEFORE_LOAD_C - Запуск оборудования перед дозатором контроля
Устанавливаем тег CmdSeqBeforeLoadC
и ожидаем 1 в теге InpSeqBeforeLoadC
12 - PREPARING_P - Подготовка дозаторов ОК к старту цикла
Аналогично simple, только для основных дозаторов
13 - SETTING_P - Установка задания дозаторам ОК
Аналогично simple, только для основных дозаторов
14 - LOADING_P - Идет загрузка дозаторов ОК
Аналогично simple, только для основных дозаторов
15 - HOLD_TRANSPORT - Ожидание захвата транспорта ОК
Аналогично состоянию HOLD_DOSERS
, только для тега HoldTransport
16 - UNLOADING_P - Идет разгрузка дозаторов ОК
Аналогично simple, только для основных дозаторов
17 - DELAY_TRANSPORT_P - Задержка времени для транспорта ОК
Сбрасываем тег HoldDosers
.
Задержка задается в теге TimeTransportP
. В теге TimeCnt
идет обратный отсчет. Это время необходимо для полного прохождения
продукта после разгрузки основных дозаторов
18 - WAIT_CRUSHER_EMPTY - Ожидание опустошения дробилки
Сбрасываем тег HoldTransport
.
Ожидание 1 в теге InpCrusherEmpty
19 - LOADING_C - Идет загрузка дозатора контроля (набор мин.вес, стабилизация веса)
Сбрасываем тег CmdSeqBeforeLoadC
.
Если загрузка разрешена, то посылаем дозатору контроля команды «начать задачу» и «начать загрузку».
Ожидаем на дозаторе контроля стабилизацию текущего веса Stable==1
и достижение текущего веса до значения заданного с учетом допустимого недобора:
SetWeightP - <контрольный дозатор>.CurWeight <= UnderweightLimitC
20 - STOP_LOAD_C - Остановка загрузки дозатора контроля
Посылаем контрольному дозатору команду «стоп загрузки». Ожидаем на дозаторе контроля стабилизацию текущего веса и состояния готовности к разгрузке, после чего:
ExeWeightC
RD_TASK_CTL
SetWeight
для микродозаторов в соответствии с зафиксированным весом
21 - PREPARING_M - Подготовка дозаторов МК к старту цикла
Аналогично simple, только для микродозаторов
22 - SETTING_M - Установка задания дозаторам МК
Аналогично simple, только для микродозаторов
23 - LOADING_M - Идет загрузка дозаторов МК
Аналогично simple, только для микродозаторов
24 - WAIT_MIXER_READY - Ожидание готовности миксера к загрузке
Ожидание 1 в теге InpMixerBusy
25 - START_SEQ_BEFORE_LOAD_MIXER - Запуск оборудования разгрузки дозаторов контроля и МК в миксер
Устанавливаем тег CmdSeqBeforeLoadMixer
и ожидаем 1 в теге InpSeqBeforeLoadMixer
26 - UNLOADING_C_M - Идет разгрузка дозаторов контроля и МК
Аналогично simple, только для микродозаторов и дозатора контроля
27 - DELAY_AFTER_UNLOAD_C_M - Задержка времени после разгрузки дозаторов контроля и МК
Аналогично DELAY_TRANSPORT_P, только для тега TimeAfterUnloadCM
28 - START_MIXING - Запуск цикла смешивания
Устанавливаем тег CmdSeqStartMixing
и ожидаем 1 в теге InpMixerBusy
, после чего сбрасываем теги CmdSeqBeforeLoadMixer
и CmdSeqStartMixing
99 - ERROR - Ошибка установки задачи
Аналогично simple
100 - CYCLE_FINISHED - Цикл дозирования закончен
Аналогично simple
101 - TASK_FINISHED - Задача выполнена
Аналогично simple