Содержание

raduga

Модуль управления процессом многокомпонентного дозирования. Данный модуль требует включения в задачу.

Позволяет управлять линиями дозирования двух типов:

Поддерживаемые модули дозаторов

promauto.gelios.dozman

Конфигурация

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-задачи, не в секундах.

База данных

sql, dbscr

База данных создается автоматически. Конфигурация (линии, дозаторам, питатели, бункеры, параметры) автоматически добавляются в соответствующие таблицы. Если включен параметр 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 разрешения кроме вышеперечисленных тегов есть дополнительные для каждой группы дозаторов (результат определяется по И):

Например, для разрешения загрузки микродозаторов должно быть: EnableLoad==1 && EnableLoadM==1

Проходы в цикле

Каждый дозатор имеет физическое ограничение по весу, который он может набрать за один раз. Это значение может быть прописано в модуле дозатора в сохраняемом теге SetWeightMax. По умолчанию равно 0, что означает «без ограничений».

В тоже время задача может требовать от дозатора загрузки в одном цикле веса, превышающего его SetWeightMax. В этом случае дозатор выполняет дозирование в несколько проходов, количество которых рассчитывается в начале цикла, а заданный вес цикла дозатора, делится на равный части для каждого прохода.

Все действия по загрузке и разгрузке дозаторов выполняются синхронно, в том числе и выполнение проходов.

Совместное использование основных дозаторов комбинированными линиями

Для дозирования основных компонентов комбинированные линии используют одну и ту же группу дозаторы. Т.к. группа основных дозаторов одномоментно может обслуживать только одну линию, то, во избежание конфликтов, организован шеринг основных дозаторов при помощи тегов HoldDosers, при этом действуют следующие правила:

  1. Если линия хочет начать работать с основными дозаторами, то она должна выставить 1 в своем теге HoldDosers
  2. Линия не может выставить 1 в своем теге HoldDosers, если:
    1. у другой линии уже установлен тег HoldDosers
    2. другая линия также хочет захватить основные дозаторы и она захотела это сделать раньше (соблюдение очереди)
  3. Если две и более линий имеют у себя тег HoldDosers установленным, то линии переходят в состояние ошибки

Аналогично с оборудованием транспорта основных компонентов, только с использованием тега HoldTransport.

Описание состояний

Состояния простой линии (simple)


0 - NONE - Задача не установлена

Для установки задачи записать в TaskId значение RD_TASK.ID


1 - IDLE - Ожидание команды старт

Ожидание записи 1 в тег Start, после чего:

Если линия имеет установленный параметр 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 - Задача выполнена

Ожидание отмены или сброса задачи.

Состояния комбинированной линии (combo)

Далее обозначение «Аналогично 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 - Остановка загрузки дозатора контроля

Посылаем контрольному дозатору команду «стоп загрузки». Ожидаем на дозаторе контроля стабилизацию текущего веса и состояния готовности к разгрузке, после чего:




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