PDA

Просмотр полной версии : Адреса регистров ModBus RTU в ТРМ138



RomAl
22.07.2024, 12:39
В моём проекте панель Weintek читает из ТРМ138Р регистры 0-39 из ТРМ138
по протоколу ModBus RTU (функция 4) для получения значений измеренной величины
на 1-8 каналах. Первоначально хотел использовать регистры с целым значением так как
точка на всех каналах имеет одинаковое положение ххх.х Но увидел что значения
в этих регистрах иногда странные (не по формату int16) а положение точки может быть любое от 0 до 3...
Ну ладно, решил использовать регистры с типом float, в них значения почти совпадали
с показаниями на самом приборе. Но оказалось что адреса регистров не совсем совпадают с
адресами в документации, а именно:
1канал: 1- int 2,3- float (а должно быть 1-int 3,4- float)
2канал: 6- int 7,8- float (а должно быть 6-int 8,9- float)
и так далее все каналы...
Такая ситуация на всех трёх ТРМ138 (2022г и 2024г производства).
Посмотрел свои старые программы, где ТРМ138 читался ПЛК110 и увидел,
что там адреса совпадают с документацией. Теперь вопрос:
Или я где-то ошибаюсь и делаю что-то не правильно,
или панель так не правильно читает
или ТРМ138 не правильно работает
или в в руководстве по эксплуатации на ТРМ138 не внесены изменения?

melky
22.07.2024, 13:36
логический и физический адрес - производители по разному к этому относятся. Сделайте адрес + 1 и правильно укажите перестановку, если требуется.

kondor3000
22.07.2024, 13:48
В моём проекте панель Weintek читает из ТРМ138Р регистры 0-39 из ТРМ138
по протоколу ModBus RTU (функция 4)
адресами в документации, а именно:
1канал: 1- int 2,3- float (а должно быть 1-int 3,4- float)
2канал: 6- int 7,8- float (а должно быть 6-int 8,9- float)
и так далее все каналы...
Такая ситуация на всех трёх ТРМ138 (2022г и 2024г производства).
Посмотрел свои старые программы, где ТРМ138 читался ПЛК110 и увидел,
что там адреса совпадают с документацией.

Чтобы адреса совпадали, в панели должен стоять протокол ModBus RTU (Zero Based Adress), иначе адреса будут +1 от адресов ПЛК, а так же должны быть правильно расставлены регистры ( байты) в переменных Float. У вас где то ошибка, проверяйте.

RomAl
22.07.2024, 14:47
Я так тоже поначалу думал и попробовал, и конечно не помогло. Дело не в сдвиге всех адресов регистров, а в самой адресации.
Регистры int всех каналов находятся на своих адресах (в соответствии с документацией на ТРМ138) а регистры float того же
канала должны иметь адрес на 2 больше, но получается на 1 больше. Куда делся при этом код ошибки который должен быть
между ними? Регистрами int вообще сложно пользоваться, так как значение десятичной точки бывает не верным.
Можно конечно забить на это, но потом вдруг поправят когда-нибудь, ТРМ138 заменят на новый и ... он не будет работать.

Валенок
22.07.2024, 14:54
..
Ну ладно, решил использовать регистры с типом float, в них значения почти совпадали...
Поясните.
Если отличие в пол процента - это признак что считали хрень. Похожую - но хрень

kondor3000
22.07.2024, 14:56
Я так тоже поначалу думал и попробовал, и конечно не помогло. Дело не в сдвиге всех адресов регистров, а в самой адресации.
Регистры int всех каналов находятся на своих адресах (в соответствии с документацией на ТРМ138) а регистры float того же
канала должны иметь адрес на 2 больше, но получается на 1 больше. Куда делся при этом код ошибки который должен быть
между ними? Регистрами int вообще сложно пользоваться, так как значение десятичной точки бывает не верным.
Можно конечно забить на это, но потом вдруг поправят когда-нибудь, ТРМ138 заменят на новый и ... он не будет работать.

Опросите ТРМ любым ОРС сервером и проверьте адресацию и показания. https://owen.ru/catalog/opc_serveri
Думаю проблема у вас в проекте панели.
Или вы INT принимаете за код ошибки, или у вас датчики не подключены (не настроены).
А вообще надо хотя бы скрины выкладывать, а лучше проект.

RomAl
22.07.2024, 15:02
В регистрах int почти всегда правильно, но иногда когда величина растёт значение не соответствует. float считывает правильно, отличие бывает в последней цифре из-за округления.

Валенок
22.07.2024, 15:09
В регистрах int почти всегда правильно, но иногда когда величина растёт значение не соответствует. float считывает правильно, отличие бывает в последней цифре из-за округления.
воспроизведите двойное слово которое читаете с [2..3] в hex и сюда как есть.
Если нету hex - dec как uint32
И одновременно - тоже, но с [3..4]
А после оборвите датчик с Ai1.
И результат [2..3] и [3..4] - сюда

С вас 4 udint32 числа. Без вопросов и нытья.

RomAl
23.07.2024, 09:57
Спасибо за совет, посмотрел в формате hex и стало видно что везде младше слово всегда 0000. Значит верно указано в мануале что адрес 3..4, но видимо надо переставлять слова в Панеле местами перед тем как выводить на индикатор. Штатного способа нет, придётся в макросе их переставлять.

kondor3000
23.07.2024, 10:38
Спасибо за совет, посмотрел в формате hex и стало видно что везде младше слово всегда 0000. Значит верно указано в мануале что адрес 3..4, но видимо надо переставлять слова в Панеле местами перед тем как выводить на индикатор. Штатного способа нет, придётся в макросе их переставлять.

Как нет, есть перестановка байт и регистров Float, при установке протокола и параметров порта 77522

RomAl
23.07.2024, 11:12
Как нет, есть перестановка байт и регистров Float, при установке протокола и параметров порта 77522

Да, если считывать по одному каналу измерения (а их 8) это можно использовать. Но у меня несколько устройств на RS485 а не только ТРМ138 и это роскошь я себе позволить не могу, считываю за один раз все регистры всех каналов, а затем в макросе их обрабатываю.
Впрочем я уже это сделал (перестановку слов) в макросе и всё получилось и работает. Спасибо всем за ценные советы.

Валенок
23.07.2024, 13:25
не совсем по теме

А вайнтек вывозит 32битное размещеное у себя по нечетным словам памяти?

capzap
23.07.2024, 13:41
не совсем по теме

А вайнтек вывозит 32битное размещеное у себя по нечетным словам памяти?

вроде проблем не должно быть 77527 или речь о чем то другом

melky
23.07.2024, 13:42
Ага, всегда хотелось оторвать руки тем, кто сделал int16, float, int16, float вместо того, чтобы сделать все int16 а потом все float. На модулях ввода МХ110 та же песня.

capzap
23.07.2024, 13:55
Спасибо за совет, посмотрел в формате hex и стало видно что везде младше слово всегда 0000. Значит верно указано в мануале что адрес 3..4, но видимо надо переставлять слова в Панеле местами перед тем как выводить на индикатор. Штатного способа нет, придётся в макросе их переставлять.

что значит штатного нет? Когда опршиваете если при 3х некорректно, попробуйте 5х

Валенок
23.07.2024, 17:35
вроде проблем не должно быть 77527 или речь о чем то другом
Да. Вроде об этом. Этот камень может работать без выравнания как понял.

Валенок
23.07.2024, 17:37
вместо того, чтобы сделать все int16 а потом все float..
А можно все float а потом все int16 ?

-
))

--
Да пофиг кто за кем. Было бы выравнивание. В ТРМ138 нет

Валенок
23.07.2024, 17:38
что значит штатного нет? Когда опршиваете если при 3х некорректно, попробуйте 5х
В данном случае не прокатит.

В моём проекте панель Weintek читает из ТРМ138Р регистры 0-39 из ТРМ138

.. считываю за один раз все регистры всех каналов,
У блока Ai нечетное кол-во регистров (40/5)

melky
23.07.2024, 19:06
Валенок мне как-то все равно, а вот модпул в составе Zabbix не умеет делать групповые запросы, когда переменные разного типа.
Так понимаю, что-то подобное и у автора, он хочет групповые запросы, а панелька видимо не хочет, отсюда и скрипты

capzap
23.07.2024, 20:33
В данном случае не прокатит.


У блока Ai нечетное кол-во регистров (40/5)

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

Валенок
24.07.2024, 04:47
.. у автора, он хочет групповые запросы, а панелька видимо не хочет, отсюда и скрипты
Да панель может эти хотелки. Просто она знать не знает (что нормально) о типе из 5 регистров где последние 2 нужно поменять местами.
Штатные средства (для групового запроса) проканали бы с 8A/2A, а с ТРМ138 (и такая же хрень с 8AC/2AC) - нет. Но для этого и

... есть макросы,..
для которых подразумеваются не галкотыкатели, а могущие свою хотелку описать. Автор описал и все норм.

Что касается забикса - то это его косяк/проблема, т.к. в модбасе вообще нет разных типов (бит опускаю) - есть только 16-ти битный регистр-вагон. А что перевозится этим составом из кучки вагонов - это вообще модбас не касается.

capzap
24.07.2024, 08:18
Да панель может эти хотелки. Просто она знать не знает (что нормально) о типе из 5 регистров где последние 2 нужно поменять местами.

для которых подразумеваются не галкотыкатели, а могущие свою хотелку описать. Автор описал и все норм.

без макросов, без передачи данных, на одном и том же экране отображаются любые перевертыши и даже по нечетным адресам 77545