Цитата:
Сообщение от 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 это переварит в реальном времени даже не поперхнувшись.