# Протокола обмена данными многокомпонентных дозаторов Гелиос

Протокол является АА55-совместимым.

Необходимо добавить в прошивку:

- Возможность послать удаленно команду СТОП
- Возможность послать удаленно команду ОТКРЫТЬ НИЖНЮЮ ЗАДВИЖКУ
- Доступ ко всем параметрам (чтение и запись)

## Версия 2

Поддерживается дозаторами:

- Dzr
- DzrGelios10
- DzrGelios3rzg
- DzrGelios6

        1. Запрос текущего состояния

    ->  55 <0x20+адр> <size> <CSH><CSL>

    <-  <адр> <size>
        <TaskMode>#2     - если = 0, то работа без состояния 4 (ожидание запуска после установки рецепта)
        <CurStorNum>#1   - номер текущего компонента (0 - дозирование не идет, от 1 до N - номер питателя)
        <RestStorNum>#1  - общее кол-во компонентов минус отвешенное кол-во компонентов (не актуальный параметр)
        <CurStorWes>#4   - если CurStorNum = 0, то текущий общий вес
                           если CurStorNum > 0, то набранный вес текущего компонента
        <CurStage>#1     - отладочный параметр
        <StageTime>#2    - отладочный параметр
        <IOState>#4      - отладочный параметр
        <Status>#1       - см. ниже
        <ErrorCode>#1    - описание кодов смотреть в сопроводительной документации весового блока
        <CSH><CSL>
    				21 bytes

    Status =
    0 – стоп (или дозирование завершено)
    1 – ожидание загрузки
    2 – загрузка
    3 – ожидание выгрузки
    4 – ожидание разрешения дозирования от ккорм (установка рецепта)
    5 – авария
    6 – приостановка выгрузки
    7 – выгрузка

    --------------------------------------------------------------------
        2. Запрос значений суммарных счетчиков

    ->  55 <0x40+адр> <size> <CntCount> <CSH><CSL>

    <-  <адр> <size>
        <N> - количество счётчиков в ответе, равное CntCount, либо реальное
              кол-во питателей, если их кол-во меньше чем CntCount
        <StorNum1>#1 <Wes1>#4 …
        <StorNumN>#1 <WesN>#4
        <CSH><CSL>

        Значение каждого счетчика изменяется только завершению дозирования соответствующим шнеком.

    --------------------------------------------------------------------
        3. Запрос текущего рецепта (то, что установлено на данный момент, а не сколько уже отвесили)

    ->  55 <0x60+адр> <size> <CSH><CSL>

    <-  <адр> <size>
        <N>  - реальное количество питателей устройства
        <StorNum1>#1 <Wes1>#4 …
        <StorNumN>#1 <WesN>#4
        <CSH><CSL>
    							5 + 5*N bytes

    --------------------------------------------------------------------
        4. Установка новой задачи

    ->  55 <0xA0+адр> <size> 00 03
        <N>
        <StorNum1>#1 <Wes1>#4 …
        <StorNumN>#1 <WesN>#4
        <CSH><CSL>
    							8 + 5*N bytes

    если принята:
    <-  <адр> <size> 0x00 <CSH><CSL>

    Если задача не принята, то:
    <-  <адр> <size> 0xFF <CSH><CSL>

    --------------------------------------------------------------------
        5. Команды на исполнение

    ->  55 <0xC0+адр> <size>
        <Cmd>#1
        <Value>#1
        <CSH><CSL>

    Cmd =
    0 – Старт цикла
    6 – Запуск загрузки после установки рецепта

    2 – старт загрузки
    4 – старт разгрузки
    8 – приостановка разгрузки

    если принята:
    <-  <адр> <size> 0x00 <CSH><CSL>

    Если команда не принята, то:
    <-  <адр> <size> 0xFF <CSH><CSL>

    --------------------------------------------------------------------
    StorNum – номер питателя (хранилища / бункера / места размещения ингредиента)
    CurStorNum – номер текущего используемого питателя
    RestStorNum – кол-во оставшихся питателей для завершения полного дозирования
    CurStorWes – текущий вес набираемый CurStorNum питателем
    StageNum – номер стадии
    StageTime – время стадии
    IOState – состояние входов / выходов дозатора
    N – количество пар <StorNum><Kg>
    Wes – циклический счетчик общиго веса, прошедшего через питатель
    Size – кол-во байт в посылке, начиная со следующего и заканчивая мл.байтом контрольной суммы.

    CntCount – количество счётчиков

    В расчете CRC16 участвуют все байты посылки кроме ключа 55.

    Для 2-х и 4-х байтовых значений: старший байт - первый, младший – последний.

    Значения веса – целые числа. Единицы измерения – граммы.

## Версия 1

Поддерживается дозаторами:

- DzrGeliosRazgr (маслодозатор)

        1. Запрос текущего состояния

    ->  55 <0x20+адр> <size> <CSH><CSL>

    <-  <адр> <size>
        <TaskMode>#2     - если = 0, то работа без состояния 4 (ожидание запуска после установки рецепта)
        <CurStorWes>#4   - набранный вес
        <CurStage>#1     - отладочный параметр
        <StageTime>#2    - отладочный параметр
        <IOState>#2      - отладочный параметр
        <Status>#1       - см. ниже
        <ErrorCode>#1    - описание кодов смотреть в сопроводительной документации весового блока
        <CSH><CSL>
    				17 bytes

    Status =
    0 – стоп (или дозирование завершено)
    1 – ожидание загрузки
    2 – загрузка
    3 – ожидание выгрузки
    4 – ожидание разрешения дозирования от ккорм (установка рецепта)
    5 – авария
    7 – выгрузка

    --------------------------------------------------------------------
        2. Команды на исполнение

    ->  55 <0xC0+адр> <size>
        <Cmd>#1
        <Value>#1
        <CSH><CSL>

    Cmd =
    0 – Старт цикла
    6 – Запуск загрузки после установки рецепта

    если принята:
    <-  <адр> <size> 0x00 <CSH><CSL>

    Если команда не принята, то:
    <-  <адр> <size> 0xFF <CSH><CSL>

Остальные команды аналогичны версии 2.