Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
использование_преобразований_map [2025/04/06 10:37] Admin |
использование_преобразований_map [2025/04/06 23:02] (текущий) Admin [Шаблон "cmd":"fan"] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Использование преобразований map ====== | ||
+ | |||
+ | |||
Внутри контроллера команды и значения между каналами передаются в унифицированном виде (см itemCmd) | Внутри контроллера команды и значения между каналами передаются в унифицированном виде (см itemCmd) | ||
Но для управления реальными устройствами, | Но для управления реальными устройствами, | ||
+ | |||
Для этого существует механизм преобразований, | Для этого существует механизм преобразований, | ||
- | Первое место, где используются преобразования - это интеграция Modbus v2. это обьясняется тем, что в Modbus все взаимодействие с устройством происходит через регистры, | + | |
- | Предусмотрено два типа преобразований - преобразования команды и преобразование значения | + | Первое место, где используются преобразования - это интеграция Modbus v2. см [[настройка_modbus]] |
- | Также, два направления преобразования - прямое (когда из унифицированного вида создается значение для записи в устройство) и обратное - когда считанное из устройства значение преобразуется в унифицированный вид | + | |
- | Преобразование определяется при помощи JSON обьекта " | + | ==== Типы преобразований ==== |
+ | Предусмотрено два типа преобразований - **преобразования команды** и **преобразование значения** | ||
+ | |||
+ | |||
+ | Также, | ||
+ | |||
+ | Преобразование определяется при помощи JSON обьекта " | ||
< | < | ||
" | " | ||
+ | </ | ||
+ | **прямое преобразование: | ||
+ | |||
+ | При управлении fanspeed (напрямую, | ||
+ | |||
+ | В случае, | ||
+ | В противном случае, | ||
+ | если в результате преобразований будет получено число - произойдет запись в указанный регистр модбас. | ||
+ | |||
+ | при считывании значения из регистра, | ||
+ | |||
+ | При этом, те же правила применяются в обратном направлении. | ||
+ | Сначала производится попытка преобразовать полученное из регистра значение в команду. В случае неуспеха - в число. | ||
+ | |||
+ | В примере выше - если считано значение 0 - оно будет преобразовано в команду OFF | ||
+ | в случае не успешного преобразования в команду | ||
+ | |||
+ | Следует отметить, | ||
+ | |||
+ | Данное поведение можно отменить, | ||
+ | Это приведет к тому, что при невозможности преобразовать полученное значение в команду, | ||
+ | < | ||
" | " | ||
+ | </ | ||
+ | Для этого примера преобразования будут действовать следующим образом: | ||
+ | |||
+ | Прямое: | ||
+ | |||
+ | Команда OFF приведет к записи 0 в регистр 40003 | ||
+ | Любая другая команда или значение будут проигнорированы | ||
+ | |||
+ | Обратное: | ||
+ | |||
+ | Если из регистра 40003 считан ноль, он будет преобразован в команду OFF. | ||
+ | |||
+ | любые другие значения будут проигнорированы. Преобразование при этом будет считаться не успешным. и будет выполнен " | ||
+ | |||
+ | ==== Сценарии преобразования по умолчанию ==== | ||
+ | Этот параметр (используется только для обратных преобразований modbus) применяется в том случае, | ||
+ | |||
+ | Параметр def может иметь либо цифровое либо строковое значение. В случае цифрового значения - задается номер регистра. в случае строкового значения - задается имя параметра. Логика работы сценария по умолчанию немного разная для данных двух случаев. | ||
+ | |||
+ | **цифровое значение: | ||
+ | |||
+ | Контроллер пытается найти считанное из modbus значение в текущем буфере (на тот случай, | ||
+ | |||
+ | Если значение не было считано, | ||
+ | Для примера выше, требуется, | ||
+ | < | ||
" | " | ||
- | " | ||
- | " | ||
- | " | ||
</ | </ | ||
+ | Соответственно, | ||
- | '' | + | Данное поведение, |
+ | |||
+ | |||
+ | **строковое значение: | ||
+ | |||
+ | В этом случае, | ||
+ | |||
+ | В примере ниже, если значение coil 0 равно нулю - обратное преобразование сразу вернет команду OFF | ||
+ | |||
+ | Иначе, так как преобразование в число отменено (val=null), преобразование для параметра pwr будет считаться не успешным и контроллер посмотрит ранее считанное значение регистра 1, из параметра описанного в acmode, применит все указанные для регистра acmode преобразования и их результат вернет для параметра pwr | ||
+ | |||
+ | важно: параметр acmode должен быть описан в разделе items, даже если сам по себе он ни для каких действий более не используется. достаточно в данном описании поставить пустой JSON обьект - именно в нем контроллер сохраняет ранее считанные значения) | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
" | " | ||
- | " | ||
" | " | ||
- | '' | + | </ |
+ | |||
+ | |||
+ | ===== Ограничения диапазона при линейном преобразовании значений ===== | ||
+ | |||
+ | В простейшем случае, | ||
+ | |||
+ | < | ||
+ | " | ||
+ | </ | ||
+ | |||
+ | например | ||
+ | |||
+ | < | ||
+ | " | ||
+ | </ | ||
+ | В случае прямого преобразования, | ||
+ | В случае обратного - числа из интервала 1-64 к 1, 65-128 к 2, 129-195 к 3, 196-254 к 4 и 255 к 5 | ||
+ | |||
+ | NEW | ||
+ | если входное значение не укладывается в указанные границы - преобразование считается не успешным. То есть в примере выше, если на вход преобразования придет число 0 или 6 то оно не сработает. | ||
+ | |||
+ | можно определить значения, | ||
+ | |||
+ | < | ||
+ | " | ||
+ | </ | ||
+ | |||
+ | соответственно, | ||
+ | |||
+ | |||
+ | < | ||
+ | " | ||
+ | </ | ||
+ | |||
+ | Параметры подставляемые при срабатывании ограничений не обязательны. Если какие-то требуется пропустить - можно указать null | ||
+ | |||
+ | ===== Предопределенные шаблоны преобразований ===== | ||
+ | |||
+ | ==== Шаблон " | ||
+ | |||
+ | данный шаблон в случае прямого преобразования позволяет провести трансляцию стандартных команд OFF, LOW, MEDIUM, HIGH в значения 0, 20, 128, 255 соответственно | ||
+ | |||
+ | Для обратного преобразования: | ||
+ | Значения 0, 1-127, 128-254, 255 преобразуются в OFF, LOW, MEDIUM, HIGH | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | " | ||
+ | </ | ||