Здравствуйте. Скажите, можно ли в ваших панелях реализовать отображение числа, например,
0,000017
в виде
Вложение 69162
Вид для печати
Здравствуйте. Скажите, можно ли в ваших панелях реализовать отображение числа, например,
0,000017
в виде
Вложение 69162
Скорее всего ,как 1.7Е-5
Для чисел по модулю > 9.99 , появление положительного показателя степени в дисплее штатная возможность панели.
А вот числа по модулю меньше 0.00 будут просто отображаться как 0.00
Специально делал ГМ, который выводит значение переменной Float в формате ±1.23 ±nn, где nn число от -08 до +38
Путь к ГМ в библиотеке ".\ГМ для СП300\Визуальные ГМ\Ц_индикация\Float_Exx"
использование макроса:
Пример работы:
Пример во вложении
petera, спасибо. На базе этого можно было бы нарисовать сборное отображение и степень 10, если бы она уходила не только в минус, но и в плюс.
Ещё вот интересно, откуда появляется эта "прибавка" ?
Вложение 69179
В панели не верно отображаются числа меньше 1
А в эмуляторе не верно отображаются числа больше 1.
А мой ГМ в реальной панели правильно отображает числа типа ±1.23 ±nn, где nn число от -08 до +38
Загрузите мой пример в панель и убедитесь.
Прибавка появляется т.к. float есть числа приблизительные! Точность ~7 цифр.
Если тупо в лоб, без универсальности, то всего одна строчка кода.
1. Добавим в проект символьный дисплей с 10 символами ( нам надо 9 для формата -1.23е-45)
Вложение 69188
2."печатать" в символьный дисплей будем то, что вводим в тот же цифровой ввод, что использует ГМ
Вложение 69189
3."печатью" будет управлять ф.область с вызовом макроса Си
Вложение 69190
4. осталось показать код макроса
Вложение 69191
Смотреть пример с макросом на Си в #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
А чего сразу символьную строку из плк не отправить?