Всем Доброго времени суток.
Столкнулся с такой бедой как "Числа в формате PIC с плавающей запятой" при опросе по RS485 счетчика газа Ирвис К-300.
ИрвисК300.png
Прошу вашей помощи, может кто то сталкивался с такой проблемой ранее, как эти значения привести к понятным 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); } }




Ответить с цитированием