Страница 128 из 274 ПерваяПервая ... 2878118126127128129130138178228 ... ПоследняяПоследняя
Показано с 1,271 по 1,280 из 3041

Тема: CODESYS V3.5. Визуализация

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,885

    По умолчанию

    Цитата Сообщение от Юра54 Посмотреть сообщение
    Что нужно сделать?
    Выложить проект и пояснить, где в нем динамические тексты, которые не выводятся.

  2. #2
    Пользователь Аватар для СергейНовосиб
    Регистрация
    23.05.2011
    Адрес
    Новосибирск
    Сообщений
    385

    По умолчанию

    У меня при редактировании визуализаций через некоторое время перестает возможность удалять элементы. Не работает кнопка "DEL" и правая кнопка мыши не открывает контекстное меню. В меню "Правка" тоже не активен пункт "Удаление". При этом тексты в элементах могу удалять. Перемещать и менять размеру тоже можно. Лечиться перезагрузкой CS. На разных проектах пробовал. CS3.5.14. Что может быть?

    В окне "Устройства" тоже правая кнопка мыши не работает, не открывает меню.
    Последний раз редактировалось СергейНовосиб; 30.06.2021 в 08:04.

  3. #3

    По умолчанию

    Это похоже сугубо ваша особенность. Я нечто подобное наблюдал при работе через Anydesk с 4к мониторами но во всех программах, возможно у вас тоже что-то подобное.

  4. #4
    Пользователь Аватар для DenisV
    Регистрация
    20.11.2020
    Адрес
    Санкт-Петербург
    Сообщений
    96

    По умолчанию

    Добрый день, коллеги!
    Возник следующий вопрос. В коде программы используется функциональный блок усреднения значений,который вызывается раз в секунду. После усреднения необходимо округлить значение до определенного разряда, в данном примере до одной значащей цифры после запятой. Для этого используются функция ROUND библиотеки OSCAT_BASIC. Результат округления отображается в визуализации с форматированием %s, и вроде бы всё работает как надо, но в определенный момент времени с периодичностью примерно раз в три секунды к результату округления добавляется 0.00001.Безымянный.png Первое число - выходное значение блока усреднения, второе число результат работы функции Round( где вход это выход с блока усреднения и N=1). Оба числа это Real. Почему округление иногда срабатывает некорректно и как можно решить этот вопрос?

  5. #5
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,885

    По умолчанию

    Цитата Сообщение от DenisV Посмотреть сообщение
    Добрый день, коллеги!
    Возник следующий вопрос. В коде программы используется функциональный блок усреднения значений,который вызывается раз в секунду. После усреднения необходимо округлить значение до определенного разряда, в данном примере до одной значащей цифры после запятой. Для этого используются функция ROUND библиотеки OSCAT_BASIC. Результат округления отображается в визуализации с форматированием %s, и вроде бы всё работает как надо, но в определенный момент времени с периодичностью примерно раз в три секунды к результату округления добавляется 0.00001.Безымянный.png Первое число - выходное значение блока усреднения, второе число результат работы функции Round( где вход это выход с блока усреднения и N=1). Оба числа это Real. Почему округление иногда срабатывает некорректно и как можно решить этот вопрос?
    Добрый день.

    В онлайн-отладке в редакторе кода значения переменных отображаются корректно или тоже с округлением?

    После усреднения необходимо округлить значение до определенного разряда, в данном примере до одной значащей цифры после запятой
    Для этого можно обойтись без функций - просто использовать спецификатор %.1f
    Или нужно округлить не только для визуализации, но и для дальнейшей обработки в программе?

  6. #6
    Пользователь Аватар для DenisV
    Регистрация
    20.11.2020
    Адрес
    Санкт-Петербург
    Сообщений
    96

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Добрый день.

    В онлайн-отладке в редакторе кода значения переменных отображаются корректно или тоже с округлением?



    Для этого можно обойтись без функций - просто использовать спецификатор %.1f
    Или нужно округлить не только для визуализации, но и для дальнейшей обработки в программе?
    В редакторе кода отображается корректно, да округление также необходимо для дальнейших вычислений, спецификатор %.1f не совсем подходит, потому что в некоторых случаях необходимо, чтобы разряд менялся в зависимости от диапазона. Также он неудобен для визуализации потому что при большом целом числе будет отображаться 100000.0 или при %.2f 100000.00, а хотелось бы отбросить не значащие нули, если это возможно.

    Ещё попробовал функцию из РП "Архивация"(стр.53) называется REAL_TO_FWSTRING, она округляет корректнее то есть без периодического появления 0.00001 , но опять же при заданном количестве значащих цифр после запятой=0, значение будет в любом случае выглядеть "X.0", то есть ноль не отбросится.

  7. #7

    По умолчанию

    Цитата Сообщение от DenisV Посмотреть сообщение
    Добрый день, коллеги!
    Возник следующий вопрос. В коде программы используется функциональный блок усреднения значений,который вызывается раз в секунду. После усреднения необходимо округлить значение до определенного разряда, в данном примере до одной значащей цифры после запятой. Для этого используются функция ROUND библиотеки OSCAT_BASIC. Результат округления отображается в визуализации с форматированием %s, и вроде бы всё работает как надо, но в определенный момент времени с периодичностью примерно раз в три секунды к результату округления добавляется 0.00001.Безымянный.png Первое число - выходное значение блока усреднения, второе число результат работы функции Round( где вход это выход с блока усреднения и N=1). Оба числа это Real. Почему округление иногда срабатывает некорректно и как можно решить этот вопрос?
    Потому что округлять Real так себе затея. Округляйте WString или в INT перекидывайте. Вот код для генерации WString с округлением:
    PHP код:
    FUNCTION fRealToWString WSTRING
    VAR_INPUT
        In
    :             REAL;
        
    iDec:            INT;    (*Количество знаков после запятой*)
    END_VAR
    VAR
        
    diValue:        DINT;
        
    i:                INT;
    END_VAR
    VAR CONSTANT
        sDot
    :             WSTRING(1):=".";
    END_VAR


    (*Значение с плавающей точкой*)
    iDec:= LIMIT(0,iDec,6);
        
    diValue:= LREAL_TO_DINT(ABS(In) * EXPT(10iDec));
    IF 
    ABS(In) * EXPT(10iDec) - DINT_TO_REAL(diValue) > 0.5 THEN
        diValue
    := diValue 1;        
    END_IF
        
    fRealToWString
    := DINT_TO_WSTRING(diValue);
        
    FOR 
    i:= WLEN(fRealToWStringTO iDec DO
         
    fRealToWString:= WCONCAT("0"fRealToWString);
    END_FOR
        
    IF iDec 0 THEN
        fRealToWString
    := WINSERT(fRealToWStringsDotWLEN(fRealToWString) - iDec);
    END_IF

    IF In 0 THEN
        fRealToWString
    := WCONCAT("-"fRealToWString);
    END_IF 
    Собственно большая его часть из OSCAT

  8. #8
    Пользователь Аватар для DenisV
    Регистрация
    20.11.2020
    Адрес
    Санкт-Петербург
    Сообщений
    96

    По умолчанию

    Цитата Сообщение от RV9WFJ Посмотреть сообщение
    Потому что округлять Real так себе затея. Округляйте WString или в INT перекидывайте. Вот код для генерации WString с округлением:
    PHP код:
    FUNCTION fRealToWString WSTRING
    VAR_INPUT
        In
    :             REAL;
        
    iDec:            INT;    (*Количество знаков после запятой*)
    END_VAR
    VAR
        
    diValue:        DINT;
        
    i:                INT;
    END_VAR
    VAR CONSTANT
        sDot
    :             WSTRING(1):=".";
    END_VAR


    (*Значение с плавающей точкой*)
    iDec:= LIMIT(0,iDec,6);
        
    diValue:= LREAL_TO_DINT(ABS(In) * EXPT(10iDec));
    IF 
    ABS(In) * EXPT(10iDec) - DINT_TO_REAL(diValue) > 0.5 THEN
        diValue
    := diValue 1;        
    END_IF
        
    fRealToWString
    := DINT_TO_WSTRING(diValue);
        
    FOR 
    i:= WLEN(fRealToWStringTO iDec DO
         
    fRealToWString:= WCONCAT("0"fRealToWString);
    END_FOR
        
    IF iDec 0 THEN
        fRealToWString
    := WINSERT(fRealToWStringsDotWLEN(fRealToWString) - iDec);
    END_IF

    IF In 0 THEN
        fRealToWString
    := WCONCAT("-"fRealToWString);
    END_IF 
    Собственно большая его часть из OSCAT
    Да, спасибо, тоже её находил, но посчитал её слишком ресурсозатратной для ПЛК при большом количестве округляемых значений (могу ошибаться, мб ощутимой разницы и нет) в сравнении например с этой.
    PHP код:
    FUNCTION REAL_TO_FWSTRING wstring
    VAR_INPUT
        rVar
    REAL
        
    usiPrecisionUSINT//кол-во знаков после запятой
        
    END_VAR
    VAR
        
    uliVarULINT;
        
    lrVarlreal;
    END_VAR

    uliVar
    := LREAL_TO_ULINT((rVar)* EXPT(10,usiPrecision));
    lrVar := ULINT_TO_LREAL(uliVar)/EXPT(10,usiPrecision);
    REAL_TO_FWSTRING:= LREAL_TO_WSTRING(lrVar); 

  9. #9
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,664

    По умолчанию

    Цитата Сообщение от DenisV Посмотреть сообщение
    Почему округление иногда срабатывает некорректно и как можно решить этот вопрос?
    у меня не воспроизвелось, но можете попробовать как еще один из вариантов округления INT_TO_REAL(REAL_TO_INT(VALUE / 0.1)) * 0.1, где 0.1 один знак после запятой
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  10. #10
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,885

    По умолчанию

    Я думаю, у вас отклоение появляется при конвертации в строку (потому что %s) - не уверен, что его вообще можно избежать, это особенности типа с плавающей точкой.

Страница 128 из 274 ПерваяПервая ... 2878118126127128129130138178228 ... ПоследняяПоследняя

Похожие темы

  1. Визуализация CoDeSys
    от Newcomer в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 24.04.2018, 15:26
  2. Визуализация в CoDeSys
    от Newcomer в разделе ПЛК1хх
    Ответов: 15
    Последнее сообщение: 10.05.2017, 21:11
  3. Визуализация CodeSys
    от DanJer в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 30.08.2012, 03:53
  4. Визуализация Codesys
    от Slipknot в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 31.10.2008, 11:36
  5. Визуализация в CoDeSys 2.3
    от Slawa в разделе ПЛК1хх
    Ответов: 10
    Последнее сообщение: 29.08.2008, 17:30

Ваши права

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