Форум TRACE MODE: техническая поддержка Послать новую тему / Post New Topic  Послать ответ / Post A Reply
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 7 » TRACE MODE 7 бесплатная базовая версия / TRACE MODE 7 free basic version » Modbus TCP и типы данных

   
Автор / Author Тема / Topic: Modbus TCP и типы данных
aslav
Junior Member / Новичок
Участник № / Member № 9803


Icon 1 отправлено / posted      Профиль для / Profile for aslav           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Здравствуйте.

Пытаюсь разобраться с типами данных при работе по Modbus TCP.

Имею устройство, которое в первых двух регистрах передает мне число с плавающей точкой (float).
Создал Modbus в источнике, адрес 1, функция R_2Hreg(3), прототип ANALOG-32, тип аргументов real.
Перетащил в RTM_0, привязал к выводу на экран с типом in/real.

Без проблем на экране отображаю число.

Далее в третьем и четвертом регистре мне пересылается целое число (integer).

Создал Modbus в источнике, адрес 3, функция R_2Hreg(3), прототип DISCRETE 32, тип аргументов udint(32).
Перетащил в RTM_0, указал в нем параметр "число бит" [56] равным 32 и привязал к выводу на экран с типом in/udint.

Никак не удается вывести правильное число на экран.
Посдкажите, в чем может быть ошибка?

Сообщения / Posts 2 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Здравствуйте!

Число с плавающей запятой отображается корректно, а целочисленное - нет?

Для начала, считанные значения проверяйте в Панели МРВ. Канал Discrete достоверен (атрибут 4,FA)?

Если достоверен, то, скорее всего вопрос только в порядке чтения байт (см. Перестановка (309)) в настройках подключения к устройству).

Если недостоверен, то проверьте, если ли следующий за считываемым регистром следующий регистр?

После того, как получим с устройств корректное значение, обсудим вопрос корректного вывода на экран

Сообщения / Posts 17345 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
aslav
Junior Member / Новичок
Участник № / Member № 9803


Icon 1 отправлено / posted      Профиль для / Profile for aslav           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Здравствуйте!

Все оказалось сложнее. Ситуация с Modbus-устройством следующая:

По функции 3 оно отдает сразу 120 регистров каждый цикл опроса. Например, протокол такой

- в первых двух тип с плавающей точкой float, значение температуры.
- во следующих двух целое значение типа integer, количество циклов.
- далее в одном регистре идет целое беззнаковое значение типа unsigned short, там другой параметр.
- в следующем регистре набор битовых данных.

и так далее для всех 120 регистров различные данные в разных форматах.

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

TraceMode явно делает запросы - "дай мне с такого-то смещение данные в таком-то формате" и так для всех созданных исходных данных для Modbus соединения.
А у меня такой пакет каждый такт.
С помощью программы Modbus Slave выяснил, что то значение, которое, как я думал, является Integer - на самом деле тот же первое float-значение. Видно в панели МРВ в фомате HEX, они одинаковы.

Есть ли варианты как это сделать в TraceMode?

Сообщения / Posts 2 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
По функции 3 оно отдает сразу 120 регистров каждый цикл опроса.
Это точно modbus?
Согласно стандарту Modbus, устройство отдает ровно столько данных, сколько указано в запросе.

Как разобрать такой пакет данных в TraceMode, вревратив их в переменные
Что бы запросить Х последовательных регистров, без чтения встроенной Справочной Системы (рекомендуется ознакомиться) параграфов о подключении по протоколу ModBus и групповых запросах, Вам достаточно настроить modbus-источник для запроса начального регистра, привязать его к каналу Call.ChGroupReq у которого будет необходимое количество аргументов необходимого типа данных и в необходимом порядке.
Проверяем корректность считанных данных и далее работаем с аргументами этого канала.

Сообщения / Posts 17345 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Quick Reply
Сообщение / Message:

HTML код не разрешен. / HTML is not enabled.
UBB код разрешен. / UBB Code is enabled.

Значки Graemlins / Instant Graemlins
   


Послать новую тему / Post New Topic  Послать ответ / Post A Reply Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2