Форум TRACE MODE: техническая поддержка
Тема закрыта / Topic Closed  Тема закрыта / Topic Closed
Послать новую тему / Post New Topic  
Тема закрыта / Topic Closed  Тема закрыта / Topic Closed
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ОТКРЫТЫЕ ФОРУМЫ / OPEN FORUMS » TRACE MODE 6 бесплатная версия / TRACE MODE 6 Free version » Запись в БД MS Access

   
Автор / Author Тема / Topic: Запись в БД MS Access
petrov_npa02
Junior Member / Новичок
Участник № / Member № 6640


Icon 1 отправлено / posted      Профиль для / Profile for petrov_npa02           Редактировать/удалить сообщение / Edit/Delete Post 
Здравствуйте!

TRACE MODE базовая версия 6.10.1. Пытаюсь сохранить СПАД в таблице БД Access. Все прекрасно записывается, но реальное значение записывается только в "семицифровом" представлении, то есть в 6 цифр и разделитель.

То есть:
1.23456 пишется как 1.23456
11.23456 пишется как 11.2346
1111.231079 пишется как 1111.23
11111.234375 пишется как 11111.2

с целыми числами еще интересней:
123456 пишется как 123456
1234567 пишется как 1234570
12345678 пишется как 12345700


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

Как лечить?

PS. Профессиональная версия будет приобретена сразу, как только согласуем количество каналов.

Сообщения / Posts 8 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post 
При перенаправлении СПАД в БД значения всех аналоговых величин передаются в диапазоне стандартного 4-байтового FLOAT.
Такие величины корректно отображаются числами с количеством значащих цифр не более 6.
Поле в таблице БД должно иметь формат "одиночное FLOAT".
Целые числа передаются корректно в диапазоне 4-байтового целого.
Формат поля БД должен быть соответствующим.

Сообщения / Posts 15119 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
petrov_npa02
Junior Member / Новичок
Участник № / Member № 6640


Icon 1 отправлено / posted      Профиль для / Profile for petrov_npa02           Редактировать/удалить сообщение / Edit/Delete Post 
Спасибо за ответ,
только я не совсем понял, извините.

Если "значения всех аналоговых величин передаются в диапазоне стандартного 4-байтового FLOAT", то почему теряется разрядность после запятой, при увеличении разрядности целой части?

Почему 1.23456 пишется как 1.23456, 11.23456 пишется как 11.2346, а 1111.231079 пишется как 1111.23? По какой причине уменьшается количество знаков после запятой? Мне нужно не менее трех знаков.

Поле в БД - одиночное FLOAT. Пробовал менять на двойное FLOAT - результат тот же.

Что я делаю не так?

Сообщения / Posts 8 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post 
Надо ознакомиться со стандартом формата FLOAT.
Его мантисса содержит 23 бита, причем старший бит всегда равен 1.
Поэтому число значащих цифр (суммарно - до и после запятой) не может превышать 6-7.
В распространенных версиях стандарта (в зависимости от используемых компиляторов) - 6 значащих цифр.

Сообщения / Posts 15119 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
petrov_npa02
Junior Member / Новичок
Участник № / Member № 6640


Icon 1 отправлено / posted      Профиль для / Profile for petrov_npa02           Редактировать/удалить сообщение / Edit/Delete Post 
Я знаком со стандартом представления действительных чисел (чисел с плавающей точкой) в двоичном коде.

Это что же получается - при записи данных в положение запятой в числе сдвигается таким образом, чтобы получилось число (из примера в предыдущем посте) 0,111123? И поэтому значение "обрезается"? Если так - то зачем?

Если нет, тогда почему при записи 1111.231079 записывается 1111.23? Где здесь 6 значащих цифр после запятой? Почему округляется до 2-х значащих цифр? Где это написано в стандарте IEEE 754?

Диапазон данных в формате флоат (4 байта, одинарная точность):
00 00 00 00 hex= 5,87747175411144e-39 (минимальное положительное число)
80 00 00 00 hex=-5,87747175411144e-39 (минимальное отрицательное число)
7f ff ff ff hex= 6,80564693277058e+38 (максимальное положительное число)
ff ff ff ff hex=-6,80564693277058e+38 (максимальное отрицательное число)

Почему я не могу записать 1111.231079?

Мне необходимо сохранять в БД значение массы продукта в резервуаре с точностью до килограмма, при том, что само значение массы считывается в тоннах. Как мне это реализовать для резервуара объемом 10000 м3?

Сообщения / Posts 8 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post 
Не надо путать диапазон и точность.
Диапазон определяется диапазоном "порядка" в представлении числа.
Точность определяется диапазоном изменения мантиссы - для одинарного FLOAT 0x7FFFFF = 8388607.
Т.о., точность даже теоретически не может дать больше 7 десятичных знаков. На практике, как правило, не более 6.
Ограничивается СУММАРНОЕ количество значащих цифр:
до и после запятой.
Именно поэтому число 1111.231079 округляется до 1111.23.

Вопрос не относится ни к Trace Mode 6, ни к БД.
Топик закрывается.

Сообщения / Posts 15119 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Послать новую тему / Post New Topic  
Тема закрыта / Topic Closed  Тема закрыта / Topic Closed
Открыть тему / Open Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us

Rambler's Top100 Rambler's Top100



Powered by Infopop Corporation
UBB.classic™ 6.7.2