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

Тема: ПЛК73. REAL_TO_STRING - крякозябры.

  1. #1
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,825

    Unhappy ПЛК73. REAL_TO_STRING - крякозябры.

    Получил ПЛК73, начал разрабатывать программу управления и параллельно изучать CoDeSys. Столкнулся с проблемой:
    Функция REAL_TO_STRING работает только в эмуляции. При загрузке в контроллер она не работает, возникают крякозябры даже без вывода на ЖКИ.
    Приходится выделять целую и дробную часть преобразовывать их через INT_TO_STRING и склеивать, что не есть гуд.
    Простой пример прилагаю.
    Кто знает помогите пожалуйста!
    Это только для ПЛК73 или для всех ОВЕНОВ?
    Emul.JPGKontroller.JPG
    Последний раз редактировалось petera; 10.09.2019 в 09:25.

  2. #2

    По умолчанию

    Да, такой Эффект есть, поэтому из библиотеки Work_mode берем функцию Show_real.

  3. #3

    По умолчанию

    Пример во вложении:
    Вложения Вложения

  4. #4
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,825

    По умолчанию

    Спасибо за ответ.
    Как я понял, это проблема и в ПЛК63 и ПЛК73?
    А как для других ПЛК (110, 160). Естественно не вывод на ЖКИ, а работа самой функции REAL_TO_STRING?
    Show_real это при работе ЖКИ в режиме work_mode,
    а если нужно выводить число в формате REAL в монопольном режиме придется делать примерно так?
    FUNCTION R_TO_ST : STRING
    VAR_INPUT
    varReal: REAL;
    END_VAR
    VAR
    END_VAR
    R_TO_ST:=INT_TO_STRING(TRUNC(varReal*10)/10);
    R_TO_ST:=CONCAT(R_TO_ST, '.');
    R_TO_ST:=CONCAT(R_TO_ST,INT_TO_STRING(TRUNC(varRea l*10)MOD 10));
    Здесь один знак после запятой и нет округления с учетом отброшенных знаков, но код простой и маленький.
    Подсмотрел у Oscat функцию REAL_TO_STRF:
    FUNCTION REAL_TO_STRF : STRING(20)
    VAR_INPUT
    IN : REAL;
    N : INT;
    END_VAR
    VAR
    O: REAL;
    i: INT;
    END_VAR
    (* LIMIT N to 0 .. 7 *)
    N := LIMIT(0,N,7);
    (* round the input to N digits and convert to string *)
    O := ABS(in) * EXP(N* 2.30258509299405);
    REAL_TO_STRF := DINT_TO_STRING(REAL_TO_DINT(O));
    (* add zeroes in front to make sure sting is at least 8 digits long *)
    FOR i := LEN(REAL_TO_STRF) TO N DO REAL_TO_STRF := CONCAT('0', REAL_TO_STRF); END_FOR;
    (* add a dot if n > 0 *)
    IF n > 0 THEN REAL_TO_STRF := INSERT(REAL_TO_STRF, '.', LEN(REAL_TO_STRF) - N); END_IF;
    (* add a minus sign if in is negative *)
    IF in < 0 THEN REAL_TO_STRF := CONCAT('-', REAL_TO_STRF); END_IF;
    Здесь и большой диапазон представления, и выбор кол. знаков после запятой и работает округление для отброшенных знаков.

  5. #5

    По умолчанию

    Попробовал на плк 73 простой и маленький код - работает, большое спасибо!!!

  6. #6

    По умолчанию

    Цитата Сообщение от Александр Приходько Посмотреть сообщение
    Пример во вложении:
    Не получается скачать вложение, открывается черный квадрат Малевича и маленькая белая точка посредине.
    И так происходит с многими вложениями на вашем форуме, которые я пытаюсь скачать.
    Как это победить?
    Последний раз редактировалось dr_alf; 16.05.2017 в 16:27.

  7. #7

    По умолчанию

    Show_real это при работе ЖКИ в режиме work_mode,
    а если нужно выводить число в формате REAL в монопольном режиме придется делать примерно так?
    FUNCTION R_TO_ST : STRING
    VAR_INPUT
    varReal: REAL;
    END_VAR
    VAR
    END_VAR
    R_TO_ST:=INT_TO_STRING(TRUNC(varReal*10)/10);
    R_TO_ST:=CONCAT(R_TO_ST, '.');
    R_TO_ST:=CONCAT(R_TO_ST,INT_TO_STRING(TRUNC(varRea l*10)MOD 10));
    Здесь один знак после запятой и нет округления с учетом отброшенных знаков, но код простой и маленький.
    Если значение varReal будет отрицательным (например -2.154716), то значение переменной функции будет равно '-2.-1'.
    Правильнее, на мой взгляд, будет так:
    FUNCTION R_TO_ST : STRING
    VAR_INPUT
    varReal: REAL;
    END_VAR
    VAR
    END_VAR
    R_TO_ST:=INT_TO_STRING(TRUNC(varReal));
    R_TO_ST:=CONCAT(R_TO_ST, '.');
    R_TO_ST:=CONCAT(R_TO_ST,INT_TO_STRING(TRUNC(varRea l*10*SEL(varReal < 0, 1, -1))MOD 10));

  8. #8
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,825

    По умолчанию

    Тогда уж так
    Код:
    R_TO_ST:=INT_TO_STRING(TRUNC(varReal*10)/10);
    R_TO_ST:=CONCAT(R_TO_ST, '.');
    R_TO_ST:=CONCAT(R_TO_ST,INT_TO_STRING(TRUNC(ABS(varReal*10))MOD 10));
    Только самое главное не в этом, а в том, что нужно просто использовать функцию REAL_TO_STRF из OSCAT, как я и писал в конце поста.
    - большой диапазон представления, и выбор кол. знаков после запятой и работает округление для отброшенных знаков.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  9. #9

    По умолчанию

    Никак не пойму великий смысл этого действа:

    R_TO_ST:=INT_TO_STRING(TRUNC(varReal*10)/10);
    Может тогда уж так:

    R_TO_ST:=INT_TO_STRING(TRUNC(varReal));
    R_TO_ST:=CONCAT(R_TO_ST, '.');
    R_TO_ST:=CONCAT(R_TO_ST,INT_TO_STRING(TRUNC(ABS(va rReal*10))MOD 10));
    Последний раз редактировалось Spawn; 09.02.2018 в 00:24.

Похожие темы

  1. Крякозябры в конфигураторе МДВВ и в OPC-сервере
    от alxdon в разделе Сервисное ПО
    Ответов: 2
    Последнее сообщение: 02.08.2011, 20:59
  2. И снова об ПЛК73
    от ASo в разделе ПЛК63/73
    Ответов: 3
    Последнее сообщение: 30.06.2011, 18:55
  3. ПЛК73
    от nevii в разделе ПЛК63/73
    Ответов: 8
    Последнее сообщение: 15.05.2011, 20:10
  4. Крякозябры в webvisu
    от Chupakabra в разделе Трёп (Курилка)
    Ответов: 5
    Последнее сообщение: 05.12.2008, 22:15
  5. проблема с функцией Real_to_string
    от mettled в разделе ПЛК1хх
    Ответов: 0
    Последнее сообщение: 25.04.2008, 17:23

Ваши права

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