# wessvr.adapter

Модуль-адаптер для для связывания периферийного модуля источника, имеющего счетчики, с устройством `Standard` модуля wessvr.

Требует включения в одну задачу с источником (периферийным модулем, имеющим счетчики) последовательно друг за другом: сначала источник, затем адаптер.

Основная задача адаптера транслировать значения тегов источника в свои теги, имена которых понятны устройству `Standard` модуля `wessvr`. Определение (сопоставление) имен тегов задается в карте тегов `tags`, где обязательно должен быть определен хотя бы один тег счетчиков - `SumWeight` и/или `SumNum`. Остальные теги определяются по необходимости. Если тег не определен, то используется значение 0.

    plugin.peripherial:

      module.WFMAN:
        type:   wessvr.adapter
        module: pfman
        tags:
          SumWeight:   cntWeight
          SumNum:      cntNumHigh, cntNumLow
    #      CurWeight:
    #      LastWeight: Неиспользуемые теги определять не обязательно
    #      LastTime:
          Status1:     mode
          Status2:     err
    #      Status3:
    #      Status4:
    #      Status5:
          Output:      output

      module.pfman:
        portnum:  1
        netaddr:  2
        type:     modbus
        tags:
          - name:        mode
            address:     0
          - name:        err
            address:     1
          - name:        output
            address:     5
          - name:        cntNumHigh
            address:     6
          - name:        cntNumLow
            address:     7
          - name:        cntWeight
            address:     8
            type:        uint32

    plugin.task:
      module.task:
        period: 1000
        modules:
          - pfman
          - wfman

## Параметры

Параметр | Умолчание | Описание
--- | --- | ---
type | `` | `wessvr.adapter`
module | `` | Имя модуля источника
MaxWeight | `0x1_0000_0000` | Размер счетчика веса (макс.возможное значение + 1). Если 0, то счетчик безразмерный. Безразмерный счетчик используется в случае, если счетчик устройства сбрасываемый. Еще раз обратить внимание на то, что это РАЗМЕР, а не максимально возможное значение счетчика (название тега не совсем удачное и может ввести в заблуждение)
MaxNum | `0x1_0000_0000` | Аналогично `MaxWeight`
Mul | `1` | Множитель тега `SumWeight`
useNowForUpdateTime | `off` | Использовать текущее время для тега `SYSTEM.UpdateTime`. Необходимо в том случае, когда источник не имеет тега `SYSTEM.UpdateTime`
outputPeriodS | `600` | Период в секундах для расчета среднего значения производительности `Output` по `SumWeight`. Расчет выполняется только, если не определен тег `Output`
tags | `` | Карта тегов: SumWeight SumNum CurWeight LastWeight LastTime Status1 Status2 Status3 Status4 Status5 Output См. «Определение тегов»

## Определение тегов

Для определения тега нужно указать в качестве значения имя одного из тегов, который содержится в модуле источнике. Также в значении можно указать тег любого модуля, а не только того, что прописан в качестве модуля источника. Для этого значение имени тега записывается через двоеточие в формате:

    <имя модуля>:<имя тега>

Пример:

      module.WFMAN:
        type:   wessvr.adapter
        module: pfman
        tags:
          SumWeight:   scrpg:pid1.SumVolume
          Output:      scrpg:pid1.FlowInpMh

## Определение сложных тегов

В модуле источнике значение веса, счетчика и т.п. может состоять из двух тегов, каждый из которых есть двухбайтовое слово от 0 до 65535. В таком случае нужно в качестве значения прописать оба тега модуля источника через запятую, причем первым должен быть старший тег.

Пример:

      module.WFMAN:
        type:   wessvr.adapter
        module: pfman
        tags:
          SumWeight:   SumWeightHihg, SumWeightLow

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

## Определение тегов по умолчанию

Автоматически в карту тегов добавляются следующие теги:

Адаптер | Источник
--- | ---
SYSTEM.ErrorFlag | SYSTEM.ErrorFlag
SYSTEM.UpdateTime | SYSTEM.UpdateTime

Данные теги прописывать не нужно.

## Тег WesSvrState

Тег `WesSvrState` обнуляется через 10 секунд, если в него не производить запись.

## Crc32

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

## Теги

Список всех тегов модуля:

    Crc32              LONG
    MaxNum             LONG
    MaxWeight          LONG
    Mul                INT
    WesSvrState        INT

    --- crc32 begin ---
    SumWeight          LONG
    SumNum             LONG
    CurWeight          LONG
    LastWeight         LONG
    LastTime           LONG
    Output             INT
    Status1            INT
    Status2            INT
    Status3            INT
    Status4            INT
    Status5            INT
    SYSTEM.ErrorFlag   BOOL
    --- crc32 end ---

    SYSTEM.UpdateTime  INT