Расшифровать формат числа

Joog
Offline
Зарегистрирован: 03.01.2020

Привет хейтеры- крутые математики! При работе с прибором, он мне присылает по 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

НЕХ значения смотрю через сканер СОМ-порта, а десятичные в фирменной проге от железки. Вопрос- что это за формат чисел и как его реализовать?

Joog
Offline
Зарегистрирован: 03.01.2020

З.Ы :IEEE 754. не предлагать, это не он

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Он тебе что угодно может присылать.
К автору прибора за протоколом дуй.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Kakmyc пишет:
Он тебе что угодно может присылать.
В том числе и зашифрованные данные.
К автору прибора за протоколом дуй.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

И таки да, это как то по кривому закодированный 754.
Проверил в калькуляторе, биты совпадают последовательность не очень

С bigendian при 762264.0 выдает 493А1980,
При littleendian 80193A49

Joog
Offline
Зарегистрирован: 03.01.2020

Протокол производитель не скрывает, это уже расшифрованные данные. Что то стандартное : 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')

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Joog пишет:
IEEE 754. не предлагать

А в прошлой теме было 

Joog пишет:
Ряд Тейлора не предлагать.

Что-то больно много ограничений :-(

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

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  не настаиваю, хоть и люблю, но не хуже Роберта Ватсона (он есть в Отдохни за разумные пару тысяч)

 

Joog
Offline
Зарегистрирован: 03.01.2020

Всё, разобрался!!!!
Это древний как говно мамонта  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

Всем спасибо, что подтолкнули в правильном направлении. Сканер СОМ порта не ошибается ;-)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Joog пишет:

Всем спасибо, что подтолкнули в правильном направлении. 

Ром для графа решили зажать? :-(

Joog
Offline
Зарегистрирован: 03.01.2020

А за что? У него: "... это ошибки сканера."; мантиса не 40 бит ,а  39 бит (1 бит знак) ,  а самое главное экспонента от -129 до 129 однобайтовая, а не 0-256, это и решает всё. И нюанс с прибавлением единицы ещё...

В шапку бы написать про REAL48 , а то редкая хрень

b707
Offline
Зарегистрирован: 26.05.2017

Joog пишет:

 самое главное экспонента от -129 до 129 однобайтовая, а не 0-256, это и решает всё.

а бывает флоат с беззнаковой экспонентой? серьезно? :)

Признайтесь, что вы просто не поняли обюьяснений дракулы..

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Joog пишет:
Сканер СОМ порта не ошибается ;-)

Тогда тебя не затруднит применить твое преобразование к этой, твоей же, строчке:

Joog пишет:

 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ом, начал тоже в Академическом институте. Присвоение чужих результатов - это основа совковой научной деятельности! Кто бы сомневался.

b707
Offline
Зарегистрирован: 26.05.2017

Joog пишет:

У него: "... это ошибки сканера."; мантиса не 40 бит ,а  39 бит (1 бит знак) ,  а самое главное экспонента от -129 до 129 однобайтовая, а не 0-256, это и решает всё.

давайте сравним, что ли...

Вот у Дракулы:

>>>1 байт экспонента, 40 бит мантисса, порядок байт в мантиссе - обратный, первые биты и там и там  - знак,

Так что это вы, дорогой Joog,  просто-напросто читать не умеете. И это решает все.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Joog пишет:
А за что?
Понятно.

Joog
Offline
Зарегистрирован: 03.01.2020

wdrakula пишет:

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 году было принято: если что то не нравится- подгонять результат? И где же тут правильный ответ? А правильный ответ дал я сам, когда нашел описание формата и расписал как производятся вычисления.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Joog пишет:

...бла-бла-бла... (много глупостей)

1.так я повторю вопрос: примени свои вычисления  к своей строчке, указанной постом выше.

2. у тебя возникли сомнения что 21 десятичное равно 15 шестнадцатеричное? ;))))) Соболезную! Можно еще раз спросить про наименование ВУЗа, который тебя выпустил в жизнь? Тут уже энтомологический интерес! ;)))

b707
Offline
Зарегистрирован: 26.05.2017

Дракула, расслабся, что с него взять

у него в байте значения от -129 до 129 помещаются...

Joog пишет:

самое главное экспонента от -129 до 129 однобайтовая

Цитата:

В шапку бы написать ... а то редкая хрень

это верно... редкая :)

 

PS Просто на будущий раз надо быть умнее. Если человек в первом же треде в ответ на помощь пишет "что за гаденький форум" - нафига ему отвечать на следующий вопрос?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Joog пишет:
от -129 до 129 однобайтовая, а не 0-256, это и решает всё.
Так и есть!

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ну Joog же не пишет, сколько в его байте битов.