This is topic Modbus TCP и типы данных in forum TRACE MODE 7 бесплатная базовая версия / TRACE MODE 7 free basic version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/60/t/000121.html

Posted by aslav (Участник № / Member № 9803) on :
 
Здравствуйте.

Пытаюсь разобраться с типами данных при работе по 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.

Никак не удается вывести правильное число на экран.
Посдкажите, в чем может быть ошибка?
 
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
 
Здравствуйте!

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

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

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

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

После того, как получим с устройств корректное значение, обсудим вопрос корректного вывода на экран
 
Posted by aslav (Участник № / Member № 9803) on :
 
Здравствуйте!

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

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

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

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

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

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

Есть ли варианты как это сделать в TraceMode?
 
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
 
По функции 3 оно отдает сразу 120 регистров каждый цикл опроса.
Это точно modbus?
Согласно стандарту Modbus, устройство отдает ровно столько данных, сколько указано в запросе.

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


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2