Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
|
использование_преобразований_map [2025/04/06 10:36] 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 значение в текущем буфере (на тот случай, | ||
| + | |||
| + | Если значение не было считано, | ||
| + | Для примера выше, требуется, | ||
| + | < | ||
| " | " | ||
| - | " | + | </ |
| - | " | + | Соответственно, в случае если значение регистра 40003 не нулевое (сработал |
| - | " | + | |
| - | '' | + | |
| - | '' | + | Данное поведение, |
| + | |||
| + | |||
| + | **строковое значение: | ||
| + | |||
| + | В этом случае, | ||
| + | |||
| + | В примере ниже, если значение 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 | ||
| + | |||
| + | |||
| + | |||
| + | < | ||
| + | " | ||
| + | </ | ||