-
Вывод FLOAT на экран
Задача: вывести температуру, полученную с аналогового выхода на экран в виде двух цифр. Собственно кусок функции:
VAR
FormatTemp: STRING(10):='%+02.0f';
t_r: REAL;
...
END_VAR
t:=ShowString(z, col, 0, 't');
... (здесь учитывается вывод ошибочных величин и 0, далее)
собственно вывод температуры (3 позиции)
t:=ShowReal(z, col+1, 0, FormatTemp, t_r);
вывод символа "градус" (спасибо за поддержку в ПЛК63! ;-) и обозначения используемой шкалы - "по цельсию"
t:=ShowString(z, col+4, 0, '$9BC');
Исходил из формата printf, и если мне не изменяет память, то во времена оные указанное выше представление на сишных компиляторах давало следующий вывод:
при t_r=-14 (<-10)
-14
при t_r=-3 (>-10, но <0)
-03
при t_r=0
+00
при t_r=4 (>0, но <10)
+04
при t_r=12 (>10)
+12
Проблема: сейчас на контроллере ПЛК63 температура +3 выводится как +30. Я где-то неправ?
Эксперементы шли то дома, то в тёплом коттедже, где температура ниже +10 не падала, а на объекте такой облом :-(
Последний раз редактировалось Elka; 14.02.2011 в 13:17.
-
Проверьте правельность выбора датчика.
Вывод текста и значения Float на экран буде выглядеть следующим образом:
ShowString(0, 0, 0, 'Темп.:');
ShowReal(0,11,0,'%2.2f',t); (*вывод измеренного значения*)
Чтобы не учитывался вывод ошибочных величин воспользуйтесь функцией DIG_FLTR из библеотеки PID_Regulators.lib
Последний раз редактировалось brat; 14.02.2011 в 15:25.
-
brat, датчик выбран правильно. Значение измеряется также правильно (что можно увидеть через конфигурацию - значение аналогового входа - или как-то так называется или через debugger). Блок планирую внедрить чуть позже (сейчас на исходе ресурсы контроллера, поэтому такой оптимизации пока не проводил, а аппетит, как известно возрастает во время еды: и то хочу, и это, и вон то ещё до кучи). Проблема именно в выводе на экран. Как обходным путём это победить, я знаю: если температура <10 но >=1 - перед значимой цифрой выводим символ 0 и, аналогично, для отрицательных температур. Мне не понравилось, как ShowReal отработал формат %+02.0f. Мне показалось, что он не прав, и C-шный printf это делал иначе (а про соответствие строки формата С-шному printf - я где-то вычитал). Но однозначно грешить на ShowReal не могу - что я первый, что ли, его использую? Посему есть предположение, что результат сей - работа рук, чья линейность далека от идеала, но сходу причину найти не могу.
PS. И единственный ПЛК63 на объекте остался - поэксперементировать не на чем...
Последний раз редактировалось Elka; 14.02.2011 в 17:32.
Ваши права
- Вы не можете создавать новые темы
- Вы не можете отвечать в темах
- Вы не можете прикреплять вложения
- Вы не можете редактировать свои сообщения
-
Правила форума