![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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;