Это старая версия документа.
Содержание
kkormsvr
Модуль управления процессом многокомпонентного дозирования. Предназначен для замены старого приложения kkormrcpsvr2.exe
. Данный модуль требует включения в задачу.
Поддерживаемые модули дозаторов
Основные отличия от kkormrcpsvr2.exe
- Опрос дозаторов и управление процессом дозирования выполняют независимые друг от друга модули. Добавление нового типа дозатора в
peripherial
не требует изменения программного кода модуляkkormsvr
. - Возможность работать как на сервере (старый вариант), так и в составе ПЛК с использованием сервера в качестве удаленного СУБД. Работа на одной аппаратной платформе с ПЛК позволяет отказаться от дискретных сигналов управления дозаторами без ущерба общей скорости дозирования.
- Хранение оперативных данных в базе данных, т.е. там же где и хранятся все остальные данные. Старый вариант использовал для сохранения оперативных данных обычные файлы, что в случае сбоя может привести к рассинхронизации. Другой минус старого варианта при использовании на борту ПЛК - это частые операции записи в файл, что также является потенциально опасным.
- Работа одной транзакцией на цикл, что гарантирует целостность данных и положительно влияет на производительность приложения.
- Возможность отключения, включения и перезагрузки
kkormsvr
без прерывания выполнения задачи дозирования. - При потери связи с удаленным СУБД восстановление происходит автоматически без прерывания выполнения задачи дозирования.
- Состав и именование тегов полностью обновлено. Новые теги кроме текущего состояния процесса также позволяют видеть названия рецептов и продуктов, выполнять сброс и приостановку работы линий.
Например, в jrobo 1 работает roboplant
логика и выполняется опрос всех устройств ввода/вывода (peripherial
), в т.ч. и многокомпонентных дозаторов, а также работает модуль jrbustcp в режиме server
. В jrobo 2 работает модуль kkormsvr
, взаимодействуя с локальной, либо удаленной базой данных, а теги по дозаторам поставляются при помощи модуля jrbustcp в режиме client
. Использовать связку rpsvrtcp
и rpclient
недопустимо, т.к. данный протокол не поддерживает передачу тегов типа LONG
.
Структура базы данных осталась прежней Модель базы данных. При миграции старой системы на kkormsvr
НЕЛЬЗЯ работать непосредственно со старой базой как есть, а необходимо создать новую и сделать импорт.
Конфигурация
plugin.kkormsvr: module.kksvr: database: db lines: - linenum: 1 name: "Линия 1" dosers: - name: "d1" bind: "D001" grouplevel: 0 storages: 1: 101, Бункер 101 2: 102, Бункер 102 3: 103, Бункер 103 - name: "d2" storages: 1: 201 2: 202 3: 203
Параметры
Параметр | Умолчание | Описание |
---|---|---|
database | db | Модуль базы данных (database) |
lines | | Список линий |
dosers | | Список дозаторов, принадлежащих линии |
storages | | Список бункеров/питателей, принадлежащих дозатору |
lines | ||
linenum | 0 | Номер линии |
name | Line<linenum> | Название линии |
dosers | ||
name | | Имя дозатора. Используется для формирование имен тегов |
bind | <name> | Имя peripherial-модуля многокомпонентного дозатора |
grouplevel | 0 | Указывает принадлежность дозатора к группе с заданным уровнем опережения выполнения циклов. Отсчет уровня от нуля |
storages | ||
<addr> | Формат записи: stornum [, storname] , гдеaddr - адрес питателя в дозаторе (число) stornum - уникальный номер бункера (число), соответствующего питателю дозатора storname - название бункера (текст). Если не указывать, то будет Бункер <stornum> |
Теги
Имя тега | Тип данных | Доступ | Описание |
---|---|---|---|
kksvr.connected | BOOL | Подключение к базе данных. | |
Линия 1 | |||
kksvr.L1.CycleCnt | INT | Количество выполненных полных циклов. | |
kksvr.L1.CycleReq | INT | rw | Заданное количество циклов. |
kksvr.L1.State | INT | Состояние линии: 0 - остановлено 1 - работа 2 - работа приостановлена 3 - ошибка: новая задача не распределилась между дозаторами 4 - ошибка: один из дозаторов не принял задачу |
|
kksvr.L1.TaskId | INT | TaskId текущей задачи из таблицы KK_TASK . Если задача отсутствут, равно 0. |
|
kksvr.L1.Receipt | STRING | Название рецепта текущей задачи. | |
kksvr.L1.Reset | BOOL | rw | 1 - Сброс линии. |
kksvr.L1.Suspend | BOOL | rw | 1 - Приостановить работу линии. 0 - возобновить. |
Линия 1 - Группа 0 | |||
kksvr.L1.Group0.CycleCnt | INT | Количество выполненных циклов. | |
kksvr.L1.Group0.State | INT | Состояние группы: 0 - остановлено 1 - подача дозаторам команды "Старт цикла". Ожидание готовности к установке задачи. 2 - установка задачи 3 - дозирование 4 - ошибка установки задачи одним из дозаторов. Какой именно дозатор - смотреть тег дозатора SendTask на отрицательное значение. |
|
Линия 1 - Группа 1 | |||
kksvr.L1.Group1.CycleCnt | INT | —\\— | |
kksvr.L1.Group1.State | INT | —\\— | |
Линия 1 - Дозатор d1 | |||
kksvr.L1.d1.CurStorNum | INT | номер stornum текущего бункера |
|
kksvr.L1.d1.CurStorName | STRING | название name текущего бункера |
|
kksvr.L1.d1.CurProduct | STRING | название текущего загружаемого продукта | |
kksvr.L1.d1.Error | INT | Текущая ошибка работы с дозатором (не путать с кодом ошибки самого дозатора): 0 - ошибки нет 1 - LINK - теги дозатора не найдены (проверить есть ли теги и параметр ''bind'') 2 - DISCONNECT - нет связи 3 - CRC - данные не достоверны 4 - TASKDIFFER - заданный вес в дозаторе отличается от заданного по рецепту |
|
kksvr.L1.d1.stor1.Product | STRING | Название продукта, заданного по рецепту. | |
kksvr.L1.d1.stor1.ReqWeight | LONG | Заданный вес по рецепту. | |
kksvr.L1.d1.stor2.Product | STRING | —\\— | |
kksvr.L1.d1.stor2.ReqWeight | LONG | —\\— | |
kksvr.L1.d1.stor3.Product | STRING | —\\— | |
kksvr.L1.d1.stor3.ReqWeight | LONG | —\\— | |
Линия 1 - Дозатор d2 | |||
kksvr.L1.d2.CurStorNum | INT | —\\— | |
kksvr.L1.d2.CurStorName | STRING | —\\— | |
kksvr.L1.d2.CurProduct | STRING | —\\— | |
kksvr.L1.d2.Error | INT | —\\— | |
kksvr.L1.d2.stor1.Product | STRING | —\\— | |
kksvr.L1.d2.stor1.ReqWeight | LONG | —\\— | |
kksvr.L1.d2.stor2.Product | STRING | —\\— | |
kksvr.L1.d2.stor2.ReqWeight | LONG | —\\— | |
kksvr.L1.d2.stor3.Product | STRING | —\\— | |
kksvr.L1.d2.stor3.ReqWeight | LONG | —\\— |
Дозирование вне задачи
Во время выполнения задачи каждое изменение значения суммарного счетчика дозатора (другими словами - отвес) фиксируется в базе данных в соответствующих таблицах с ссылкой на задачу и рецепт, по которому работает задача. Если же счетчики меняют значение, когда линия остановлена и выполняемых задач нет, то в этой ситуации создается задача с пустым рецептом, и уже к ней привязывается отвес. Пустой рецепт создается автоматически с названием «ДОЗИРОВАНИЕ ВНЕ ЗАДАЧИ (РУЧНОЕ)» и kk_receipt.id равным 0.
Также при фиксировании отвеса вне задачи указывается продукт, который в данный момент назначен соответствующему бункеру. Если продукт не указан, создается «НЕИЗВЕСТНЫЙ ПРОДУКТ» c kk_product.id равным 0.
Переходный импорт данных
Для перехода со старого архиватора wessvr.exe на новый требуется перенести данные из старой базы данных в новую, создаваемою автоматически модулем wessvr
. Описание действий по шагам:
- создать два модуля
database
для подключения к новой (не существующей) и старой (существующей) базам данных.plugin.database: module.db: type: firebird dbname: /database/kkorm_fb30.fdb module.dbold: type: firebird dbname: /database/old_kkorm_fb30.fdb plugin.kkormsvr: module.kksvr: database: db plugin.task: module.taskmain: modules: - db - kksvr
- запустить систему и выполнить команды:
kksvr:import dbold reload kksvr
Данный способ перехода является рекомендуемым, т.к. новая база будет избавлена от ненужных артефактов, накопленных годами. Также в новой базе добавлены таблицы оперативных данных и оптимизированы индексы некоторых таблиц.
Удаление старых записей
В таблицах KK_TASK
, KK_TASKCONTENT
, KK_EXECUTE
, KK_OUTPUT
и KK_RASHOD
данные сохраняются без циклической перезаписи, и таким образом постоянно накапливаются. Для удаления ненужных данных используется команда w:sweep <year>
. Пример использования:
kksvr:sweep 2016
Данная команда, посылаемая модулю с именем kksvr
, удаляет все записи старше 2016 года включительно.