PDA

Просмотр полной версии : проблема декодирования параметров прибора МВ110-224.4ТД по протоколу ModBus RTU



Roman87
28.04.2012, 07:16
Привет всем!
У меня такая проблема. Не могу понять, почему прибор МВ110-224.4ТД на функцию 03, протокола ModBus RTU, при чтении параметра v.Max (максимальное значение физической величины) выдает мне неверные данные. А именно, я посылаю в прибор запрос 10 03 00 1D 00 02 57 4C, что значит - считать значения регистров с адресом 1D(hex) и 1E(hex). Я заранее знаю, что это значение должно ровняться 2000.000(float32), как я задавал в конфигураторе, однако я получил следующий пакет: 10 03 04 44 FA 00 00 CF F3. 44FA(hex) - это 17658(dec), а 2000(dec) - 7D0(hex). Как видите, полное несоответствие
И так происходит со всеми двух регистровыми параметрами данного прибора! Подскажите, пожалуйста, в чем тут дело!?
Пытался работать с этим прибором через библиотеку owen_io.dll - и тут неудача! Все функции чтения вещественного параметра заканчиваются с ошибкой -104. То есть прибор обрабатывает запрос и возвращает уведомление о неверном формате команды. А вот конфигуратор работает нормально и выдает значения всех параметров верно. Что здесь не так?

Roman87
29.04.2012, 17:24
И? Я знаю - float32! Только это мне ничего не говорит. Мне бы хотелось узнать как дешифрировать эти 4-е байта (0000FA44), алгоритм или хотя бы пример. То что готовые программы это могут я знаю, а мне это нужно реализовать в своей.

Roman87
29.04.2012, 17:28
0000FA44 - где тут мантисса, основание, порядок??? Как это расшифровать??? Люди добрые, помогите!!!!!:confused:

Roman87
29.04.2012, 17:35
Так я учитываю все 4-е байта! Вы с С++ или Delphi знакомы? Как hex формат перевести во float?

Roman87
29.04.2012, 17:38
Чтобы поменять байты местами указателями пользоваться не обязательно! Почему указателями?

Roman87
29.04.2012, 17:44
Нашел:D http://www.sql.ru/forum/actualthread.aspx?tid=355084

Roman87
29.04.2012, 18:01
С сокетами TCP/IP (как ходят пакеты в сетях ) и с некоторыми полевыми протоколами (HART, CAN Open, ModBus) я знаком не понаслышке, тем более, что компонент для RS232 и компонент ModBus RTU я писал собственными руками еще в 2009 году. В том то и проблема, что у меня не язык функциональных блоков, а объектный язык. Поэтому, чтобы мне расшифровать число нужно не только знать расположение байт, ну и сам механизм дешифрации их hex во float32.