# promauto.gelios.dozkkmc

Mодуль управления многокомпонентным дозатором Гелиос (ПромАвтоматика).

Используемый протокол - AA55.

Описание протокола:

- АА55
- modbus

## yml-файл

    module.gelios1:
      netaddr:   1
      portnum:   1
      type:      promauto.gelios.dozkkmc
      storqnt:   10
      version:   2

## Параметры

Параметр | По умолчанию | Описание
--- | --- | ---
storqnt | 1 | Количество питателей в дозаторе
version | 2 | Версия протокола. Выбирается в соответствии с прошивкой дозатора.
    Версия 1:
      - DzrGeliosRazgr (маслодозатор)

    Версия 2:
      - Dzr
      - DzrGelios10
      - DzrGelios3rzg
      - DzrGelios6
SumWeightMax | 0xFFFF_FFFF | Максимальное возможное значение суммарного счетчика веса включительно Внимание! Для дозаторов версий SD00-12 макс.значение счетчика = 4000000000

## Теги

Тег | Тип | Описание
--- | --- | ---
Crc32 | LONG | См. Crc32
State | INT | Состояние дозатора (битовая маска):
    1 – стоп
    2 – готов к старту задачи
    4 – загрузка
    8 – выгрузка
    16 – авария
CurStorNum | INT | номер текущего питателя (0 - дозирование не идет, от 1 до N - номер питателя)
CurWeight | LONG | Если CurStorNum = 0, то текущий общий вес. Если CurStorNum > 0, то набранный вес текущего компонента
CurPercent | INT | Процент выполнения загрузки текущим питателем, от 0 до 100
CurPercentTotal | INT | Процент выполнения загрузки/разгрузки суммарно по всем питателям, от 0 до 100
SumWeightMax | LONG | Значение одноименного параметра (максимальное возможное значение суммарного счетчика веса включительно)
SumWeightN | LONG | Счетчик веса несбрасываемый циклический питателя N
ReqWeightN | LONG | Установленный вес задачи питателя N (то, что установлено на данный момент, а не сколько уже отвесили)
SetWeightN | LONG | Задание веса задачи питателя N
SendTask | INT | Для установка задачи необходимо предварительно задать вес задачи в SetWeight по каждому питателю, после чего прописать в данный тег любое положительное значение, отличное от нуля. После успешного выполнения в теге можно будет прочитать записанное значение. Если установка не выполнена, то в теге появится записанное значение со знаком минус. При записи 0 тег просто обнуляется, установка задачи не происходит.
CmdStartCycle | INT | Если в состоянии стопа или аварии, послать старт цикла (Cmd=0)
CmdStartTask | INT | Если в состоянии ожидания старта задачи, послать старт задачи (Cmd=6)
CmdStartLoad | INT | Если в состоянии готовности к загрузке, послать старт загрузки (Cmd=2)
CmdStopLoad | INT | Если в состоянии загрузки, послать стоп загрузки (Cmd=10)
CmdStartUnload | INT | Если в состоянии готовности к разгрузке, послать старт разгрузки (Cmd=4)
CmdSuspUnload | INT | Если в состоянии разгрузки, послать старт приостанов (Cmd=8)
Status | INT | Состояние дозатора:
    0 – стоп (или дозирование завершено)
    1 – ожидание загрузки
    2 – загрузка
    3 – ожидание выгрузки
    4 – ожидание старта задачи после установки
    5 – авария
    6 – приостановка выгрузки
    7 – выгрузка
StorQnt | INT | Заданное кол-во питателей
StorQntActual | INT | Фактическое кол-во питателей, поддерживаемое дозатором
ErrorCode | INT | Код ошибки
Cmd | INT |
    0 – Старт цикла
    6 – Запуск загрузки после установки рецепта

    Следующие команды поддерживаются не всеми дозаторами:
    2 – старт загрузки
    4 – старт разгрузки
    8 – приостановка разгрузки
    10 – стоп разгрузки
IOState | LONG | для отладки
Stage | INT | для отладки
StageTime | INT | для отладки

N - номер питателя от 1 до `storqnt`

В теги Cmd* для активации действия необходимо записать значение > 0, после чего сброс в 0 произойдет после выполнения действия.

Теги, выделенные жирным, являются стандартными, т.е. все многокомпонентные дозаторы обязаны иметь их.

## Crc32

Расчет значения выполняется по алгоритму Crc32. Исходный для расчета буфер данных формируется из 8-байтного представления следующих тегов в приведенной последовательности:

    SumWeight1
      :
    SumWeightN
    SYSTEM.ErrorFlag