Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

RS-232 возвращает данные в формате float. Как перевести?


Priest ©   (2009-08-21 13:03:00) 

Есть устройство. И мой компонент. В него приходит в виде строки данные в формате флоат 4 байта. Как перевести в обычное представление?


Kolan   (2009-08-21 15:55:00) [1]

Кстати в два можно проще, если испльзовать Result вместо TemVal.


Priest   (2009-08-21 15:37:00) [2]

Всем спасибо за помощь. Код из [2]  работает.


Kolan   (2009-08-21 13:29:00) [3]

Вам надо узнать у разработчика весов что эти 4 байта значат и как их интерпретировать.


Priest   (2009-08-21 13:27:00) [4]

Спасибо всем за помощь. счас буду пробовать


Kolan   (2009-08-21 13:19:00) [5]

Наверно вам приходит 8 шестнадцатеричных символов? Тогда превратите их сначала в байты, а потом см.  [2]


Медвежонок Пятачок   (2009-08-21 13:13:00) [6]

Ответ: 4 байта float

ну и где здесь якобы строка?


Priest   (2009-08-21 13:12:00) [7]

Вот у меня что есть из инструкции


Формат команды (запроса):
1  2  3 4
W 0 X 1     - всё в символьном виде

1- символ синхронизации (символ “W”)
2- номер терминала (“0…9”, по умолчанию “0”)
3- команда
4- параметр команды (“1…9 : ; <”)

Формат ответа:
4 байта данных

Основные команды
G – считывание показаний весов (с учётом дискретности индикации)
Вариант запроса : W0GX
Ответ: 4 байта float


Priest   (2009-08-21 13:09:00) [8]

не то. на весах показан вес например 20.99 а мне возвращается в шестнадцатиричной форме AB CD AA CC. Т.е. у меня 4 байта, но когда возвращается строка, то выглядит как "мусор". Как перевести?


MBo   (2009-08-21 13:07:00) [9]

"флоат 4 байта" называется в Дельфи single. Или что-то другое имеется в виду?


Kolan   (2009-08-21 13:07:00) [10]

Вам надо узнать как этими 4 байтами кодируют число, иначе у вас ничего не получится.

Функция перекодировки может быть примерно такой:

procedure ConvertBytesToFloat(HighByte1, HighByte2,
 LowByte1, LowByte2: Byte; var Value: Single);
var
 TempArr: array[0..3] of Byte;
   TemVal: Single absolute TempArr;
begin
 TemVal := 0;
 TempArr[0] := HighByte1;
 TempArr[1] := HighByte2;
 TempArr[2] := LowByte1;
 TempArr[3] := LowByte2;
 Value := TemVal;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо