Просмотр полной версии : Отображение числа float
Здравствуйте. Скажите, можно ли в ваших панелях реализовать отображение числа, например,
0,000017
в виде
69162
АРТ.Кар 64
25.07.2023, 06:07
Скорее всего ,как 1.7Е-5
Здравствуйте. Скажите, можно ли в ваших панелях реализовать отображение числа, например,
0,000017
в виде
69162
Для чисел по модулю > 9.99 , появление положительного показателя степени в дисплее штатная возможность панели.
А вот числа по модулю меньше 0.00 будут просто отображаться как 0.00
Специально делал ГМ, который выводит значение переменной Float в формате ±1.23 ±nn, где nn число от -08 до +38
Путь к ГМ в библиотеке ".\ГМ для СП300\Визуальные ГМ\Ц_индикация\Float_Exx"
https://www.youtube.com/watch?v=Ea9VdpVgmMI
https://www.youtube.com/watch?v=0nizGlyZqbI
Пример во вложении
petera, спасибо. На базе этого можно было бы нарисовать сборное отображение и степень 10, если бы она уходила не только в минус, но и в плюс.
Ещё вот интересно, откуда появляется эта "прибавка" ?
69179
Скорее всего ,как 1.7Е-5
А не подскажете, как это реализовать?
kondor3000
25.07.2023, 17:32
А не подскажете, как это реализовать?
Если есть ПЛК, то пишется программа преобразования в STRING, сразу предупреждаю, там будет куча нюансов, в зависимости от степени. Например преобразование, только положительных чисел, до 9999,9 заняло строк 20 на ST.
petera, спасибо. На базе этого можно было бы нарисовать сборное отображение и степень 10, если бы она уходила не только в минус, но и в плюс.
Ещё вот интересно, откуда появляется эта "прибавка" ?
69179
В панели не верно отображаются числа меньше 1
А в эмуляторе не верно отображаются числа больше 1.
А мой ГМ в реальной панели правильно отображает числа типа ±1.23 ±nn, где nn число от -08 до +38
Загрузите мой пример в панель и убедитесь.
Прибавка появляется т.к. float есть числа приблизительные! Точность ~7 цифр.
Если есть ПЛК, то пишется программа преобразования в STRING, сразу предупреждаю, там будет куча нюансов, в зависимости от степени. Например преобразование, только положительных чисел, до 9999,9 заняло строк 20 на ST.
Можно макрос на Си в панели написать, который будет "печатать" в символьный дисплей число в виде +/-1.23 e-23.
Нюансов никаких, и не больше 3.. 5 строк кода, думаю
В панели не верно отображаются числа меньше 1
А в эмуляторе не верно отображаются числа больше 1.
А мой ГМ в реальной панели правильно отображает числа типа ±1.23 ±nn, где nn число от -08 до +38
Загрузите мой пример в панель и убедитесь.
https://youtu.be/fIKWlwZdjwc
Можно макрос на Си в панели написать, который будет "печатать" в символьный дисплей число в виде +/-1.23 e-23.
Нюансов никаких, и не больше 3.. 5 строк кода, думаю
Если тупо в лоб, без универсальности, то всего одна строчка кода.
1. Добавим в проект символьный дисплей с 10 символами ( нам надо 9 для формата -1.23е-45)
69188
2."печатать" в символьный дисплей будем то, что вводим в тот же цифровой ввод, что использует ГМ
69189
3."печатью" будет управлять ф.область с вызовом макроса Си
69190
4. осталось показать код макроса
69191
Ворон226
01.09.2023, 13:37
Если тупо в лоб, без универсальности, то всего одна строчка кода.
А вот у меня задача отобразить значения в диапазоне 1000... 1Е-10
Эти значения СП3** считывает с ячеек ПЛК по адресам 6 и 7 в WORD...
Как сделать текущее значение на индикаторе в формате *.* Е-** ?
kondor3000
01.09.2023, 13:53
А вот у меня задача отобразить значения в диапазоне 1000... 1Е-10
Эти значения СП3** считывает с ячеек ПЛК по адресам 6 и 7 в WORD...
Как сделать текущее значение на индикаторе в формате *.* Е-** ?
Не понял, как вы значения WORD собираетесь представлять диапазоне 1000... 1Е-10
Если это Float с адресом 6, то как отобразить его, уже выложили на предыдущей странице.
А вот у меня задача отобразить значения в диапазоне 1000... 1Е-10
Эти значения СП3** считывает с ячеек ПЛК по адресам 6 и 7 в WORD...
Как сделать текущее значение на индикаторе в формате *.* Е-** ?
Смотреть пример с макросом на Си в #10
"печатать" будем с символьный дисплей с 10 символами,например PSW1000
69986
нужна ф.область, непрерывная
69987
функция - вызов макроса
69988
69989
текст макроса
// (c) PeterA
DWORD Val;
Read(PLC, 1, MODBUS_RTU_REG_4X, 6, 0, TYPE_DWORD, &Val); // прочитать из ПЛК с адр.1 регистр 4x06, DWord (два регистра 6 и 7)
sprintf((char*)&PSW[1000], "%3.2E", DWord_2_Float(Val)); // напечатать полученное значение в формате "*.** E-**" в символьный дисплей с рег. PSW1000
А чего сразу символьную строку из плк не отправить?
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot