This is topic ModbusRTU and float in forum TRACE MODE 5 бесплатная версия / TRACE MODE 5 Free version at Форум TRACE MODE: техническая поддержка.


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

Posted by Савинцев Евгений (Участник № / Member № 611) on :
 
Здравствуйте, у меня возникло затруднение [cry / плачь]
При попытке считать данные из контроллера Quantum CPU11302 (Schneider Electric) по протоколу Modbus RTU не получается считывать числа с плавающей точкой (код команды Rout Float(3)), целочисленные данные (код команды Rout Word(3)) считываются нормально.
Суть проблемы.
В память контроллера я записываю число с плавающей точкой, например 243.2438 (длина 4 байта в контроллере оно имеет тип REAL) по адресу 400001. при считывании числа с помощью команды Rout Float(3) из контроллера в ТМ я получаю следующее:
1. СН=0000 - в канал ТМ записывается число 0.228773
2. СН=0001 - в канал ТМ записывается число 243.0 (равенство с целой частью контрольного числа, скорее всего совпадение)
Похоже я чего то не понимаю [duno / незнайка] , помогите пожалуйста.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1) Насколько я понимаю - адрес 400001 в запросе должен иметь значение адреса на 1 меньше, т.е. - CH=0000.
2) Необходимо посмотреть в документации на ModBus этого контроллера в каком порядке он принимает и отвечает байтами Float-значения в пакетах ModBus. Дело в том, что практика показывает, что здесь бывают несоответсвия стандарту Modicon'овского ModBus'а - кто-то в формате Motorola, кто-то в формате Intel работает, а кто-то и вообще может в произвольном порядке байты в ответе по Float'ам выдавать.
 
Posted by Савинцев Евгений (Участник № / Member № 611) on :
 
Спасибо. [beer / пиво]
Я провел небольшой эксперимент [clever / умный]
С помощью Rout Word(3) я произвел чтение байтов по адресу 400001(СН=0000)и 400002(СН=0001)и получил следующий результат:
400001 = 3Е6А НЕХ и 400002 = 4373 НЕХ
т.о. по адресу 400001 хранятся 2 младших байта моего числа (243.2438), а по адресу 400002 2 старших байта. Но в канале ТМ значение по адресу 400001 считается старшими байтами, а по адресу 400002 младшими. В результате в канале ТМ я имею число 0.228773 (смотри предыдущее письмо).
Выводы: Что мне делать я понял. Но остался вопрос.
1. При использовании ТСР/IP и Modbus plus я столкнусь с тем же эффектом?
2. У кого не согласован порядок обработки байтов у ТМ [attention / внимание] или у контроллера.
Еще раз спасибо.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
[attention / внимание] У нас то как раз все правильно (согласно Modicon'овскому стандарту), а вот многие производители аппаратного обеспечения, к сожалению, этим пренебрегают. [Вращающиеся глаза / Roll Eyes]
В последней библиотеке modbus.dll мы ввели возможность произвольного конфигурирования расположения байтов в ответе (приходится подстраиваться [Улыбка / Smile] ). Модуль я выслал Вам по E-mail.
Данная возможность будет работать как для ModBus RTU, так и TCP\IP.
Для ModBus plus это работать не будет. [Неодобрение / Frown]

Для настройки нужной последовательности необходимо сделать следующее:
В директории, где находится modbus.dll необходимо создать файл modbus.set, а в нем указать число от 0 до 3, которое задает соответствующую комбинацию "выворачивания" Float'а: [Спокойствие / Cool]

 
Posted by Савинцев Евгений (Участник № / Member № 611) on :
 
Cпасибо [fun / веселый] письмо уже получил.
[prey / молящийся]
[prey / молящийся] [prey / молящийся]
[prey / молящийся] [prey / молящийся] [prey / молящийся]
 
Posted by Савинцев Евгений (Участник № / Member № 611) on :
 
В общем все заработало.
Вспомнил про один вопрос может ли ТМ в сети Modbus выступать как ведомый узел?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Нет - у нас реализован только Master режим, как Slave TM работать не умеет.
 
Posted by aglks (Участник № / Member № 1010) on :
 
У меня аналогичная проблема с перекручиванием Float при связи TM 5.10 через Modbus с Rosemount 3095FB
Пришлите пожалуйста Modbus.dll -> aglks@front.ru
Заранее благодарен
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Для 5.10 одной Dll обойтись будет нельзя, потому как там по части ModBus еще и сам Drawserv был модифицирован. Вам надо скачать обновление 5.15.
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2