Страница 1 из 1

Количество значащих цифр

СообщениеДобавлено: Ср фев 26, 2014 2:40 pm
MaxXx
Добрый день.

Подскажите как увеличить количество значащих цифр при вводе значения типа MemoryReal?

Объясняю ситуацию:

Имеется тег типа MemoryReal (например RealTag1) (MinVal: 0 - MaxVal: 100 Retentive Value = true)
Рисую в окне текст #.####### (семь # после запятой).
Привязываю тег к тексту на ввод (InPut->_ Tagname ) (Minimum 0 - Maximum 100)

Далее в WindowViewer в тексте ввожу 12.123456789 нажимаю "энтер". В окне соответсвенно 12.1234568 (это правильно).
ОДНАКО!!! после перезагрузки WindowViewer в окне значение оказывается 12.1235000!
Или просто при новом вводе значения в поле ввода показывает число 12.1235 (хотя до этого вводил 12.123456789)
Ну и в RealTag1.InitialValue тоже заносится 12.1235 (т.е. 6 значащих цифр)

Возникает вопрос: Как увеличить количество значащих цифр?

Re: Количество значащих цифр

СообщениеДобавлено: Ср фев 26, 2014 3:44 pm
skom
Почитайте про стандарт floating point. http://en.wikipedia.org/wiki/IEEE_floating_point
Масштабируйте значение, т.е. храните например увеличенное в 1000 раз, а выводите соответственно уменьшенное значение.

Re: Количество значащих цифр

СообщениеДобавлено: Чт фев 27, 2014 10:25 am
MaxXx
skom,Ваш совет масштабировать значение, к сожалению, не подходит для данной ситуации.
Дело в том, что когда я присваиваю тегу значение 12345.1234567 в RealTag1.InitialValue записывается 12345.1 (те же самые 6 значащих цифр)
На экране нужно выводить семь знаков после запятой.

Re: Количество значащих цифр

СообщениеДобавлено: Чт фев 27, 2014 11:59 am
Генератор зла
skom писал(а):Почитайте про стандарт floating point

Зачем так далеко ходить? Всё в хелпе InTouch:

Showing Floating Point Numbers in the InTouch HMI
The InTouch HMI uses the IEEE 32-bit floating point format to show real numbers in an application. The IEEE floating point format is only an approximation of an actual real number. Unless the real number is an even power of two, it cannot be represented exactly using the IEEE 32-bit floating point format. The precision of an IEEE 32-bit floating point number is approximately eight decimal places.
When you want to show a real number in an InTouch application, make sure the number does not exceed eight digits. The following floating-point number formats show valid real numbers within an InTouch application:
#.#######
###.#####
######.##
Any floating-point numbers with more than eight digits are subject to rounding errors.
Example
An InTouch application should show the real number 2.3. But, the number 2.3 is not an even power of two and cannot be precisely represented by the IEEE 32-bit floating point format beyond 8 decimal digits.
To ensure the value 2.3 is shown from the application as the ASCII characters 2.3, the number must not exceed eight digits. If the number exceeds the eight digit maximum, the resulting number may be shown as 2.29999999 or 2.30000001 instead.

Re: Количество значащих цифр

СообщениеДобавлено: Чт фев 27, 2014 12:00 pm
Генератор зла
Преобразуйте в строку ;)

Re: Количество значащих цифр

СообщениеДобавлено: Пт фев 28, 2014 5:07 pm
MaxXx
Ну вот даже в хелпе интача написано, что восемь значащих цифр, а по факту 6. Вот 8 меня вполне бы устроило.
В строку тоже не вариант переводить.

В общем в проекте все прекрасно считается до тех пор, пока оператор не выключит АРМ. При включении АРМа последний знак "теряется". Надо забивать заново.

Re: Количество значащих цифр

СообщениеДобавлено: Пт фев 28, 2014 10:00 pm
Генератор зла
MaxXx писал(а):Ну вот даже в хелпе интача написано, что восемь значащих цифр, а по факту 6

Прибавьте знак (+/-) и разделитель ;)
Попробуйте хранить (в Tagname Dictionary) значения как Integer, а на экран выводить как делённые на ххх

Re: Количество значащих цифр

СообщениеДобавлено: Пн май 04, 2020 4:54 pm
engineer_ua
Генератор зла писал(а):Преобразуйте в строку ;)


зачем преобразовывать в строку, в чем секрет?

я столкнулся с аналогичной проблемой...
есть тег типа I/O Real нужно отображать три знака после запятой... задаю формат
###.### отображается только два знака 2.82 (это при Formating Real)
если поменять Formatting->Text String отображается корректно три знака после запятой 2.820 (принтскрин прикреплен)

почему так происходит, почему Real нужно преобразовывать в строчку....где логика???

Изображение