Здравствуйте, у меня возникло затруднение При попытке считать данные из контроллера 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 (равенство с целой частью контрольного числа, скорее всего совпадение) Похоже я чего то не понимаю , помогите пожалуйста.
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 :
Спасибо. Я провел небольшой эксперимент С помощью 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. У кого не согласован порядок обработки байтов у ТМ или у контроллера. Еще раз спасибо.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
У нас то как раз все правильно (согласно Modicon'овскому стандарту), а вот многие производители аппаратного обеспечения, к сожалению, этим пренебрегают. В последней библиотеке modbus.dll мы ввели возможность произвольного конфигурирования расположения байтов в ответе (приходится подстраиваться ). Модуль я выслал Вам по E-mail. Данная возможность будет работать как для ModBus RTU, так и TCP\IP. Для ModBus plus это работать не будет.
Для настройки нужной последовательности необходимо сделать следующее: В директории, где находится modbus.dll необходимо создать файл modbus.set, а в нем указать число от 0 до 3, которое задает соответствующую комбинацию "выворачивания" Float'а:
0 0-3 1-2 2-1 3-0
1 0-0 1-1 2-2 3-3
2 0-1 1-0 2-3 3-2
3 0-2 1-3 2-0 3-1
Posted by Савинцев Евгений (Участник № / Member № 611) on :
Cпасибо письмо уже получил.
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.