PDA

Просмотр полной версии : Отображение числа float



jtx
25.07.2023, 05:02
Здравствуйте. Скажите, можно ли в ваших панелях реализовать отображение числа, например,
0,000017
в виде
69162

АРТ.Кар 64
25.07.2023, 06:07
Скорее всего ,как 1.7Е-5

petera
25.07.2023, 06:23
Здравствуйте. Скажите, можно ли в ваших панелях реализовать отображение числа, например,
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

Пример во вложении

jtx
25.07.2023, 17:02
petera, спасибо. На базе этого можно было бы нарисовать сборное отображение и степень 10, если бы она уходила не только в минус, но и в плюс.
Ещё вот интересно, откуда появляется эта "прибавка" ?

69179

jtx
25.07.2023, 17:06
Скорее всего ,как 1.7Е-5
А не подскажете, как это реализовать?

kondor3000
25.07.2023, 17:32
А не подскажете, как это реализовать?

Если есть ПЛК, то пишется программа преобразования в STRING, сразу предупреждаю, там будет куча нюансов, в зависимости от степени. Например преобразование, только положительных чисел, до 9999,9 заняло строк 20 на ST.

petera
25.07.2023, 20:12
petera, спасибо. На базе этого можно было бы нарисовать сборное отображение и степень 10, если бы она уходила не только в минус, но и в плюс.
Ещё вот интересно, откуда появляется эта "прибавка" ?

69179

В панели не верно отображаются числа меньше 1
А в эмуляторе не верно отображаются числа больше 1.

А мой ГМ в реальной панели правильно отображает числа типа ±1.23 ±nn, где nn число от -08 до +38

Загрузите мой пример в панель и убедитесь.

Прибавка появляется т.к. float есть числа приблизительные! Точность ~7 цифр.

petera
25.07.2023, 20:15
Если есть ПЛК, то пишется программа преобразования в STRING, сразу предупреждаю, там будет куча нюансов, в зависимости от степени. Например преобразование, только положительных чисел, до 9999,9 заняло строк 20 на ST.

Можно макрос на Си в панели написать, который будет "печатать" в символьный дисплей число в виде +/-1.23 e-23.
Нюансов никаких, и не больше 3.. 5 строк кода, думаю

petera
25.07.2023, 21:06
В панели не верно отображаются числа меньше 1
А в эмуляторе не верно отображаются числа больше 1.

А мой ГМ в реальной панели правильно отображает числа типа ±1.23 ±nn, где nn число от -08 до +38

Загрузите мой пример в панель и убедитесь.


https://youtu.be/fIKWlwZdjwc

petera
25.07.2023, 22:53
Можно макрос на Си в панели написать, который будет "печатать" в символьный дисплей число в виде +/-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, то как отобразить его, уже выложили на предыдущей странице.

petera
01.09.2023, 14:28
А вот у меня задача отобразить значения в диапазоне 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

Валенок
01.09.2023, 18:11
А чего сразу символьную строку из плк не отправить?