Опрос китайского модуля 8DI/4DO по Modbus RTU

Aleksandr_Sorokin
Сообщения: 25
Зарегистрирован: 11 дек 2014, 06:31

Re: Опрос стороннего оборудования по Modbus RTU

Сообщение Aleksandr_Sorokin »

Добрый день! Имею отдалённо схожую проблему. Прошу помочь.

Имеется ПЛК DVP12SA2 и три датчика температуры с выходом Modbus RTU. По паспорту датчики выдают данные в формате FLOAT (два hex-регистра H0000 и H0001). Пытаюсь сделать пробный опрос одного датчика - выдаются значения, с которыми я никак не могу разобраться. В D1070-D1072 значения указываются верные, а вот в D1073-D1074 выдаются значения, которые я при всём своём желании не могу интерпретировать в адекватные показания.

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

Все датчики в качестве теста опрашивались через Modbus OPC сервер (функция 03 - Holding registers, как и у MODRD) и выдавали исключительно верные данные. Правда, значение в сервере было задано как FLOAT и отображалось значение только по регистру H0000, H0001 показывал 0. Но значение в H0000 было верным.
Так что проблема именно, в том, чтобы правильно обработать данные в программе ПЛК, о чём я и прошу в вас помощи.

Настройки сети и порта верные, флаг RTU (M1143) установлен, при включении/отключении флага M1161 ничего не изменяется.
Вложения
Скрин 1.png
Скрин 1.png (47.54 КБ) 2153 просмотра
Скрин 2.png
Скрин 2.png (46.96 КБ) 2153 просмотра

tvent
Сообщения: 1019
Зарегистрирован: 11 янв 2011, 17:02

Re: Опрос китайского модуля 8DI/4DO по Modbus RTU

Сообщение tvent »

Наберите в строке поиска Float.

bayk
Сообщения: 887
Зарегистрирован: 30 май 2015, 21:20

Re: Опрос китайского модуля 8DI/4DO по Modbus RTU

Сообщение bayk »

Aleksandr_Sorokin во первых какая-то странная у вас система запуска запроса.
еще попробуйте использовать modrw
кроме этого возьмите преобразователь usb/485 и программу терминал. посмотрите что по сети бегает.

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

Еще вынесите в монитор все регистры d1070-D1076 там удобно смотреть 32-битные вариации. еще пробуйте HEX повертеть. возможно нужна перестановка слов
Вложения
modbus.rar
(2.81 КБ) 243 скачивания

tvent
Сообщения: 1019
Зарегистрирован: 11 янв 2011, 17:02

Re: Опрос стороннего оборудования по Modbus RTU

Сообщение tvent »

Aleksandr_Sorokin писал(а): Настройки сети и порта верные...
Интересно, от куда пошла "мода" втыкать LD M1000 везде, где ни поподя?)))
Я это к тому, что Чтение данных через COM-порт горааздо медленнее скана. И когда вы будете опрашивать/читать ваши датчики,то в рабочих регистрах у вас будет сохраняться что угодно, но только не температура от конкретного датчика.(((

PS. Как преобразовывать FLOAT, считанный по MODBUS и, Как настроить Edit Monitored Devices для просмотра FLOAT, надеюсь, уже нашли.

and909
Сообщения: 858
Зарегистрирован: 28 май 2013, 13:20

Re: Опрос китайского модуля 8DI/4DO по Modbus RTU

Сообщение and909 »

Вставлю свои 5 копеек:
Непонятно зачем у вас М1127 - это же флаг удачного приема, используйте его.
С ним надо так: послали запрос, если получили верный ответ - сработал М1127, сохранили полученные данные, сбросили М1127. Если неудачно - сработал М1129 или М1140 - записываем в наши данные нули (чтобы не висели недостоверные данные), сбросили М1129.

Aleksandr_Sorokin
Сообщения: 25
Зарегистрирован: 11 дек 2014, 06:31

Re: Опрос китайского модуля 8DI/4DO по Modbus RTU

Сообщение Aleksandr_Sorokin »

bayk писал(а):Aleksandr_Sorokin во первых какая-то странная у вас система запуска запроса.
Я просто взял аналогичный пример из русскоязычного руководства. Начитан, что здесь русские мануалы особо не котируются, но я пока новичок. Мне необходимо понять сам принцип конвертации.
Перепробовал всё, на что хватило фантазии: менял местами c помощью XCH и DXCH, конвертировал DEBCD и DEBIN, менял форматы отображения, смотрел все возможные комбинации через Edit Monitored Devices и всё равно в итоге какая-то дичь.

Решение нашёл пока в следующем. Хоть в руководстве и написано, что при режиме RTU регистры D1050-D1055 не используются, но в них при опросе отображаются иные значения, нежели в D1070-D1085. Причём, если включить отображение типа FLOAT, то отображается именно то и так, как мне нужно. То бишь, если, например, реальная температура 17,9, то в D1050 я вижу F1,79000E+1. В итоге пока остановился на том, что беру данные из D1050-D1055 и с помощью DINT получаю целую часть, то есть не 17,9, например, a 17. Благо, для моей задачи такой точности хватает.

Но сие не есть хорошо, хотелось бы разобраться. Буду благодарен за помощь.
При опросе, в D1073-D1074 и в D1050-D1051 отображаются разные значения, хотя согласно описанию они должны быть одинаковыми. Видимо, разница в представлении. То есть в D1073 отображается, например, "К102", а в D1050 - "К-12676" (условно). В мануале указано, что данные в D1070-D1085 представлены в hex-формате и автоматически конвертируются в D1050-D1055. Вот именно с этими преобразованиями у меня трудности.

И ещё в описании программы MODRD для режима ASCII в блоке ответа для каждого регистра указываются и старшие, и младшие байты, а для режима RTU - только младшие. Тоже, видимо, какая-то мулька, до которой я пока не дошёл.

Благодарю всех за участие!

tvent
Сообщения: 1019
Зарегистрирован: 11 янв 2011, 17:02

Re: Опрос китайского модуля 8DI/4DO по Modbus RTU

Сообщение tvent »

Aleksandr_Sorokin писал(а): И ещё в описании программы MODRD для режима ASCII в блоке ответа для каждого регистра указываются и старшие, и младшие байты, а для режима RTU - только младшие. Тоже, видимо, какая-то мулька, до которой я пока не дошёл.
Из описания команды MODRD.
4. The feedback (returned) data from the peripheral equipment will be stored in D1070 ~ D1085. After data receiving is completed, PLC will check the validity of the data automatically. If there isan error, M1140 will be ON.
5. The feedback data are all ASCII codes in ASCII mode, so PLC will convert the feedback data into hex data and store them in D1050 ~ D1055. D1050 ~ D1055 is invalid in RTU mode.

То есть в режиме RTU данные в HEX сохраняются только младших байтах регистров D1070-D1085. И их нужно дополнительно упаковывать последовательно в младшие и старшие байты регистров командой DTM.
В режиме ASCII этого делать не надо. В регистрах D1050-1055 данные уже упакованы.
Но, насколько помню, Modrd в режиме RTU все таки упаковывает данные в оба байта регистров фидбэка. А вот куда конкретно ... зависит от прошивки PLC.
Возможно в те же D1050-1055...
И еще. Пользуйтесь оригинальной документацией на английском. Ну очень много откровенных ляпов в переводе на русский.(((
Последний раз редактировалось tvent 25 июл 2018, 05:56, всего редактировалось 1 раз.

bayk
Сообщения: 887
Зарегистрирован: 30 май 2015, 21:20

Re: Опрос китайского модуля 8DI/4DO по Modbus RTU

Сообщение bayk »

если вы в каком-то регистре видите нужное вам число то делайте dmovr для этого регистра. Следующий регистр команда зацепит сама. А дальше работайте во float или умножайте на 100 (например) и и после этого делайте int (если вы уверены, что не будет переполнения)

Aleksandr_Sorokin
Сообщения: 25
Зарегистрирован: 11 дек 2014, 06:31

Re: Опрос китайского модуля 8DI/4DO по Modbus RTU

Сообщение Aleksandr_Sorokin »

Благодарю всех за помощь! Сейчас уехал с объекта, но по прибытию буду продолжать эксперименты.
tvent писал(а):
Aleksandr_Sorokin писал(а): И еще. Пользуйтесь оригинальной документацией на английском. Ну очень много откровенных ляпов в переводе на русский.(((
Спасибо. Видимо, придётся следовать вашему совету.

bayk
Сообщения: 887
Зарегистрирован: 30 май 2015, 21:20

Re: Опрос китайского модуля 8DI/4DO по Modbus RTU

Сообщение bayk »

инструкция от 2013 года переведена более чем пристойно. на нее можно ориентироваться.

Ответить