Савинцев Евгений
Forum Member / Участник форума
Участник № / Member № 611
отправлено / posted
Здравствуйте, у меня возникло затруднение При попытке считать данные из контроллера 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 (равенство с целой частью контрольного числа, скорее всего совпадение) Похоже я чего то не понимаю , помогите пожалуйста.
Сообщения / Posts 55 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
1) Насколько я понимаю - адрес 400001 в запросе должен иметь значение адреса на 1 меньше, т.е. - CH=0000. 2) Необходимо посмотреть в документации на ModBus этого контроллера в каком порядке он принимает и отвечает байтами Float-значения в пакетах ModBus. Дело в том, что практика показывает, что здесь бывают несоответсвия стандарту Modicon'овского ModBus'а - кто-то в формате Motorola, кто-то в формате Intel работает, а кто-то и вообще может в произвольном порядке байты в ответе по Float'ам выдавать.
Сообщения / Posts 17314 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Савинцев Евгений
Forum Member / Участник форума
Участник № / Member № 611
отправлено / posted
Спасибо. Я провел небольшой эксперимент С помощью 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. У кого не согласован порядок обработки байтов у ТМ или у контроллера. Еще раз спасибо.
Сообщения / Posts 55 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
У нас то как раз все правильно (согласно Modicon'овскому стандарту), а вот многие производители аппаратного обеспечения, к сожалению, этим пренебрегают. В последней библиотеке modbus.dll мы ввели возможность произвольного конфигурирования расположения байтов в ответе (приходится подстраиваться ). Модуль я выслал Вам по E-mail. Данная возможность будет работать как для ModBus RTU, так и TCP\IP. Для ModBus plus это работать не будет.
Для настройки нужной последовательности необходимо сделать следующее: В директории, где находится modbus.dll необходимо создать файл modbus.set, а в нем указать число от 0 до 3, которое задает соответствующую комбинацию "выворачивания" Float'а:
Савинцев Евгений
Forum Member / Участник форума
Участник № / Member № 611
отправлено / posted
В общем все заработало. Вспомнил про один вопрос может ли ТМ в сети Modbus выступать как ведомый узел?
Сообщения / Posts 55 | Из / From: Россия
| IP / IP: IP адрес / IP address |
aglks
Junior Member / Новичок
Участник № / Member № 1010
отправлено / posted
У меня аналогичная проблема с перекручиванием Float при связи TM 5.10 через Modbus с Rosemount 3095FB Пришлите пожалуйста Modbus.dll -> aglks@front.ru Заранее благодарен
Сообщения / Posts 1 | Из / From: Украина
| IP / IP: IP адрес / IP address |
отправлено / posted
Для 5.10 одной Dll обойтись будет нельзя, потому как там по части ModBus еще и сам Drawserv был модифицирован. Вам надо скачать обновление 5.15.
Сообщения / Posts 17314 | Из / From: Россия
| IP / IP: IP адрес / IP address |