Расшифровать формат числа
- Войдите на сайт для отправки комментариев
Пнд, 15/02/2021 - 08:54
Привет хейтеры- крутые математики! При работе с прибором, он мне присылает по UART числовые значения:
95 01 00 60 FE 32 Это должно быть число 1466316,0000019 десятичное
86 0A D7 A3 70 6D Это должно быть число 59,49 десятичное
94 00 00 80 19 3A Это должно быть число 762264,0
НЕХ значения смотрю через сканер СОМ-порта, а десятичные в фирменной проге от железки. Вопрос- что это за формат чисел и как его реализовать?
З.Ы :IEEE 754. не предлагать, это не он
Он тебе что угодно может присылать.
К автору прибора за протоколом дуй.
В том числе и зашифрованные данные.
К автору прибора за протоколом дуй.
И таки да, это как то по кривому закодированный 754.
Проверил в калькуляторе, биты совпадают последовательность не очень
С bigendian при 762264.0 выдает 493А1980,
При littleendian 80193A49
Протокол производитель не скрывает, это уже расшифрованные данные. Что то стандартное : 95 01 00 60 FE 32 0E 02 03 19 19 09 04 02 21 // Активная мощность по фазе 2 [Вт]: 1466316,0000019 (момент '04.02.21 19:19:09') Штамп времени же не закрывают. но всего 6 байт данных
97 00 00 30 F3 0D 0E 02 01 19 19 09 04 02 21 // Активная мощность по сумме фаз [Вт]: 4651416,0 (момент '04.02.21 19:19:09')
05 80 00 E0 09 41 0E 02 02 19 19 09 04 02 21 // Активная мощность по фазе 1 [Вт]: 1581372,0 (момент '04.02.21 19:19:09')
95 01 00 60 FE 32 0E 02 03 19 19 09 04 02 21 // Активная мощность по фазе 2 [Вт]: 1466316,0000019 (момент '04.02.21 19:19:09')
15 00 00 80 C4 C3 0E 02 04 19 19 09 04 02 21 // Активная мощность по фазе 3 [Вт]: 1603728,0 (момент '04.02.21 19:19:09')
96 00 00 00 B0 11 0E 02 05 19 19 09 04 02 21 // Реактивная мощность по сумме фаз [Вар]: 2386944,0 (момент '04.02.21 19:19:09')
94 00 00 40 11 52 0E 02 06 19 19 09 04 02 21 // Реактивная мощность по фазе 1 [Вар]: 860436,0 (момент '04.02.21 19:19:09')
04 81 00 00 0A 51 0E 02 07 19 19 09 04 02 21 // Реактивная мощность по фазе 2 [Вар]: 856224,000001 (момент '04.02.21 19:19:09')
94 00 00 80 19 3A 0E 02 08 19 19 09 04 02 21 // Реактивная мощность по фазе 3 [Вар]: 762264,0 (момент '04.02.21 19:19:09')
97 00 00 48 8B 21 0E 02 09 19 19 09 04 02 21 // Полная мощность по сумме фаз [ВА]: 5293476,0 (момент '04.02.21 19:19:09')
95 00 00 40 71 5E 0E 02 0A 19 19 09 04 02 21 // Полная мощность по фазе 1 [ВА]: 1822248,0 (момент '04.02.21 19:19:09')
95 00 00 00 FC 4E 0E 02 0B 19 19 09 04 02 21 // Полная мощность по фазе 2 [ВА]: 1703808,0 (момент '04.02.21 19:19:09')
95 00 00 C0 F2 53 0E 02 0C 19 19 09 04 02 21 // Полная мощность по фазе 3 [ВА]: 1736280,0 (момент '04.02.21 19:19:09')
86 0A D7 A3 70 6D 0E 02 0D 19 19 09 04 02 21 // Напряжение на фазе 1 [В]: 59,36 (момент '04.02.21 19:19:09')
86 29 DC 8F 42 6D 0E 02 0E 19 19 09 04 02 21 // Напряжение на фазе 2 [В]: 59,44 (момент '04.02.21 19:19:09')
86 5C 8F C2 F5 6D 0E 02 0F 19 19 09 04 02 21 // Напряжение на фазе 3 [В]: 59,49 (момент '04.02.21 19:19:09')
80 2D 43 1C EB 52 0E 02 10 19 19 09 04 02 21 // Ток в фазе 1 [А]: 0,8239 (момент '04.02.21 19:19:09')
80 EE 0D BE 30 49 0E 02 11 19 19 09 04 02 21 // Ток в фазе 2 [А]: 0,7859 (момент '04.02.21 19:19:09')
80 B0 72 68 91 4D 0E 02 12 19 19 09 04 02 21 // Ток в фазе 3 [А]: 0,803 (момент '04.02.21 19:19:09')
80 7B 14 AE 47 61 0E 02 13 19 19 09 04 02 // Общий коэффициент мощности: 0,88 (момент '04.02.21 19:19:09')
А в прошлой теме было
Что-то больно много ограничений :-(
8 бит экспонента, 40 бит мантисса. Порядок байт - обратный от написанного. Возможно 1 бит и там и там инвертирован - не точно, так как в приведенных данных много ошибок при сканировании линии. К примеру экспонента 20 видна и как 0x94 (0x14 с инвертированным 1-м битом, и как 04, 21 как 0x95,0x15,0x05 ;))) - и это точно не значащие особенности формата, а ошибки распознавания при приеме).
НО, скорее всего так: 1 байт экспонента, 40 бит мантисса, порядок байт в мантиссе - обратный, первые биты и там и там - знак, знак скорее всего в инверсии.
Нужно проверять вот именно то, что я написал на очень большом объеме данных и желательно "сканер компорта" ;))) - поднастроить.
05 80 00 E0 09 41 0E 02 02 19 19 09 04 02 21 // Активная мощность по фазе 1 [Вт]: 1581372,0 (момент '04.02.21 19:19:09')
95 01 00 60 FE 32 0E 02 03 19 19 09 04 02 21 // Активная мощность по фазе 2 [Вт]: 1466316,0000019 (момент '04.02.21 19:19:09')
15 00 00 80 C4 C3 0E 02 04 19 19 09 04 02 21 // Активная мощность по фазе 3 [Вт]: 1603728,0 (момент '04.02.21 19:19:09')
во всех этих числах экспонента - 21 (=0x15). Повторю - это ошибки сканера.
к примеру строка 2:
(0xb2fe600001/2**40) * 2**0x15 = 1466316.0000019073 () (Я инвертировал первые биты мантиссы и экспоненты).
==================================================
Адрес для бутылки рома сообщу в телегу. Моя телега @wdrakula, как не сложно догадаться! ;))
Ром - не Баккарди из Пятерочки!!! На Zaсapa не настаиваю, хоть и люблю, но не хуже Роберта Ватсона (он есть в Отдохни за разумные пару тысяч)
Всё, разобрался!!!!
Это древний как говно мамонта REAL48. Был ещё во времена MS-DOS, сейчас вроде на Дельфи остался (на нем скорее всего и писали софт для железки). Real48 2.9e-39..1.7e38 знаковый, 6 байт 11..12 фундаментальный () И ещё "Конвертация из устаревшего типа Real48 в Double и обратно" Экспонента= 129, 1 бит знака
80 7B 14 AE 47 61 => 61 47 AE 14 7B 80 (80= 128 128-129=-1 2^-1 = 0.5 ) 61 47 AE 14 7B= 417 814 418 555/ 549 755 813 888 =0.76+1= 1.76*0.5 =0.88
80 B0 72 68 91 4D => 4D 91 68 72 B0 80 (80= 128 128-129=-1 2^-1 = 0.5 ) 4D 91 68 72 B0= 333 152 023 216/ 549 755 813 888 =0,606+1 =0.803
7C_CD_CC_CC_CC_4C = 0111_1100_1100_1101_1100_1100_1100_1100_1100_1100_0100_1100 =0.05
Вот так считается:
4C_CC_CC_CC_CD_7C 7C= 124 124 - 129(смещенный порядок (e-129) =-5: 2^-5 = 0.03125
|______________| =329 853 488 333/ 2^39 (39 бит мантисса) = 0,6 +1(в мантиссе не указывается 1, но есть) =1,06 *0,03125 =0,05
Всем спасибо, что подтолкнули в правильном направлении. Сканер СОМ порта не ошибается ;-)
Всем спасибо, что подтолкнули в правильном направлении.
Ром для графа решили зажать? :-(
А за что? У него: "... это ошибки сканера."; мантиса не 40 бит ,а 39 бит (1 бит знак) , а самое главное экспонента от -129 до 129 однобайтовая, а не 0-256, это и решает всё. И нюанс с прибавлением единицы ещё...
В шапку бы написать про REAL48 , а то редкая хрень
самое главное экспонента от -129 до 129 однобайтовая, а не 0-256, это и решает всё.
а бывает флоат с беззнаковой экспонентой? серьезно? :)
Признайтесь, что вы просто не поняли обюьяснений дракулы..
Тогда тебя не затруднит применить твое преобразование к этой, твоей же, строчке:
15 00 00 80 C4 C3 0E 02 04 19 19 09 04 02 21 // Активная мощность по фазе 3 [Вт]: 1603728,0 (момент '04.02.21 19:19:09')
-----------------------------------------
Ром для графа решили зажать? :-(
Женя! А ты сомневался? ;)) Я же жизнь свою, после МехМата в 1991ом, начал тоже в Академическом институте. Присвоение чужих результатов - это основа совковой научной деятельности! Кто бы сомневался.
У него: "... это ошибки сканера."; мантиса не 40 бит ,а 39 бит (1 бит знак) , а самое главное экспонента от -129 до 129 однобайтовая, а не 0-256, это и решает всё.
давайте сравним, что ли...
Вот у Дракулы:
>>>1 байт экспонента, 40 бит мантисса, порядок байт в мантиссе - обратный, первые биты и там и там - знак,
Так что это вы, дорогой Joog, просто-напросто читать не умеете. И это решает все.
8 бит экспонента, 40 бит мантисса. Порядок байт - обратный от написанного. Возможно 1 бит и там и там инвертирован - не точно, так как в приведенных данных много ошибок при сканировании линии. К примеру экспонента 20 видна и как 0x94 (0x14 с инвертированным 1-м битом, и как 04, 21 как 0x95,0x15,0x05 ;))) - и это точно не значащие особенности формата, а ошибки распознавания при приеме).
НО, скорее всего так: 1 байт экспонента, 40 бит мантисса, порядок байт в мантиссе - обратный, первые биты и там и там - знак, знак скорее всего в инверсии.
во всех этих числах экспонента - 21 (=0x15). Повторю - это ошибки сканера.
к примеру строка 2:
(0xb2fe600001/2**40) * 2**0x15 = 1466316.0000019073 () (Я инвертировал первые биты мантиссы и экспоненты).
Это у вас так в МГУ в 91 году было принято: если что то не нравится- подгонять результат? И где же тут правильный ответ? А правильный ответ дал я сам, когда нашел описание формата и расписал как производятся вычисления.
...бла-бла-бла... (много глупостей)
1.так я повторю вопрос: примени свои вычисления к своей строчке, указанной постом выше.
2. у тебя возникли сомнения что 21 десятичное равно 15 шестнадцатеричное? ;))))) Соболезную! Можно еще раз спросить про наименование ВУЗа, который тебя выпустил в жизнь? Тут уже энтомологический интерес! ;)))
Дракула, расслабся, что с него взять
у него в байте значения от -129 до 129 помещаются...
самое главное экспонента от -129 до 129 однобайтовая
В шапку бы написать ... а то редкая хрень
это верно... редкая :)
PS Просто на будущий раз надо быть умнее. Если человек в первом же треде в ответ на помощь пишет "что за гаденький форум" - нафига ему отвечать на следующий вопрос?
Ну Joog же не пишет, сколько в его байте битов.