====== kkmansvr ======
Модуль управления процессом ручного многокомпонентного дозирования. Данный модуль требует включения в задачу.
===== Поддерживаемые модули дозаторов =====
[[doc:jroboplc:modules:peripherial:promauto_gelios_dozman]]
===== Конфигурация =====
plugin.kkmansvr:
module.kkman:
emulate: off
database: db
lineId: 1
lineName: My line
compQnt: 4
dosers:
- name: d1
descr: Big automatic doser
manual: off
canControl: on
- name: d2
descr: Small human-being driven doser
manual: on
canControl: off
===== Параметры =====
^ Параметр ^ Умолчание ^ Описание ^
|**database**| ''db'' |Модуль базы данных ([[doc:jroboplc:modules:database]]) |
|**lineId**| '''' |id линии |
|**lineName**| ''Line'' |Название линии (произвольный текст) |
|**compQnt**| '''' |Максимальное количество компонентов в задаче |
|**dosers**| '''' |Список дозаторов |
^dosers ^^^
|**name**| '''' |Имя периферийного модуля дозатора |
|**descr**| '''' |Название дозатора (произвольный текст) |
|**manual**| ''off'' |Ручной дозатор |
|**canControl**| ''off'' |Дозатор может использоваться как контрольный |
===== Теги =====
^ Имя тега ^ Тип данных ^ Доступ ^ Описание ^
|''LineId '' | ''INT '' | '' '' |id линии (''KM_LINE.ID'') |
|''LineName '' | ''STRING'' | '' '' |Название линии |
|''TaskInstall '' | ''STRING'' | ''RW'' |см. [[doc:jroboplc:modules:kkmansvr#Установка задачи]] |
|''TaskId '' | ''INT '' | '' '' |id задачи (''KM_TASK.ID'') |
|''RecipeId '' | ''INT '' | '' '' |id рецепта (''KM_TASK.RECIPE.ID'') |
|''RecipeName '' | ''STRING'' | '' '' |Название рецепта (''KM_RECIPE.NAME'') |
|''CycleReq '' | ''INT '' | ''RW'' |Заданное количество циклов. Если ''CycleReq''>0 и ''СусleCnt''>=''CycleReq'', то запуск нового цикла невозможен. Если =0, то работать без ограничений. CycleReq можно менять в процессе работы |
|''CycleCnt '' | ''INT '' | '' '' |Кол-во выполненных циклов |
|''UnloadStart '' | ''BOOL '' | '' '' |Команда старт оборудованию разгрузки |
|''UnloadFinished'' | ''BOOL '' | ''RW'' |Сигнал завершения от оборудования разгрузки |
|''UnloadTimerCnt'' | ''INT '' | '' '' |Счетчик задержки разгрузки. Если ''UnloadTimerCnt'' < ''UnloadTimerSet'', то ''UnloadFinished'' считается =0 |
|''UnloadTimerSet'' | ''INT '' | ''RW'' |Минимальное время разгрузки (ед.изм. - кол-во циклов jrobo-задачи) |
|''Status '' | ''INT '' | '' '' |См. [[doc:jroboplc:modules:kkmansvr#Статус линии]] |
|''SumWeightReq '' | ''INT '' | '' '' |Заданный в задаче суммарный вес по всем компонентам |
|''SumWeightFin '' | ''INT '' | '' '' |Зафиксированный суммарный вес по всем компонентам |
|''SumWeightCtl '' | ''INT '' | '' '' |Зафиксированный контрольный вес |
|''ControlId '' | ''INT '' | '' '' |id контрольного дозатора (далее **''//ControlDoser//''**). Если 0, то не используется |
|''ControlName '' | ''STRING'' | '' '' |Имя модуля контрольного дозатора. Если пусто, то не используется. Если ''NOT FOUND'', то модуль с ''ControlId'' не найден |
|''ControlStable '' | ''BOOL '' | '' '' |Транслируется значение с ''//ControlDoser//.Stable'' |
|''ControlWeight '' | ''INT '' | '' '' |Транслируется значение с ''//ControlDoser//.WeightTot'' |
|''Run '' | ''BOOL '' | ''RW'' |Если записать 1, то начать весовой цикл. Нельзя извне ''Run=0''. Если ''TaskId=0'', то нельзя ''Run=1''. Нельзя ''Run=1'', если ''Disable=1''. |
|''Disable '' | ''BOOL '' | ''RW'' |Запрет начала весового цикла. Нельзя ''Disable=1'', если ''Run=1'' |
|''Commit '' | ''BOOL '' | ''RW'' |Записать весовой цикл в базу данных и перейти к разгрузке |
|''Cancel '' | ''BOOL '' | ''RW'' |Отменить весовой цикл. Сбрасываются все зафиксированные весовые значения |
^Компоненты ^^^^
|''Comp0.DoserId '' | ''INT '' | '' '' |id дозатора компонента (далее **''//CompDoser//''**) (''KM_TASK_PRODUCT.DOSER_ID'') |
|''Comp0.DoserName '' | ''STRING '' | '' '' |Имя модуля дозатора |
|''Comp0.Manual '' | ''BOOL '' | '' '' |Ручной дозатор |
|''Comp0.ProdId '' | ''INT '' | '' '' |id продукта (''KM_TASK_PRODUCT.PRODUCT_ID'') |
|''Comp0.ProdName '' | ''STRING '' | '' '' |Название продукта (''KM_PRODUCT.NAME'') |
|''Comp0.WeightReq '' | ''INT '' | '' '' |Заданный вес |
|''Comp0.WeightFin '' | ''INT '' | '' '' |Зафиксированный измеренный вес |
|''Comp0.WeightCur '' | ''INT '' | '' '' |Транслируется значение с ''//CompDoser//.WeightCur'' |
|''Comp0.Status '' | ''INT '' | '' '' |См. [[doc:jroboplc:modules:kkmansvr#Статус компонента]] |
|''Comp0.Run '' | ''BOOL '' | ''RW'' |Если записать 1, то начать дозирование. Нельзя извне ''Run=0''. Обнуление происходит по окончанию дозирования. Установка возможна только при ''Comp*.Status=IDLE'' по всем компонентам с таким же ''DoserId'' и при статусе линии ''=LOADING'' |
|''Comp0.Cancel '' | ''BOOL '' | ''RW'' |Отменить зафиксированный вес и перейти в ожидание |
| остальные ''Comp1..CompN'' аналогично ||||
===== База данных =====
[[doc:jroboplc:modules:kkmansvr_db|Скрипт]]
База данных создается автоматически. Данные по линии и дозаторам автоматически добавляются в таблицы ''KM_LINE'' и ''KM_DOSER''.
Если необходимо удалить запись в таблице, имеющей поле ''DELETED'', то установить в ''DELETED=1'' и в дальнейшем на стороне клиента отфильтровывать подобные записи. На стороне клиента в таблицах с полем ''DELETED'' фактическое удаление не делать!
===== Установка задачи =====
Для установка задачи необходимо записать в тег TaskInstall значение KM_TASK.ID нужной задачи. После записи в TaskInstall возвращается результат выполнения установки:
* OK - задача успешно установлена
* NOT EMPTY - тег TaskInstall не был очищен перед запись id задачи
* LINK ERROR - необходимо проверить конфигурацию, т.к. имеются не найденные модули дозаторов
* WRONG LINE - задача предназначена для другой линии
* NOT FOUND - задача с указанным id не найдена
* TOO MANY PRODUCTS - задача рассчитана но большее кол-во компонентов, чем указано в параметре compQnt
Перед записью нового id в TaskInstall необходимо записать пустую строку. Далее при успешной записи id задачи обнуляются все счетчики веса и циклов, а в соответствующии теги устанавливаются данные по указанной задаче.
Также в TagInstall можно записать RESET для полного сброса данных по ранее установленной задаче.
Запись id возможна только при статусе линии IDLE.
===== Статус линии =====
Значени тeга ''Status'':
=== 0 - IDLE ===
Ожидание. Если извне прописать в ''Run=1'' и при этом ''Disable==0'' и ''TaskId>0'' и (''CycleReq==0'' или ''CycleCnt 0''), после чего ''Status=COMMITING''.
=== 3 - COMMITTING ===
Фиксация контрольного веса и запись весового цикла в базу данных. Если извне прописать в ''Commit=1'', то выполняется запись цикла и ''Status=UNLOADING''. При этом, если используется контрольный дозатор, то запись извне в ''Commit=1'' разрешена только при ''//ControlDoser//.Stable=1''.
=== 4 - UNLOADING ===
Разгрузка. Выполняется запись ''UnloadStart=1'' и ожидание записи извне в ''UnloadFinished=1''. Если ''UnloadTimerCnt < UnloadTimerSet'', то ''UnloadFinished'' считается ''==0''. После появления в ''UnloadFinished==1'' сбрасывается зафиксированный вес и ''Status=IDLE''.
===== Статус компонента =====
Значения тега ''Comp0.Status'':
=== 0 - IDLE ===
Ожидание. Если извне прописать в ''Comp0.Run=1'' и при этом по все компоненты с таким же ''DoserId'' находятся в ожидании, и при статусе линии ''Status=LOADING'', и компонент используется (''Comp0.WeightReq>0''), то ''Comp0.Status=PREPARING''.
=== 1 - PREPARING ===
Подготовка.
* Выполнить:
* ''//CompDoser//.Weight=Comp0.WeightReq''
* ''//CompDoser//.SetEmptyCur=1''
* ''//CompDoser//.Run=0''
* после чего, ожидание:
* ''//CompDoser//.SYSTEM.ErrorFlag==0''
* ''//CompDoser//.IsEmptyCur==1''
* ''//CompDoser//.Status==0''
* если ожидание выполнено:
* ''//CompDoser//.Run=1''
* ''Comp0.Status=LOADING''
=== 2 - LOADING ===
Загрузка и взвешивание.
* Ожидание:
* ''//CompDoser//.SYSTEM.ErrorFlag==0''
* ''//CompDoser//.Finished==1''
* если ожидание выполнено, то:
* ''//CompDoser//.Run=0''
* ''Comp0.WeightFin=//CompDoser//.WeightCur''
* ''Comp0.Run=0''
* ''Comp0.Status=FINISHED''
=== 3 - FINISHED ===
Взвешивание выполнено. Ожидание полного завершения цикла на линии, после чего ''Comp0.Status=0''.