Всем Доброго времени суток.
Столкнулся с такой бедой как "Числа в формате PIC с плавающей запятой" при опросе по RS485 счетчика газа Ирвис К-300.
Вложение 88112
Прошу вашей помощи, может кто то сталкивался с такой проблемой ранее, как эти значения привести к понятным REAL?
В сети нашел только пример на языке С, но я в нем вообще не понимаю, что в нем происходит, может у кого есть пример на ST?
Код:class Program
{
static void Main(string[] args)
{
byte[] send = new byte[3] {0x65, 0x29, 0x8A};
Console.WriteLine(PICtoIARfloat(send));
Console.ReadLine();
}
static float PICtoIARfloat(byte[] PICfloat)
{
byte[] bt = new byte[4];
//Первый байт float IAR
bt[0] = 0x00;
//Второй байт
bt[1] = PICfloat[0];
//Третий байт
bt[2] = PICfloat[1];
bt[2] &= 0x7f; //Сброс знака
if ((PICfloat[2] & 0x01) > 0)
{
//Если мл.бит установлен
bt[2] |= 0x80;
}
//Четвертый байт
bt[3] = PICfloat[2];
bt[3] >>= 1;
if ((PICfloat[1] & 0x80)>0)
{
//Если знак отрицательный
bt[3] |= 0x80;
}
else
{
bt[3] &= 0x7F;
}
return ToFloat(bt);
}
static float ToFloat(byte[] input)
{
return BitConverter.ToSingle(input, 0);
}
}

