PDA

Просмотр полной версии : Вещественные числа



Александр86
21.02.2013, 10:09
Добрый день!
В ходе разработки очередной программы столкнулся с такой задачкой:
Привязываю ПЛК100 к теплосчетчикам, делаю запросы, получаю ответы. Все ответы приходят в байтовом массиве. Я выделяю нужные мне байты и перевожу в приемлемый для расчетов формат. Но есть несколько переменных, которые записаны в формате REAL(4 байта). Как оказалось перевести их в нужный формат из байтового массива не такая простая задача. Вручную делать просто - переводим в двоичные коды, выделяем знак, степень и мантиссу и все ок. Но как это организовать на контроллере, не могу придумать. Вообщем задачу можно сформулировать так:
Есть массив из четырех байт, например M[1]=66, M[2]=105, M[1]=22, M[2]=233 (байты записаны в десятичной форме). Этот массив надо перевести в вещественную переменную X типа REAL.
Может кто сталкивался с такой проблемкой, или есть такая процедура(X:=procedure(M[1],M[2],M[3],M[4])) в кодесисе, а я не в курсе.

kgsh82
21.02.2013, 15:11
dwtmp1: DWORD;
param_adr: POINTER TO DWORD;
param_adr2: POINTER TO REAL;
Level_difference: REAL;
Buffer: ARRAY[0..255] OF BYTE;


dwtmp1 := Buffer[1] + Buffer[0]*256 + Buffer[3]*256*256 + Buffer[2]*256*256*256;
param_adr := ADR(dwtmp1);
param_adr2 := param_adr;
Level_difference := param_adr2^;

Проверьте порядок байт

Александр86
21.02.2013, 16:34
Валенок, kgsh82 спасибо огромное! Все работает!!!