Опрос китайского модуля 8DI/4DO по Modbus RTU
-
- Сообщения: 25
- Зарегистрирован: 11 дек 2014, 06:31
Re: Опрос стороннего оборудования по Modbus RTU
Добрый день! Имею отдалённо схожую проблему. Прошу помочь.
Имеется ПЛК 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 ничего не изменяется.
Имеется ПЛК 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 (47.54 КБ) 2153 просмотра
-
- Скрин 2.png (46.96 КБ) 2153 просмотра
Re: Опрос китайского модуля 8DI/4DO по Modbus RTU
Наберите в строке поиска Float.
Re: Опрос китайского модуля 8DI/4DO по Modbus RTU
Aleksandr_Sorokin во первых какая-то странная у вас система запуска запроса.
еще попробуйте использовать modrw
кроме этого возьмите преобразователь usb/485 и программу терминал. посмотрите что по сети бегает.
в вложении прикладываю экспортированную подпрограмму обмена данными. там все просто, только прием и передача через маркеры разные, чтобы цикл отдельно не писать. обмен не непрерывный. один опрос по запросу, но сделать его непрерывным нет никаких проблем.
Еще вынесите в монитор все регистры d1070-D1076 там удобно смотреть 32-битные вариации. еще пробуйте HEX повертеть. возможно нужна перестановка слов
еще попробуйте использовать modrw
кроме этого возьмите преобразователь usb/485 и программу терминал. посмотрите что по сети бегает.
в вложении прикладываю экспортированную подпрограмму обмена данными. там все просто, только прием и передача через маркеры разные, чтобы цикл отдельно не писать. обмен не непрерывный. один опрос по запросу, но сделать его непрерывным нет никаких проблем.
Еще вынесите в монитор все регистры d1070-D1076 там удобно смотреть 32-битные вариации. еще пробуйте HEX повертеть. возможно нужна перестановка слов
- Вложения
-
- modbus.rar
- (2.81 КБ) 243 скачивания
Re: Опрос стороннего оборудования по Modbus RTU
Интересно, от куда пошла "мода" втыкать LD M1000 везде, где ни поподя?)))Aleksandr_Sorokin писал(а): Настройки сети и порта верные...
Я это к тому, что Чтение данных через COM-порт горааздо медленнее скана. И когда вы будете опрашивать/читать ваши датчики,то в рабочих регистрах у вас будет сохраняться что угодно, но только не температура от конкретного датчика.(((
PS. Как преобразовывать FLOAT, считанный по MODBUS и, Как настроить Edit Monitored Devices для просмотра FLOAT, надеюсь, уже нашли.
Re: Опрос китайского модуля 8DI/4DO по Modbus RTU
Вставлю свои 5 копеек:
Непонятно зачем у вас М1127 - это же флаг удачного приема, используйте его.
С ним надо так: послали запрос, если получили верный ответ - сработал М1127, сохранили полученные данные, сбросили М1127. Если неудачно - сработал М1129 или М1140 - записываем в наши данные нули (чтобы не висели недостоверные данные), сбросили М1129.
Непонятно зачем у вас М1127 - это же флаг удачного приема, используйте его.
С ним надо так: послали запрос, если получили верный ответ - сработал М1127, сохранили полученные данные, сбросили М1127. Если неудачно - сработал М1129 или М1140 - записываем в наши данные нули (чтобы не висели недостоверные данные), сбросили М1129.
-
- Сообщения: 25
- Зарегистрирован: 11 дек 2014, 06:31
Re: Опрос китайского модуля 8DI/4DO по Modbus RTU
Я просто взял аналогичный пример из русскоязычного руководства. Начитан, что здесь русские мануалы особо не котируются, но я пока новичок. Мне необходимо понять сам принцип конвертации.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 - только младшие. Тоже, видимо, какая-то мулька, до которой я пока не дошёл.
Благодарю всех за участие!
Re: Опрос китайского модуля 8DI/4DO по Modbus RTU
Из описания команды MODRD.Aleksandr_Sorokin писал(а): И ещё в описании программы MODRD для режима ASCII в блоке ответа для каждого регистра указываются и старшие, и младшие байты, а для режима RTU - только младшие. Тоже, видимо, какая-то мулька, до которой я пока не дошёл.
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 раз.
Re: Опрос китайского модуля 8DI/4DO по Modbus RTU
если вы в каком-то регистре видите нужное вам число то делайте dmovr для этого регистра. Следующий регистр команда зацепит сама. А дальше работайте во float или умножайте на 100 (например) и и после этого делайте int (если вы уверены, что не будет переполнения)
-
- Сообщения: 25
- Зарегистрирован: 11 дек 2014, 06:31
Re: Опрос китайского модуля 8DI/4DO по Modbus RTU
Благодарю всех за помощь! Сейчас уехал с объекта, но по прибытию буду продолжать эксперименты.
Спасибо. Видимо, придётся следовать вашему совету.tvent писал(а):Aleksandr_Sorokin писал(а): И еще. Пользуйтесь оригинальной документацией на английском. Ну очень много откровенных ляпов в переводе на русский.(((
Re: Опрос китайского модуля 8DI/4DO по Modbus RTU
инструкция от 2013 года переведена более чем пристойно. на нее можно ориентироваться.