Добрый день.
Сегодня поставил и обновил модуль MAI 6 до последней версии. К первому входу подключенно два датчика температуры один токовый 4…20 мА на P с нижним пределом -40000 (-40С) и верхним 85000 (85С).Отображается в веб интерфейсе правильно. Второй датчик температуры с выходом по напряжению 0…10 В с нижним пределом -30000 (-30С) и верхним 70000 (70С).Отображается в веб интерфейсе не правильно (отрицательное значение). Причем если выставлять диапазон -3000 … 7000 то все нормально. подскажите в какую сторону копать?
Скриншоты настроек и значение из веб интерфейса прилагаю
Собственно вчерашняя попытка это перевести значение в формат с “фиксированной точкой”. Я бы этим не занимался если бы сработал вариант из вики. Да и в интерфейсе это было читабельней например 57.673 чем 57673. И еще один вопрос когда появится возможность добавить в шаблоне виджета свои ед измерения? И прикладываю версию контролера
.
Понял. Внутри модуля значения в Int16, от -32768 до 32767. Если задать границы как я задавал, то модуль вернет только целую часть, а не как я ожидал все число, сбили с истинного пути скриншоты из вики с точкой в виджете. Сделал пока свой шаблон.
Тут вопрос что мы на скриншоте из WIKI видим точку (разделение дробной и целой части. В реальности этого не происходит. То есть если ввести диапазон из целых чисел как я, то мы никогда мы не увидим дробную. Я искал диапазон переменной в таблице описания модуля, а надо было в таблице регистров Modbus. Ну и правильно ли я понимаю что диапазон будет -32768 до 32767?
Можно хотя бы подсказку о диапазоне написать под полями “минимальное значение” и “максимальное значение” в конфигураторе. Я сначала пробовал Float ввести появилось красная надпись что поле Int ну и допишите далее диапазон. Я попытался ввести 85000 и поле позволило это сделать с 2 байтовой переменной. В то же время я смотрел на уже отмасштабированное, полученное значение которое было в пределах 22 градусов Цельсия. Поэтому не сразу заметил ошибку. Была бы температура сенсора другая, это бы сразу бросилась бы в глаза. Собственно поэтому и был 1 пост, я думал что проблема пересчета только со вторым каналом. Ну и было бы на мой взгляд неплохо добавить поле Scale. Тогда я бы ввел допустим минимум -4000, макс 8500, scale 0,01 и получил значение как в Wiki. Сейчас пришлось делать свой шаблон. И последнее отмасштабированное значение в Int16 иногда мало, в тоже время значение в mA приходит в int32. Лучше бы было наоборот, пользователю дать возможность отмасштабировать в int32, а значение тока или напряжения показывать с двумя знаками после запятой. Все равно у дешевых тестеров погрешность больше. Вот сейчас еще раз проверил как в Wiki не получается. я ожидал что будет как и верхнее значение
И ещё один вопрос, разве при попытке записать число большее чем int 16 драйвер не должен вернуть ошибку 03 “Значение, содержащееся в поле данных запроса, является недопустимой величиной” и откинуть пакет? А то сейчас он записывает! Проверить просто запишите любое число больше 32767 в регистр “Верхняя граница диапазона измерения активного датчика для каналов INxP” модуля MAI6, допустим 32769, чтение этого же регистра выдаст -32767. Как тогда сделать защиту от “дурака”-переполнения?
Добрый день. Возможно я не так выразился. Приведу пример который меня сбил с толку.
Есть модуль MAI6. К первому каналу которого подключен датчик температуры с токовым выходом 4…20 мА и диапазоном измерений от -40 до 85 градусов Цельсия. Так как мне нужно получить физическую величину в UI, то в таблице ModBus регистров (возьмем пока “верхнюю границу диапазона измерения активного датчика для канала IN1P” ) видим что нужно ввести значение типа 16-bit signed int в регистр (0x140A Hex) или (4096·1 + 1034 Dec). Вот настройка этого канала (пока без множителя для чистого теста).