Содержание

kkormsvr

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

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

promauto.gelios.dozkkmc

Основные отличия от kkormrcpsvr2.exe

При работе с удаленными модулями дозаторов использовать протокол jrbustcp!

Например, в 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.Line1.CycleCnt INT Количество выполненных полных циклов.
kksvr.Line1.CycleReq INT rw Заданное количество циклов.
kksvr.Line1.State INT Состояние линии:
0 - остановлено
1 - работа
2 - работа приостановлена
3 - ошибка: новая задача не распределилась между дозаторами
4 - ошибка: один из дозаторов не принял задачу
kksvr.Line1.TaskId INT TaskId текущей задачи из таблицы KK_TASK. Если задача отсутствут, равно 0.
kksvr.Line1.Receipt STRING Название рецепта текущей задачи.
kksvr.Line1.Reset BOOL rw 1 - Сброс линии.
kksvr.Line1.Suspend BOOL rw 1 - Приостановить работу линии. 0 - возобновить.
Линия 1 - Группа 0
kksvr.Line1.Group0.CycleCnt INT Количество выполненных циклов.
kksvr.Line1.Group0.State INT Состояние группы:
0 - остановлено
1 - подача дозаторам команды "Старт цикла". Ожидание готовности к установке задачи.
2 - установка задачи
3 - дозирование
4 - ошибка установки задачи одним из дозаторов. Какой именно дозатор - смотреть тег дозатора SendTask на отрицательное значение.
Линия 1 - Группа 1
kksvr.Line1.Group1.CycleCnt INT —\\—
kksvr.Line1.Group1.State INT —\\—
Линия 1 - Дозатор d1
kksvr.d1.CurStorNum INT номер stornum текущего бункера
kksvr.d1.CurStorName STRING название name текущего бункера
kksvr.d1.CurProduct STRING название текущего загружаемого продукта
kksvr.d1.Error INT Текущая ошибка работы с дозатором (не путать с кодом ошибки самого дозатора):
0 - ошибки нет
1 - LINK - теги дозатора не найдены (проверить, есть ли теги, правильность параметра ''bind'')
2 - DISCONNECT - нет связи
3 - CRC - данные не достоверны
4 - TASKDIFFER - заданный вес в дозаторе отличается от заданного по рецепту
kksvr.d1.ReqWeightZero INT =1, если суммарный заданный вес равен нулю, иначе =0
kksvr.d1.Product1 STRING Название продукта, заданного по рецепту.
kksvr.d1.ReqWeight1 LONG Заданный вес по рецепту.
kksvr.d1.Product2 STRING —\\—
kksvr.d1.ReqWeight2 LONG —\\—
kksvr.d1.Product3 STRING —\\—
kksvr.d1.ReqWeight3 LONG —\\—
Линия 1 - Дозатор d2
kksvr.d2.CurStorNum INT —\\—
kksvr.d2.CurStorName STRING —\\—
kksvr.d2.CurProduct STRING —\\—
kksvr.d2.Error INT —\\—
kksvr.d1.ReqWeightZero INT —\\—
kksvr.d2.Product1 STRING —\\—
kksvr.d2.ReqWeight1 LONG —\\—
kksvr.d2.Product2 STRING —\\—
kksvr.d2.ReqWeight2 LONG —\\—
kksvr.d2.Product3 STRING —\\—
kksvr.d2.ReqWeight3 LONG —\\—

Теги старой версии (kkormrcpsvr2)

Группы

Процесс приготовления комбикормовой смеси может происходить в несколько этапов.

Например, некоторые добавки могут предварительно дозироваться и смешиваться (в предсмесителе) отдельно от основной массы ингредиентов. Затем они выгружаются в основной смеситель одновременно с разгрузкой дозаторов, дозирующих основные ингредиенты.

В таком случае для ускорения цикла приготовления комбикормовой смеси целесообразно разрешить дозаторам, разгрузка которых происходит в предсмеситель, набирать продукт заранее. Т.е. если линия выполняет первый цикл дозирования - дозаторы основного смесителя выполняют первый цикл, то дозаторы предсмесителя могут выполнять первый и (если все они выгрузились) второй цикл дозирования.

Параметр grouplevel определяет на сколько циклов дозирования группа может «обгонять» цикл дозирования линии.

В группу целесообразно объединять ДОЗАТОРЫ ОДНОВРЕМЕННО РАЗГРУЖАЕМЫЕ В ОДИН СМЕСИТЕЛЬ.

Для дозаторов группы которая заканчивает процесс приготовления комбикормовой смеси (или если группа одна) параметр grouplevel должен быть равен 0.

Дозирование вне задачи

Во время выполнения задачи каждое изменение значения суммарного счетчика дозатора (другими словами - отвес) фиксируется в базе данных в соответствующих таблицах с ссылкой на задачу и рецепт, по которому работает задача. Если же счетчики меняют значение, когда линия остановлена и выполняемых задач нет, то в этой ситуации создается задача с пустым рецептом, и уже к ней привязывается отвес. Пустой рецепт создается автоматически с названием «ДОЗИРОВАНИЕ ВНЕ ЗАДАЧИ (РУЧНОЕ)» и kk_receipt.id равным 0.

Также при фиксировании отвеса вне задачи указывается продукт, который в данный момент назначен соответствующему бункеру. Если продукт не указан, создается «НЕИЗВЕСТНЫЙ ПРОДУКТ» c kk_product.id равным 0.

Переходный импорт данных

Для перехода со старого архиватора kkormrcpsvr2 на новый требуется перенести данные из старой базы данных в новую, создаваемою автоматически модулем kkormsvr. Описание действий по шагам:

Данный способ перехода является рекомендуемым, т.к. новая база будет избавлена от ненужных артефактов, накопленных годами. Также в новой базе добавлены таблицы оперативных данных и оптимизированы индексы некоторых таблиц.

Удаление старых записей

В таблицах KK_TASK, KK_TASKCONTENT, KK_EXECUTE, KK_OUTPUT и KK_RASHOD данные сохраняются без циклической перезаписи, и таким образом постоянно накапливаются. Для удаления ненужных данных используется команда w:sweep <year>. Пример использования:

kksvr:sweep 2016

Данная команда, посылаемая модулю с именем kksvr, удаляет все записи старше 2016 года включительно.