Есть вопрос, возможно ли устанавливать приоритеты в Event structure? Например имеется timeout и user event. Какая из них имеет приоритет?
Дело в том, что слайдер value change event из одного VI генерирует UE, которое обрабатывается в другом VI и в нем же есть таймаут. Так вот если постоянно двигать слайдером в первом т.е. постоянно генерировать ивенты, то таймаут во втором VI не срабатыват вовремя. Я бы хотела чтобы таймаут имел приоритет над UE. Возможно ли это?
Приоритет в Event Structure
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Приоритет в Event Structure
Делается параллельный цикл для обработки TimeOut.jane_wild писал(а): ↑14 апр 2021, 17:20 Есть вопрос, возможно ли устанавливать приоритеты в Event structure? Например имеется timeout и user event. Какая из них имеет приоритет?
Дело в том, что слайдер value change event из одного VI генерирует UE, которое обрабатывается в другом VI и в нем же есть таймаут. Так вот если постоянно двигать слайдером в первом т.е. постоянно генерировать ивенты, то таймаут во втором VI не срабатыват вовремя. Я бы хотела чтобы таймаут имел приоритет над UE. Возможно ли это?
И в него регистрируется UE, в которой передается Stop. Я как правило Stop отдельно от всех делаю в том числе и по этой причине.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- professor
- Сообщения: 3410
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Приоритет в Event Structure
timeout имеет приоритет примерно -inf. Он случается, если за это время ничего другого не произойдёт. Т.е. это НЕ таймер, который тикает и регулярно генерирует события, это именно timeout - ничего не случилось за это время.
Для user event есть два уровня приоритета - нормальный и high. Последний лезет в начало очереди.
- jane_wild
- master
- Сообщения: 461
- Зарегистрирован: 30 июн 2016, 02:11
- Версия LabVIEW: 2020
- Благодарил (а): 84 раза
- Поблагодарили: 15 раз
- Контактная информация:
Re: Приоритет в Event Structure
Идея хорошая. Но не подходит для моего случая. Дело в том что в таймауте обрабатываюстя данные, которые как раз таки обновляются в UE, следовательно они должны быть в одном цикле. Буду думать как ограничить количество посылаемых сообщений, крайний случай вместо value change использовать mouse up слайдера, и посылать (генерировать) последнее значение слайдера. Но это не желательно...
Из скриншота видно, что событие стоп присутствует в обоих event structure. Это от одной кнопки? И по ее нажатию останавливаются оба цикла?
-
- professor
- Сообщения: 3410
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Приоритет в Event Structure
Во-первых, не факт, что они должны быть в одном цикле. Вообще, по науке хорошего программирования Event собирает события и пересылает их в какой-то параллельный цикл, где всё в одном месте обрабатывается.
Так что это первый вариант.
Второй: почему данные обрабатываются оп таймауту, а не по факту изменения? => оформить обработку в виде саба и вызывать в каждом кейсе, или вообще после Evernt.
Третий: Снова параллельный цикл, но он с заданной частотой генерирует user event "обработай данные". А последнее прилетает в первую структуру и инициирует обработку по "таймауту".
Судя по внешней ссылке, это вообще не кнопка, а user event, который разлетается по всему проекту и говорит всем, что пора завершать работу. А уж как он инициируется - по кнопке закрытия окна или по какому-то другому событию, не так важно.Из скриншота видно, что событие стоп присутствует в обоих event structure. Это от одной кнопки? И по ее нажатию останавливаются оба цикла?
События вообще можно регистрировать сколько угодно раз, и каждый обработчик получит свою копию события. В этом хорошее преимущество событий на очередями.
Ну и надо же как-то остановить оба цикла :)
- jane_wild
- master
- Сообщения: 461
- Зарегистрирован: 30 июн 2016, 02:11
- Версия LabVIEW: 2020
- Благодарил (а): 84 раза
- Поблагодарили: 15 раз
- Контактная информация:
Re: Приоритет в Event Structure
Спасибо этого не знала.
Почему в одном цикле - объясню. Недавно я поднимала тему с аналоговым выходом с cDAQ, который генерировал синусоиду. Так вот UE слайдера меняет частоту, запоминая ее в shift register, а в таймауте генерируется сама синусоида . И если долго двигать слайдером, таймауту нет возможности сработать(записать новую порцию синусоиды) поэтому и происходит ошибка
-
- professor
- Сообщения: 3410
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Приоритет в Event Structure
И вот тут-то всё неправильно.
работа с железом и взаимодействие с пользователем категорически должны быть в разных циклах. Так что здесь подходит мой первый вараинт - по слайдеру информация пересылается в другой цикл и там используется по назначению.
- jane_wild
- master
- Сообщения: 461
- Зарегистрирован: 30 июн 2016, 02:11
- Версия LabVIEW: 2020
- Благодарил (а): 84 раза
- Поблагодарили: 15 раз
- Контактная информация:
Re: Приоритет в Event Structure
Так они в разных циклах, слайдер в одном vi UE в другом. Но по сути разделения нет, с этим я согласна. Поэтому мне понравился третий вариант. Попробую вместо таймаута генеривовать события, в отдельном цикле, с заданым промежутком и установлю высокий приоритет, думаю будет работать.
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Приоритет в Event Structure
Да, я по этому на скрине их и показал.
Т.е. второй обрабатывает только два события, а фактически одно - TimeOut.
А по нажатии Stop, цикл останавливается и работа vi завершается.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 6 Ответы
- 236 Просмотры
-
Последнее сообщение Artem.spb