Вход

Просмотр полной версии : ТРМ138 чтение регистров Modbus



cst_auto
16.10.2025, 16:45
Добрый день.
Имеется ТРМ138, на входы которого подключены различные датчики (температуры, давления) с унифицированным сигналом 4-20 мА.
Далее ТРМ подключено по RS485 к ПЛК и планируется по Modbus RTU читать значения с этих датчиков. Читать ТРМ по шаблону не хочется, поэтому читаем отдельные регистры.
По РЭ в таблице параметры протокола находим нужные для чтения регистры.
86220
Нас интересуют целочисленные данные (да, возможно лучше float, но вопрос не в этом) и мы их получаем.
Но, мы получаем целочисленные значения с разным разрешением. Я так понимаю это зависит от настройки положение десятичной точки, значение которой мы тоже читаем из регистров.
Вопрос:
Как поменять значение десятичной точки?

В конфигураторе есть настройка, но она влияет только на отображение числа на дисплее самого ТРМ и не влияет на значение считанное с регистра modbus.
Возможно тема обсуждалась, но я не нашел.

МихаилГл
16.10.2025, 16:53
Ну наверное нужно инт перевести в реал и разделить на 10, кратное положению точки. Или не мучиться, и читать реал...

cst_auto
16.10.2025, 17:21
Разделить на 10 это не проблема и мы это можем делать.
Только есть момент, что даже в заводских настройках положение десятичной точки разное для разных каналов. Т.е. например, на первом канале мы читаем значение 34, что соответствует 34 гр. и мы видим это значение на дисплее ТРМ. На втором канале читаем значение 238, делим на 10 и получаем значение 23,8.
Проблема в том что на всех каналах значение положения десятичной точки разное и хотелось бы привести к одному

kondor3000
16.10.2025, 17:33
Читать надо и целое и положение точки, для каждого канала. Будете знать на сколько делить.
А ещё лучше читать сразу Float.
Например из модуля МВ110-8А, читаются сразу все 48 регистров, здесь их всего 40, так что можно всё читать и брать что нужно.
Так и быстрее будет, чем читать по 1-2 регистра.

МихаилГл
16.10.2025, 17:38
Если положение точки это не настраиваемый параметр, а рассчитываемый прибором, то надо делать как написано выше, и не забивать голову...

cst_auto
16.10.2025, 17:51
Да, чтение float решит проблему однозначно.
Но вопрос чтения целого числа, с которым я обратился, это больше к разработчикам. Есть возможность его решить через настройки или нет?

МихаилГл
16.10.2025, 18:03
Да, чтение float решит проблему однозначно.
Но вопрос чтения целого числа, с которым я обратился, это больше к разработчикам. Есть возможность его решить через настройки или нет?

Если к разработчикам, то это явно не сюда. Тут они редко бывают...

FPavel
16.10.2025, 18:05
Да, читать и значение и положение десятичной точки.

Можно читать с разными периодами: значение часто, а положение - раз в минуту или час.

FPavel
16.10.2025, 18:08
А можно читать сразу всю группу - с 0000 по 0027 регистры - это быстро (значительно быстрее отдельных запросов float) - и сразу в массиве получать все значения и положения точек.

cst_auto
16.10.2025, 18:11
Да, читать и значение и положение десятичной точки.

Можно читать с разными периодами: значение часто, а положение - раз в минуту или час.

Т.е. вы хотите сказать, что значение точки, как писалось выше, рассчитывается прибором и не настраивается?

МихаилГл
16.10.2025, 18:13
Да, читать и значение и положение десятичной точки.

Можно читать с разными периодами: значение часто, а положение - раз в минуту или час.


Т.е. вы хотите сказать, что значение точки, как писалось выше, рассчитывается прибором и не настраивается?

Если рассчитывается прибором, то решение не будет работать, если настраивается, то надо внимательно изучить мануал...

kondor3000
16.10.2025, 18:21
Т.е. вы хотите сказать, что значение точки, как писалось выше, рассчитывается прибором и не настраивается?

На сколько помню, выбор положения точки есть только на дисплее прибора.
А вот тот же или нет в регистрах не проверял.
Вам и флаг в руки, можете менять в приборе и смотреть в регистрах.

FPavel
16.10.2025, 18:22
Это ТРМ138 - положение десятичной точки задаётся руками при настройке. Также, как и для ТРМ1, ТРМ20х.

Но это не значит, что нужно лезть шаловливыми ручками и перенастраивать работающий прибор - читаете по Modbus и в ПЛК вычисляете.

В CoDeSys можно прочитать массив в тип данных String и потом спокойно делать преобразования этого массива. Я так показания из модуля аналоговых входов принимал.

cst_auto
20.10.2025, 10:31
Это ТРМ138 - положение десятичной точки задаётся руками при настройке. Также, как и для ТРМ1, ТРМ20х.

Но это не значит, что нужно лезть шаловливыми ручками и перенастраивать работающий прибор - читаете по Modbus и в ПЛК вычисляете.

В CoDeSys можно прочитать массив в тип данных String и потом спокойно делать преобразования этого массива. Я так показания из модуля аналоговых входов принимал.

Я же уже писал, что вычислить в ПЛК мы можем. Но проблема и суть вопроса другая. При чтении регистров, мы получаем значение с разным положением точки. На 1-м канале положение "0", на 2-м - 1, а на 4-м - "3".
Если вы знаете где это задается, подскажите.
В конфигураторе задается положение, которое влияет только на отображение на дисплее самого ТРМ138

FPavel
20.10.2025, 18:27
Вот открываю инструкцию на ТРМ138
https://docs.owen.ru/product/trm138/29/102930#topic-102930

Вижу, что по Modbus можно принять данные для каждого канала в двух местах - регистры 0-39 и 64-103.
Мне лень читать, не могу сказать в чём различия.

При помощи функции 4 можно считать эти значения.

Пусть, для примера в переменные типа WORD Ch1 и Pt1 считываются соответственно содержимое регистров 1 и 0.
Тогда Value1 - измеренное значение на канале 1 будет

M:=1;
for i:=1 to Pt1
M:=M*0.1;
end_for;

Value1 := Ch1 * M;

Единственно, раз всё равно считывается по 2 регистра на канал (значение и положение точки), то есть смысл брать не их, а значения в формате float - тогда и значения точек будет безразлично.

Или я не понимаю корень проблемы получения значения...

Вы так и не пояснили, почему не можете получить значения - то ли не совладали с Modbus, то ли значения, принятые из ТРМ138 не соответствуют ожиданиям, то ли целое значение и положение точки не можете в значение превратить.

МихаилГл
20.10.2025, 18:59
Он не понимает как настроить эту точку, и настраивается ли она. Или тупо динамически меняется от значения самим прибором и каждый раз может быть другой. Вот в чем его вопрос.

FPavel
20.10.2025, 19:07
Раз параметр настраивается вручную, значит никакого самопроизвольного изменения алгоритмом ТРМ138 быть не должно - иначе смысла в ручной настройке нет.

Единственно, не могу уяснить, почему параметр дублируется. Но это уже другое дело.