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

Тема: Модуль Screen, реализация screensaver

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

    По умолчанию Модуль Screen, реализация screensaver

    Добрый день. В модуле Screen есть режимы "погашен" и "притушен". Я рассматриваю их, как screensaver. Однако, есть проблема, красивое решение которой мне в голову пока не приходит.

    Нет возможности удерживать экран в основном режиме. В модуле есть переменная "Wake up", которая по фронту выводит экран из спячки. Но вот её переключение никак не сбрасывает таймер бездействия пользователя.

    Демонстрационный код достаточно простой. Дискретный сигнал под кодовым именем "наличие аварии" заведен в BLINK. Выход BLINK привязан к "Wake up". Полный цикл BLINK в несколько раз меньше времени перехода в режим "притушен".

    Получается следующая ситуация: пришло событие "wake up", экран показал основную визуализацию, подождал N секунд, перешел в режим "притушен", возврат к первому пункту цепочки.

    А хотелось бы сделать удержание основной визуализации. Попробую сделать переключение из кода с нужной мне логикой, но это костыль выходит. Думаю, что описанное поведение - это баг, а не фича.

    P.S. При пустом имени визуализации для режима "притужен" все равно происходит переход в этот режим, далее "Wake up" и сброс на основную визуализацию. Тут можно было бы сказать "так поставь время 0, чтобы отключить функцию", но при этом предоставлена возможность менять значение из кода, а проверку аргументов не завезли.
    Последний раз редактировалось walhi; 05.10.2021 в 22:31. Причина: Обнаружил ещё один прикол

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

    По умолчанию

    Добрый день.

    Нет возможности удерживать экран в основном режиме. В модуле есть переменная "Wake up", которая по фронту выводит экран из спячки. Но вот её переключение никак не сбрасывает таймер бездействия пользователя.
    Как вы это определяете?

    Получается следующая ситуация: пришло событие "wake up", экран показал основную визуализацию, подождал N секунд, перешел в режим "притушен", возврат к первому пункту цепочки.
    А хотелось бы сделать удержание основной визуализации. Попробую сделать переключение из кода с нужной мне логикой, но это костыль выходит. Думаю, что описанное поведение - это баг, а не фича.
    Описанное поведение, на мой взгляд, выглядит совершенно корректным.
    Что вы называете "удержанием основной визуализации"?
    Опишите подробно задачу, которую вы пытаетесь решить.
    При необходимости выложите проект, с помощью которого можно воспроизвести то поведение, которое вы считаете ошибочным.

    P.S. При пустом имени визуализации для режима "притужен" все равно происходит переход в этот режим, далее "Wake up" и сброс на основную визуализацию. Тут можно было бы сказать "так поставь время 0, чтобы отключить функцию", но при этом предоставлена возможность менять значение из кода, а проверку аргументов не завезли.
    Это запланированное поведение. Основная цель компонента - реализовать гашение подсветки, а оно может происходить и без переключения экранов.
    В этом случае имя экрана визуализации в компоненте оставляется пустым.

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

    По умолчанию

    Спасибо за быстрый ответ.

    Опишите подробно задачу, которую вы пытаетесь решить.
    Я пытаюсь сделать screensaver, когда все нормально и нет активных аварий. При наличии аварии экран должен отображать основную визуализацию. Для этого идеально подходит модуль Screen.

    ...не сбрасывает таймер бездействия... Как вы это определяете?
    Если при периодическом сигнале "Wake up" (напомню, что интервалы переключения в несколько раз меньше времени перехода) включился режим "притушено", то делаю вывод, что этот таймер не сбрасывается. К сожалению, не нашел где посмотреть сколько времени осталось до перехода, хотя было желание "для поиграть" сделать анимацию таймаута.

    Описанное поведение, на мой взгляд, выглядит совершенно корректным.
    Возможно, я некорректно объяснил. У меня получилась мигалка. Сигнал "Wake up" обрабатывается только при активных режимах "притушен" и "погашен". В обычном режиме сделал вывод, что игнорируется. Прикладываю пример проекта-мигалки.

    Это запланированное поведение. Основная цель компонента - реализовать гашение подсветки, а оно может происходить и без переключения экранов.
    Тут я соглашусь. У меня была указана визуализация выхода из режимов "притушен" и "погашен". Отсюда и подобное поведение.
    Вложения Вложения

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

    По умолчанию

    Я посмотрел проект - вероятнее всего, бит Wake Up обрабатывается только в состояниях Погашено и Притушено (т.е. нельзя использовать его "превентивно").

    Поэтому в вашем случае разумно вообще отказаться от переключения экранов через узел Screen и использовать

    переключение из кода с нужной мне логикой

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

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Я посмотрел проект - вероятнее всего, бит Wake Up обрабатывается только в состояниях Погашено и Притушено (т.е. нельзя использовать его "превентивно").

    Поэтому в вашем случае разумно вообще отказаться от переключения экранов через узел Screen и использовать
    Ну я это поведение и описал. Вроде и не совсем ошибка, но и неприятно. Возможно, в будущем исправят.

    Мне в голову пришло решение: послать сигнал "wake up" и установить время отключения в 0, чтобы заблокировать. После снятия сигнала аварии вернуть нормальное значение в таймер и продолжить работу. Пока этот костыль не проверял.

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

    По умолчанию

    Возможно, в будущем исправят.
    Пока не вижу предпосылок.
    Вашу задачу можно решить так:

    Код:
    VAR
          // ФБ из библиотеки OSCAT Basic
          // генерирует единичный импульс при каждом изменении входного значения
          fbChangeValue: 		        BASIC.D_TRIG;
          fbUserInactivityTimer:		TON;
          xAlarm: 				BOOL;
    END_VAR
    
    // генерируем импульс при каждом нажатии на экран, чтобыо отслеживать активность пользователя
    fbChangeValue(IN := SCREEN.countTouch);
    
    // здесь определяем период неактивности пользователя
    fbUserInactivityTimer(IN := NOT(fbChangeValue.Q), PT := T#10S);
    
    IF NOT(xAlarm) AND fbUserInactivityTimer.Q THEN
    	
    	// переключаем экран только на таргет-визуализации
    	VisuElems.g_VisuManager.SetMainVisuGlobally(VisuElems.Visu_ClientType.Targetvisualization, 'Screensaver');
    	
    ELSIF xAlarm THEN
    
    	VisuElems.g_VisuManager.SetMainVisuGlobally(VisuElems.Visu_ClientType.Targetvisualization, 'Main');
    	fbUserInactivityTimer(IN := FALSE);
    	
    END_IF

Похожие темы

  1. ScreenSaver для СПК207
    от Спорягин Кирилл в разделе СПК2хх
    Ответов: 2
    Последнее сообщение: 25.05.2016, 17:47
  2. Реализация ШИМ на плк 100 км
    от Max1987 в разделе ПЛК1хх
    Ответов: 20
    Последнее сообщение: 11.02.2015, 10:52
  3. Ответов: 1
    Последнее сообщение: 26.06.2013, 12:34
  4. реализация пид
    от markinmo в разделе ПЛК1хх
    Ответов: 13
    Последнее сообщение: 16.01.2010, 20:24
  5. реализация пид
    от markinmo в разделе Помощь Разработчикам
    Ответов: 3
    Последнее сообщение: 14.01.2010, 11:03

Ваши права

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