Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
12.12.2017, 07:41:22
 
Начало Помощь Поиск Войти Регистрация
Новости: Форум обновлен

+  Форум АО "ВЗЛЕТ"
|-+  Приборы ЗАО "Взлет"
| |-+  Отдел программистов
| | |-+  Не соответствие массы в архиве
0 Пользователей и 1 Гость смотрят эту тему. « предыдущая тема следующая тема »
Страниц: [1] Печать
Автор Тема: Не соответствие массы в архиве  (Прочитано 1339 раз)
rudeboy
Разбирается
*

Харизма: 0
Офлайн Офлайн

Сообщений: 2


« : 15.12.2016, 10:01:45 »

Добрый день, считываением архивов с теплосчетчика  Взлет ТСРВ-023

Столкнулся с тем что массы при считывании из архива не соответствуют массам отображаемым на дисплее вычислителя.

Считываю архивную запись суточного архива за 15:59:59 06-12-2016

58 46 E0 7F 40 E5 19 95 40 A0 E4 37 40 08 6A BC 00 00 0E 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C FD 00 00 00 00 00 02 00 00 40 A2 57 29 40 A1 95 ED 3C C1 3C 00 00 00 0E 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 A1 B4 52 40 A1 96 35 3B 70 E8 00 00 00 0E 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 DB 48 01 F4 00 32 00 00 00 00 00 00 47 BB 79 B9 20 B7 00 50 06 B8 A7 3D 00 00 47 BB B6 EF 0C 02 00 32 06 B9 29 CE 00 00 41 3A 2E F1 00 00 00 5A 00 05 AD 2A 00 00 41 3A 22 0C 00 00 00 32 00 05 AD 2A 00 00 41 3A 25 24 00 00 00 5A 00 05 AD 36 00 00 41 3A 20 30 00 00 00 32 00 05 AD 2C 00 00 00 00 00 00 00 00 00 00 2A 6C AF F1 7F 01 72 28

Масса в канале 1, по смещению 150: 47 BB 79 B9
Переворачиваем порядок байт, переводим в unsigned long: 1203468729
Переводим в float: 95987.4453125

На дисплее вычислителя: 95987.43 т

Интересно как из 95987.4453125 получается 95987.43, что это за интересное округление или я чего то не понимаю?
Может представиели Взлет смогут прояснить ситуацию


* DSC_0003.JPG (133.18 Кб, 800x450 - просмотрено 151 раз.)
Записан
dimoniche
Global Moderator
*****

Харизма: 14
Офлайн Офлайн

Сообщений: 238


« Ответ #1 : 15.12.2016, 10:16:28 »

Интересно как из 95987.4453125 получается 95987.43, что это за интересное округление или я чего то не понимаю?

Добрый день.

Для хранения данных в архивах используется стандартный формат с плавающей точкой одинарной точности (IEEE754). Данный формат имеет только 6-7 значащих чисел, которые передаются без погрешности, значения всех остальных разрядов не гарантируются. Например, число 95987.4453125 может стать 95987.43, т.к. значение седьмого разряда не гарантируется форматом. Более того все арифметические операции в этом формате неассоциативны: (10^20+1) -10^20=0 ≠ (10^20-10^20) +1=1.

С 23 прибором для исключения таких погрешностей поможет сброс интеграторов или ориентироваться только на 6 значащих цифр.
Это касается только отображения на экране - внутри прибора расчеты происходят с числами двойной точности и таких погрешностей нет.

Записан
rudeboy
Разбирается
*

Харизма: 0
Офлайн Офлайн

Сообщений: 2


« Ответ #2 : 15.12.2016, 11:20:14 »

То есть вычислитель ведет свой внутренний архив с интеграторами в виде чисел двойной точности, и оттуда же показывает значения на табло, а через RS порта отдает архивные записи с числами одинарной точности?
Все это выглядит крайне странно.

Кстати в программе "Отчет ТСРВ-02X" тоже есть несоответствие интеграторов дисплею вычислителя.
Таким образом есть три представления данных: дисплей, "Отчет ТСРВ-02X", считывание из моего ПО, и везде числа отличаются, это просто кошмар какой то.

В идеале мне нужно чтобы мои числа были такими же как в программе "Отчет ТСРВ-02X", но какой там используется алгоритм округления не могу понять.
Записан
dimoniche
Global Moderator
*****

Харизма: 14
Офлайн Офлайн

Сообщений: 238


« Ответ #3 : 15.12.2016, 11:44:00 »

Вычислитель не ведет свой внутренний архив, он наращивает интеграторы, а они хранятся с двойной точностью. Интеграторы тоже кстати есть на экране прибора в текущих данных. В архивах пришлось хранить с одинарной точностью из-за ограничений размера памяти прибора (прибор создавался больше 12 лет назад и память тогда была дорогой).

Там нет округления - это все издержки формата одинарной точности. В формате IEEE754 число 95987.4453125 не представить точно - не хватает разрядности. Как я и писал ниже формат не гарантирует значения после 6 цифр, там могут быть даже случайные числа, зависящие от применяемых библиотек и от вычислительных платформ.

Чтобы ваши числа были такими же как в программе "Отчет ТСРВ-02X", нужно начать копить интеграторы сначала, так что бы значения интеграторов умещались в 6 цифр.

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


Записан
Страниц: [1] Печать 
« предыдущая тема следующая тема »
Перейти в:  


Войти

© 1990—2016, АО «Взлет».
Все права защищены.
Контактная информация
Powered by SMF 1.1.13 | SMF © 2006-2011, Simple Machines LLC
Материалы, размещенные на сайте, охраняются законодательством об авторском праве. Перепечатка материалов допускается только со ссылкой на сайт.