MAI6 масштабирование значений

Добрый день.
Сегодня поставил и обновил модуль MAI 6 до последней версии. К первому входу подключенно два датчика температуры один токовый 4…20 мА на P с нижним пределом -40000 (-40С) и верхним 85000 (85С).Отображается в веб интерфейсе правильно. Второй датчик температуры с выходом по напряжению 0…10 В с нижним пределом -30000 (-30С) и верхним 70000 (70С).Отображается в веб интерфейсе не правильно (отрицательное значение). Причем если выставлять диапазон -3000 … 7000 то все нормально. подскажите в какую сторону копать?
Скриншоты настроек и значение из веб интерфейса прилагаю


View mai 6
с уменьшенными настройками масштабирования

Как всё таки правильно использовать пересчет? В викиhttps://wirenboard.com/wiki/WB-MAI6_Modbus_Analog_Inputs
есть скриншот настроек и собственно самого виджета в UI
250px-Mai6-value-measurements
Как это получилось (7.19). У меня если заполнить минимальное пересчитанное значение -40
Максимальное пересчитанное значение 85.

В виджете рисуется только целая часть
UI mai6_1
Собственно вчерашняя попытка это перевести значение в формат с “фиксированной точкой”. Я бы этим не занимался если бы сработал вариант из вики. Да и в интерфейсе это было читабельней например 57.673 чем 57673. И еще один вопрос когда появится возможность добавить в шаблоне виджета свои ед измерения? И прикладываю версию контролера
system.
Понял. Внутри модуля значения в Int16, от -32768 до 32767. Если задать границы как я задавал, то модуль вернет только целую часть, а не как я ожидал все число, сбили с истинного пути скриншоты из вики с точкой в виджете. Сделал пока свой шаблон.

1 лайк

По стандартной формуле, (15(верхний) - 0(нижний))*(диапазон(измеренного)/реальное(измеренное))+0(нижний)
То есть на входе тут примерно 0,49 вольт.

Так, а как переписать документацию, чтоб понятней было?

Тут вопрос что мы на скриншоте из WIKI видим точку (разделение дробной и целой части. В реальности этого не происходит. То есть если ввести диапазон из целых чисел как я, то мы никогда мы не увидим дробную. Я искал диапазон переменной в таблице описания модуля, а надо было в таблице регистров Modbus. Ну и правильно ли я понимаю что диапазон будет -32768 до 32767?
Можно хотя бы подсказку о диапазоне написать под полями “минимальное значение” и “максимальное значение” в конфигураторе. Я сначала пробовал Float ввести появилось красная надпись что поле Int ну и допишите далее диапазон. Я попытался ввести 85000 и поле позволило это сделать с 2 байтовой переменной. В то же время я смотрел на уже отмасштабированное, полученное значение которое было в пределах 22 градусов Цельсия. Поэтому не сразу заметил ошибку. Была бы температура сенсора другая, это бы сразу бросилась бы в глаза. Собственно поэтому и был 1 пост, я думал что проблема пересчета только со вторым каналом. Ну и было бы на мой взгляд неплохо добавить поле Scale. Тогда я бы ввел допустим минимум -4000, макс 8500, scale 0,01 и получил значение как в Wiki. Сейчас пришлось делать свой шаблон. И последнее отмасштабированное значение в Int16 иногда мало, в тоже время значение в mA приходит в int32. Лучше бы было наоборот, пользователю дать возможность отмасштабировать в int32, а значение тока или напряжения показывать с двумя знаками после запятой. Все равно у дешевых тестеров погрешность больше. Вот сейчас еще раз проверил как в Wiki не получается. я ожидал что будет как и верхнее значение
Test2
Настройки с подсказкой


И плохо что нет поля ед.изм. В своем шаблоне я это исправил.

И ещё один вопрос, разве при попытке записать число большее чем int 16 драйвер не должен вернуть ошибку 03 “Значение, содержащееся в поле данных запроса, является недопустимой величиной” и откинуть пакет? А то сейчас он записывает! Проверить просто запишите любое число больше 32767 в регистр “Верхняя граница диапазона измерения активного датчика для каналов INxP” модуля MAI6, допустим 32769, чтение этого же регистра выдаст -32767. Как тогда сделать защиту от “дурака”-переполнения?

Для регистров написано: 16-bit signed int естественно если записать туда отрицательное значение - оно и будет отрицательным.

То есть почему это 32769, которое 0b1000 0000 0000 0001 не помещается в 16 бит?

Добрый день. Возможно я не так выразился. Приведу пример который меня сбил с толку.
Есть модуль MAI6. К первому каналу которого подключен датчик температуры с токовым выходом 4…20 мА и диапазоном измерений от -40 до 85 градусов Цельсия. Так как мне нужно получить физическую величину в UI, то в таблице ModBus регистров (возьмем пока “верхнюю границу диапазона измерения активного датчика для канала IN1P” ) видим что нужно ввести значение типа 16-bit signed int в регистр (0x140A Hex) или (4096·1 + 1034 Dec). Вот настройка этого канала (пока без множителя для чистого теста).


Вот значения из веб интерфейса с описанием

Стандартный шаблон всем хорош, но у него нет следующих настроек (ну или я их не нашел):

  1. Нет возможности ввести множитель,смещение,точность (и это самый большой минус) для канала
  2. Нет возможности ввести ед изм. для канала

    И еще пожелание введите подсказку о диапазоне хотя бы здесь