Показать сообщение отдельно
Старый 16.03.2015, 12:42   #10
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 191
Благодарил(а): 15 раз(а)
Поблагодарили: 666 раз(а) в 608 сообщениях
По умолчанию Ответ: 64-разрядное число

Цитата:
Сообщение от smakoveev Посмотреть сообщение
Это устройство: электросчетчик SE iEM3155.
В нем все данные, как то:напряжение, ток, частота передаются в нормальном для контроллера виде float32 с размером данных в int16=2.
И только значение полной энергии выдается в int64 c размером =4.
Мне посоветовали разбить данное число на четыре 16 битных числа. Но в конечном результате у меня никак не получилось совпадения показаний на экране счетчика и экране контроллера.
Время обновления информации на дисплее контроллера принципиального значения не имеет. Хоть один раз в несколько минут.
Контроллер используемый для этих целей: SMH2gi.
Кстати, попробуйте все 4 int16 отправить в часть программы, написанную на С++. В С++ есть 64-битная математика, там эти int16 сшить в один int64, далее делениями разбить этот int64 на множество int16, каждый из которых будет содержать один разряд исходного числа.

Ну например:

1) Приходит абракадабра в виде четырёх int16

2) Шмемами отправляем эту абраобразную кадабру в С++

3) Там двоично сшиваем кадабру в нормальный int64

4) Максимальное значение беззнакового int64: 18446744073709551615, т.е. 20 разрядов. Организуем цикл 0..19, в котором делением на 10 откусываем по одному младшему разряду и отправляем этот разряд в свой шмем. Всего 20 шмемов в формате int16

5) На экран эти шмемы выводим в линеечку, получив исходное int64 в десятичном виде

2Gi это переварит в реальном времени даже не поперхнувшись.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием