Показано с 1 по 3 из 3

Тема: Вывод FLOAT на экран

  1. #1
    Пользователь
    Регистрация
    04.11.2009
    Адрес
    Подольск
    Сообщений
    259

    По умолчанию Вывод 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.

  2. #2

    По умолчанию

    Проверьте правельность выбора датчика.
    Вывод текста и значения Float на экран буде выглядеть следующим образом:
    ShowString(0, 0, 0, 'Темп.:');
    ShowReal(0,11,0,'%2.2f',t); (*вывод измеренного значения*)
    Чтобы не учитывался вывод ошибочных величин воспользуйтесь функцией DIG_FLTR из библеотеки PID_Regulators.lib
    Последний раз редактировалось brat; 14.02.2011 в 15:25.

  3. #3
    Пользователь
    Регистрация
    04.11.2009
    Адрес
    Подольск
    Сообщений
    259

    По умолчанию

    brat, датчик выбран правильно. Значение измеряется также правильно (что можно увидеть через конфигурацию - значение аналогового входа - или как-то так называется или через debugger). Блок планирую внедрить чуть позже (сейчас на исходе ресурсы контроллера, поэтому такой оптимизации пока не проводил, а аппетит, как известно возрастает во время еды: и то хочу, и это, и вон то ещё до кучи). Проблема именно в выводе на экран. Как обходным путём это победить, я знаю: если температура <10 но >=1 - перед значимой цифрой выводим символ 0 и, аналогично, для отрицательных температур. Мне не понравилось, как ShowReal отработал формат %+02.0f. Мне показалось, что он не прав, и C-шный printf это делал иначе (а про соответствие строки формата С-шному printf - я где-то вычитал). Но однозначно грешить на ShowReal не могу - что я первый, что ли, его использую? Посему есть предположение, что результат сей - работа рук, чья линейность далека от идеала, но сходу причину найти не могу.

    PS. И единственный ПЛК63 на объекте остался - поэксперементировать не на чем...
    Последний раз редактировалось Elka; 14.02.2011 в 17:32.

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •