Вход на форум 
В начало e-Mail

Форум

Ресурсы Rockwell

Product Directory

Essential Components

Literature Library

Knowledge Base

Electronic News&Magazines

Блог

Encompass Program

Product Certification

  
Smart Solutions VDT :: Просмотр темы - RSView32 порезал float
 FAQFAQ   ПоискПоиск   ГруппыГруппы   ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

RSView32 порезал float

 
Начать новую тему   Ответить на тему    Список форумов Smart Solutions VDT -> Программные средства систем автоматизации
Предыдущая тема :: Следующая тема  
Автор Сообщение
sozon
Новичок
Новичок


Зарегистрирован: Jun 28, 2006
Сообщения: 8
Рейтинг: +0/-0

СообщениеДобавлено: Ср 04 Авг, 2010 8:32:48    Заголовок сообщения: RSView32 порезал float Ответить с цитатой

Из SLC в RSView32 прописан тег Floating point типа.
Так вот, при значении тега в SLC 1026411,1 во вьюхе имеем 1026410,0
Причем, при значениях до мильена(6 знаков в целочисленной части) все отображается верно(в SCL ххххх.х и во вьюхе ххххх.х).
При мониторинге тега выдалось значение 1.02641E+006.
Может потому что тут после запятой 5 знаков всего, то остальные знаки слетели в ноли после шести знаков?
Помогите побороть сие.

настройки тега в Tag DB
min 0.0
max 1.e+038
scale 1.0
offset 0.0
тип floating point
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
maxim
Эксперт
Эксперт


Зарегистрирован: Feb 16, 2007
Сообщения: 123
Рейтинг: +7/-0
Откуда: Енакиево

СообщениеДобавлено: Ср 04 Авг, 2010 10:22:25    Заголовок сообщения: Ответить с цитатой

Здравствуйте, попробуйте ограничить количество знаков после запятой. Если у вас требуемая точность одна десятая - зачем требовать точность пять знаков после запятой? Попробуйте например в Numeric Display в Decimal Places поставить 1. Получиться ли у вас точно отобразить тег? Удачи.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
sozon
Новичок
Новичок


Зарегистрирован: Jun 28, 2006
Сообщения: 8
Рейтинг: +0/-0

СообщениеДобавлено: Ср 04 Авг, 2010 10:38:36    Заголовок сообщения: Ответить с цитатой

Здравствуйте.
Я не требую точности 5 знаков после запятой.
Numeric display (про который я и не упоминал) у меня с параметрами: 8 разрядов, 1 знак после запятой, Floating Point, с экспонентой.
Но и в нем (дисплее) значение тега не 1026411,1 а 1026410,
Ноль после запятой не влез, при 9 разрядах влазит - 1026410,0, но все равно не тот результат.

Вопрос вот в чем: можно ли донести более 6 разрядов в числе из SLC до вьюхи?

Отсюда -можно ли замониторить значение тега (float) с большим количеством используемых разрядов, т.е. если макс - 1.e+038, могу ли я замониторить тег равный например: 123456789,1234 в таком виде, а не в сокращенном?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ITop
Частый гость
Частый гость


Зарегистрирован: Apr 19, 2010
Сообщения: 15
Рейтинг: +1/-0

СообщениеДобавлено: Ср 04 Авг, 2010 11:24:15    Заголовок сообщения: Ответить с цитатой

Проблема тут видится в ограничении чисел типа float, 32-битных.
У них на мантиссу всего 23 бита (и ещё оди н на знак). 23 бита - это всего 7-8 десятичных цифр (в зависимости от числа). Все остальные числа после запято могут появиться только как результат преобразования двоичного числа с плавающей точкой в десятичное с символьным (строковым) представлением.

Кроме того, столько будет, если число нормализованно. После какой нить математической операции оно станет ненормализованным и младший разряд мантиссы может отрезать или в нём будет наблюдаться ошибка.

Тут ещё всё зависит от того, сколько и каких преобразований делается над числом перед его выводом на цифровой дисплей.

Я бы вообще на вашем месте не заморачивался с значениями в младшем (8-м) десятичном разряде. Числа Float одинарной точности вообще не очень подходят для точных рассчётов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
sozon
Новичок
Новичок


Зарегистрирован: Jun 28, 2006
Сообщения: 8
Рейтинг: +0/-0

СообщениеДобавлено: Ср 04 Авг, 2010 11:53:53    Заголовок сообщения: Ответить с цитатой

Непонятно.
Переформулирую вопрос.

Дано: есть значение тега в SLC 1026411,1.
Какого типа создать тег в RSView32 чтобы работать со значением 1026411,1, а не 1026410,0 и не 1.02641E+006?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ITop
Частый гость
Частый гость


Зарегистрирован: Apr 19, 2010
Сообщения: 15
Рейтинг: +1/-0

СообщениеДобавлено: Ср 04 Авг, 2010 12:39:55    Заголовок сообщения: Ответить с цитатой

Можно попробовать исходный тег умножить на 10 затем положить в тег типа LongInt и выводить его без запятых, а запятую затем дорисовывать.

Сначала надо выяснить на каком этапе теряются младшие разряды. Если непостредственно при выводе float в поле, то вариант выше может сработать.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ITop
Частый гость
Частый гость


Зарегистрирован: Apr 19, 2010
Сообщения: 15
Рейтинг: +1/-0

СообщениеДобавлено: Ср 04 Авг, 2010 12:47:05    Заголовок сообщения: Ответить с цитатой

Ну и для лучшего понимания чисел с плавающей точкой:

Число 1026411,1 вообще невозможно записать в таком формате. Ближайшие приближённые числа 1026411,125 и 1026411,0625.
Это RSLogix500 при выводе на экран округляет по десятичным разрядам.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
sozon
Новичок
Новичок


Зарегистрирован: Jun 28, 2006
Сообщения: 8
Рейтинг: +0/-0

СообщениеДобавлено: Чт 05 Авг, 2010 3:16:34    Заголовок сообщения: Ответить с цитатой

ITop писал(а):
Ну и для лучшего понимания чисел с плавающей точкой:

Число 1026411,1 вообще невозможно записать в таком формате. Ближайшие приближённые числа 1026411,125 и 1026411,0625.
Это RSLogix500 при выводе на экран округляет по десятичным разрядам.


Обоснуйте.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ITop
Частый гость
Частый гость


Зарегистрирован: Apr 19, 2010
Сообщения: 15
Рейтинг: +1/-0

СообщениеДобавлено: Чт 05 Авг, 2010 11:28:04    Заголовок сообщения: Ответить с цитатой

Википедия - Число одинарной точности http://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%BE_%D0%BE%D0%B4%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D0%BE%D0%B9_%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D1%81%D1%82%D0%B8


Онлайн преобразователь для IEEE 754 чисел с одинарной точностью

http://www.binaryconvert.com/convert_float.html
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
oldDad
Site Admin
Site Admin


Зарегистрирован: May 05, 2005
Сообщения: 2773
Рейтинг: +89/-5

СообщениеДобавлено: Сб 07 Авг, 2010 13:46:56    Заголовок сообщения: Ответить с цитатой

ITop писал(а):
положить в тег типа LongInt

В SLC нет ни тэгов, ни формата Long Integer.

Я бы умножил на 10, разместил во float, а запятую нарисовал.

2 sozon
Вообще, разница между 1026411,1 и 1026410,0 составляет примерно 0,0001%. Что Вы такое считаете с такой точностью? Может быть, Вашу задачу можно (и нужно) решить с другого конца?
_________________
Обращайтесь к профессионалам.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
ITop
Частый гость
Частый гость


Зарегистрирован: Apr 19, 2010
Сообщения: 15
Рейтинг: +1/-0

СообщениеДобавлено: Пн 09 Авг, 2010 6:14:49    Заголовок сообщения: Ответить с цитатой

Цитата:
В SLC нет ни тэгов, ни формата Long Integer


Речь была про RSView32, в котором скорей всего и проблема.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Smart Solutions VDT -> Программные средства систем автоматизации Часовой пояс: GMT + 1
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах

Powered by phpBB © 2001, 2005 phpBB Group
Яндекс цитирования

Smart Solutions VDT GmbH | Friedrich-List-Allee 38, D-41844 Wegberg-Wildenrath, Germany
Tel.: +49 2432 933 57 83 | e-Mail: office@vdt-solutions.de
Все товарные знаки и торговые марки являются собственностью их владельцев.
При использовании материалов сайта ссылка на данный сайт обязательна.
Открытие страницы: 0.131 секунды
/n