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.
- Заметки:
- Групп может быть задано неограниченное число. Например представим, что у нас имеется три разных канала поступления данных для какого-то датчика (или группы датчиков).
- по эзернет (основной)
- по RS (резервный)
- проводной (второй резервный)
То тогда на каждый датчик нам нужно создать три дополнительных и в настройках перечислить три группы в соответсвии с приоритетом.