Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: Формат FloatInv

  1. #1
    Пользователь Аватар для Friencis
    Регистрация
    15.11.2010
    Адрес
    г. Бийск, инженер
    Сообщений
    23

    По умолчанию Формат FloatInv

    Здравствуйте!

    Подскажите, как читать данные формата FloatInv прибора МСД-100? Связь ПК - МСД-100 по протоколу Modbus RTU. На запрос прибор отвечает, но как интерпретировать полученные байты не знаю.

    Спасибо.

  2. #2
    Пользователь Аватар для Friencis
    Регистрация
    15.11.2010
    Адрес
    г. Бийск, инженер
    Сообщений
    23

    По умолчанию

    Здравствуйте!

    Уточняю, что я делаю и в чем проблема.
    Прибор МСД-100 настроен как надо. Мастером. Формат ячеек для считывания компьютером FloatInv. В ячейках содержатся значения температур и уставок с приборов Овен ТРМ201 и ТРМ202 с десятыми долями градуса.
    Далее, я пишу программу на Delphi, которая считывает значения этих ячеек по протоколу Modbus. Это необходимо, поскольку по этому же интерфейсу RS-485 опрашиваются другие приборы по протоколу Modbus. Код команды запроса - "4". Количество запрашиваемых переменных допустим 60. CRC считаю табличным методом. В ответ получаю: адрес прибора МСД-100 (200), код команды (4), количество переданных байт (120), а дальше пары типа 255-255, 0-0, 65-120, 65-144 и в конце CRC. Интерпретировать пары байт как Знаковое число с односторонней десятичной точкой, которое считается : (-1)^S * 10^(-Exponent) * Mantissa не получается. Как ещё расшифровывать формат FloatInv я не знаю, поэтому и спрашиваю. Конфигуратор отображает так как надо.
    Как работать с FloatInv?

    Спасибо.
    Последний раз редактировалось Friencis; 22.08.2012 в 07:17. Причина: Уточнение

  3. #3
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Не нужно рассматривать эти байты по отдельности. Просто обращайтесь к ним через указатель как к float. Т.к. Дельфи я не знаю, то приведу пример на Си:
    Код:
    unsigned char raw[4] = { 0xDA, 0x0F, 0x49, 0x40 };
    float f = *((float*)raw);
    // f = 3.141593
    То же самое для двухбайтовых регистров Modbus:
    Код:
    unsigned short raw[4] = { 0x0FDA, 0x4049 };
    float f = *((float*)raw);
    Может оказаться, что байты стоят не в том порядке.

    Поиграться с форматом IEEE754 можно в онлайне: http://www.h-schmidt.net/FloatConverter/IEEE754.html
    Последний раз редактировалось Yegor; 22.08.2012 в 07:47.

  4. #4
    Пользователь Аватар для Friencis
    Регистрация
    15.11.2010
    Адрес
    г. Бийск, инженер
    Сообщений
    23

    По умолчанию

    Кто-нибудь, просто скажите, что из себя представляет формат FloatInv, и всё!

    Спасибо.

  5. #5
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    То же, что Single в этом вашем Дельфи. Ох уж эти дельфийщики... Не надо ничего парсить-интерпретировать-пересчитывать — просто берёте четыре байта и ставите их по адресу переменой типа Single.

  6. #6
    Пользователь Аватар для Friencis
    Регистрация
    15.11.2010
    Адрес
    г. Бийск, инженер
    Сообщений
    23

    По умолчанию

    Здравствуйте!

    Спасибо, Yegor, за советы. Попробовал через указатель на приемный буфер с разными значениями смещения. Всё равно фигня какая-то. А число 3,14 нормально получается из Ваших чисел (0xDA, 0x0F, 0x49, 0x40). Может правда, байты в слове переставлены? А возвращаются именно слова, хотя тип single 4-х байтовый.

  7. #7
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,248

    По умолчанию

    что значит может правда, в вики прочитайте про модбас, при передаче ответа в области данных порядок байт меняется.

  8. #8
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Начните с одной переменной, а не с 60. Так как флоат здесь 32-битный, а модбас-регистры по 16, то одна переменная передётся двумя регистрами. Вот и пробуйте считывать два регистра в один Single. В руководстве к МСД-100 я вижу помимо FloatInv ещё и просто Float — вероятно, этим можно воспользоваться.

  9. #9
    Пользователь Аватар для Friencis
    Регистрация
    15.11.2010
    Адрес
    г. Бийск, инженер
    Сообщений
    23

    По умолчанию

    Уже попробовал в обратной последовательности, всё равно ерунда. Накропал тестовую программульку и там перебираются все возможные варианты. Ни один не похож на правду.
    И почему бы производителю-разработчику просто не описать этот тип данных, как STORED_DOT, например, с которой я раньше работал?..

  10. #10
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    И почему бы производителю-разработчику просто не описать этот тип данных, как STORED_DOT, например
    Кто разработал формат STORED_DOT? А кто разработал формат IEEE754? Ответьте на эти вопросы, и вам станет ясно, что «разработчик просто описал этот тип данных» ещё в прошлом веке.

    Давайте сюда несколько пакетов и расскажите, что вы ожидаете увидеть. Возможно, я определю, какие требуются перестановки.
    Последний раз редактировалось Yegor; 24.08.2012 в 08:50.

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Формат вывода сообщений
    от Salvafion в разделе Master SCADA 3
    Ответов: 5
    Последнее сообщение: 20.12.2013, 13:19
  2. ИП 320 формат данных
    от Alex12345 в разделе Панели оператора (HMI)
    Ответов: 4
    Последнее сообщение: 11.07.2012, 16:34
  3. Формат времени
    от KTV в разделе Master SCADA 3
    Ответов: 4
    Последнее сообщение: 24.03.2012, 11:35
  4. ФОрмат файлов OPM-2
    от незарегистрированный в разделе OWEN Proces Manager
    Ответов: 19
    Последнее сообщение: 31.03.2009, 10:50

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •