Конвертировать 4 байта в 32-битный Float в CAPL? - PullRequest
1 голос
/ 10 января 2020

Я хочу преобразовать сообщение CAN (4 байта) в значение с плавающей запятой.

Я читаю значение с датчика тока и преобразую его в 4 байта, отправляя их с помощью CAN Shield в вектор CANoe. В Программа Arduino, преобразовавшая значение с плавающей точкой в ​​байты и обратно, возможна с помощью Unions. В CAPL я не могу использовать союзы и указатели.

Код Arduino:

Также пробовал:

float test = (myFloat.bytes[3]<<24|myFloat.bytes[2]<<16|myFloat.bytes[1]<<8|myFloat.bytes[0]<<0);

Есть ли способ конвертировать это без используя объединение или указатель в CAPL / C? Любая встроенная функция в CAPL?

Заранее спасибо.

1 Ответ

1 голос
/ 13 января 2020

Для преобразования необработанного байта в значение с плавающей запятой вы можете использовать следующие встроенные функции:

float interpretAsFloat(dword x); // dword 4 bytes, IEEE signle precision float number
double interpretAsDouble(qword x); // qword 8 bytes, IEEE double precision float number

Примеры:

on key 'a'
{
 dword testDword=0x4048f5c3; // 3.14
 float testFloat;
 testFloat=interpretAsFloat(testDword);

 write("float  %f",testFloat);
 write("float times two  %f",testFloat*2);
}




on message ExampleCANMessage
{
  float lowAmps;

  lowAmps=interpretAsFloat(this.dword(2));// ex. your data is present on bytes 2...5 
  print("Voltage: %f ",lowAmps);
}
...