Многоканальные датчики

MultiChannelSensors - это класс реализующий логику по выставлению датчиков, зачения которых получают из нескольких информационных каналов.
Процессу задаются группы датчиков (любое количество), с которыми будет вестись работа. При этом указывается приоритет. Чем меньше задан priority, тем приоритетнее данная группа. Помимо этого для каждой группы задаётся разрешающий работу датчик (respond). И тогда процесс работает по следующей логике: Группы выстраиваются в порядке приоритета. Если respond-датчик самой приоритетной группы = "1", то ведётся работа с ней. Т.е. датчики DI,AI входящие в эту группу "перекидываются" в соответствующие указанные в настройках датчики (xxx_sensor). А значения для AO,DO наоборот переписываются значениями из (xxx_sensor). Если группа становится недоступна (respond=0), начинается работа со следующей по списку группой (следующей по приоритету) и так до конца. Если все группы недоступны и при этом задана группа по умолчанию (default="1"), то ведётся работа с ней. Если default-группа не задана, то НИКАКОЙ работы не ведётся, и в DI,AI - датчиках просто остаются последние значения на момент когда была связь. Датчики AO,DO - обновляются в группах всегда (!).
Предупреждения:
Подразумевается, что xxx_sensor имеет тот же тип, что и датчик группы !
Настройка происходит в два этапа: 1) Создаётся настроечная секция
<MultiChannel name="MyMultiChannel1" filter_field="mc">
    <channel priority="1" filter_value="1" respond_id="LSU_FQC1_Not_Respond_FS"/>
    <channel priority="2" filter_value="2" default="1"/>
</MultiChannel>
Где priority - приоритет группы (чем меньше, тем приоритенее) filter_field - фильтрующее поле для групп (при формировании списка датчиков) filter_value - фильтрующее значение для данной группы respond_id - датчик "доступности". Если он равен "1" - то с данной группой ведётся работа. respond_invert - возможность инвертировать "разрешающий работу" датчик. default - Может быть задано только у одной группы, значения из которой будут использованы по умолчанию, если другие группы "недоступны".

2) Второй шаг, это настройка групп в у каждого датчика в секции <sensors> Пример

<sensors>
...
<item id="1162" iotype="DI" name="FQC1_LocalControl1_S2" textname="ГЭУ1: ПЧ1: управление c МПУ1(проводной)" mc="2" mc_sensor="FQC1_LocalControl_S"/>
<item id="1162" iotype="DI" name="FQC1_LocalControl1_S" textname="ГЭУ1: ПЧ1: управление c МПУ1(интерфейсный)" mc="1" mc_sensor="FQC1_LocalControl_S"/>
...
</sensors>
Где, поле "filter_field"_sensor - задаёт датчик в который будет переписано значение данного датчика для типов DI и AI. Для типов DO и AO - происходит, наоборот перекидывание из xxx_sensor.

Заметки:
Групп может быть задано неограниченное число. Например представим, что у нас имеется три разных канала поступления данных для какого-то датчика (или группы датчиков).
  1. по эзернет (основной)
  2. по RS (резервный)
  3. проводной (второй резервный)
    То тогда на каждый датчик нам нужно создать три дополнительных и в настройках перечислить три группы в соответсвии с приоритетом.

Документация по uniset-algorithms. Последние изменения: Fri Dec 12 14:27:17 2014. Создано системой  doxygen 1.5.9