Приоритет в Event Structure

Простейшие вопросы в области инженерной разработки
Ответить
Аватара пользователя
jane_wild
master
master
Сообщения: 461
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 84 раза
Поблагодарили: 15 раз
Контактная информация:

Приоритет в Event Structure

Сообщение jane_wild »

Есть вопрос, возможно ли устанавливать приоритеты в Event structure? Например имеется timeout и user event. Какая из них имеет приоритет?
Дело в том, что слайдер value change event из одного VI генерирует UE, которое обрабатывается в другом VI и в нем же есть таймаут. Так вот если постоянно двигать слайдером в первом т.е. постоянно генерировать ивенты, то таймаут во втором VI не срабатыват вовремя. Я бы хотела чтобы таймаут имел приоритет над UE. Возможно ли это?
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5467
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 88 раз

Re: Приоритет в Event Structure

Сообщение IvanLis »

jane_wild писал(а): 14 апр 2021, 17:20 Есть вопрос, возможно ли устанавливать приоритеты в Event structure? Например имеется timeout и user event. Какая из них имеет приоритет?
Дело в том, что слайдер value change event из одного VI генерирует UE, которое обрабатывается в другом VI и в нем же есть таймаут. Так вот если постоянно двигать слайдером в первом т.е. постоянно генерировать ивенты, то таймаут во втором VI не срабатыват вовремя. Я бы хотела чтобы таймаут имел приоритет над UE. Возможно ли это?
Делается параллельный цикл для обработки TimeOut.
И в него регистрируется UE, в которой передается Stop. Я как правило Stop отдельно от всех делаю в том числе и по этой причине.
Снимок экрана от 2021-04-15 13-29-43.png
Artem.spb

Activity Автор
professor
professor
Сообщения: 3410
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 176 раз
Контактная информация:

Re: Приоритет в Event Structure

Сообщение Artem.spb »

jane_wild писал(а): 14 апр 2021, 17:20 Например имеется timeout и user event. Какая из них имеет приоритет?
timeout имеет приоритет примерно -inf. Он случается, если за это время ничего другого не произойдёт. Т.е. это НЕ таймер, который тикает и регулярно генерирует события, это именно timeout - ничего не случилось за это время.
Для user event есть два уровня приоритета - нормальный и high. Последний лезет в начало очереди.
Аватара пользователя
jane_wild
master
master
Сообщения: 461
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 84 раза
Поблагодарили: 15 раз
Контактная информация:

Re: Приоритет в Event Structure

Сообщение jane_wild »

IvanLis писал(а): 15 апр 2021, 13:31 Делается параллельный цикл для обработки TimeOut.
И в него регистрируется UE, в которой передается Stop. Я как правило Stop отдельно от всех делаю в том числе и по этой причине.
Идея хорошая. Но не подходит для моего случая. Дело в том что в таймауте обрабатываюстя данные, которые как раз таки обновляются в UE, следовательно они должны быть в одном цикле. Буду думать как ограничить количество посылаемых сообщений, крайний случай вместо value change использовать mouse up слайдера, и посылать (генерировать) последнее значение слайдера. Но это не желательно...

Из скриншота видно, что событие стоп присутствует в обоих event structure. Это от одной кнопки? И по ее нажатию останавливаются оба цикла?
Artem.spb

Activity Автор
professor
professor
Сообщения: 3410
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 176 раз
Контактная информация:

Re: Приоритет в Event Structure

Сообщение Artem.spb »

jane_wild писал(а): 15 апр 2021, 14:31 Дело в том что в таймауте обрабатываюстя данные, которые как раз таки обновляются в UE, следовательно они должны быть в одном цикле.
Во-первых, не факт, что они должны быть в одном цикле. Вообще, по науке хорошего программирования Event собирает события и пересылает их в какой-то параллельный цикл, где всё в одном месте обрабатывается.
Так что это первый вариант.
Второй: почему данные обрабатываются оп таймауту, а не по факту изменения? => оформить обработку в виде саба и вызывать в каждом кейсе, или вообще после Evernt.
Третий: Снова параллельный цикл, но он с заданной частотой генерирует user event "обработай данные". А последнее прилетает в первую структуру и инициирует обработку по "таймауту".

Из скриншота видно, что событие стоп присутствует в обоих event structure. Это от одной кнопки? И по ее нажатию останавливаются оба цикла?
Судя по внешней ссылке, это вообще не кнопка, а user event, который разлетается по всему проекту и говорит всем, что пора завершать работу. А уж как он инициируется - по кнопке закрытия окна или по какому-то другому событию, не так важно.
События вообще можно регистрировать сколько угодно раз, и каждый обработчик получит свою копию события. В этом хорошее преимущество событий на очередями.
Ну и надо же как-то остановить оба цикла :)
Аватара пользователя
jane_wild
master
master
Сообщения: 461
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 84 раза
Поблагодарили: 15 раз
Контактная информация:

Re: Приоритет в Event Structure

Сообщение jane_wild »

Artem.spb писал(а): 15 апр 2021, 14:45 События вообще можно регистрировать сколько угодно раз, и каждый обработчик получит свою копию события. В этом хорошее преимущество событий на очередями.
Ну и надо же как-то остановить оба цикла :)
Спасибо этого не знала.

Почему в одном цикле - объясню. Недавно я поднимала тему с аналоговым выходом с cDAQ, который генерировал синусоиду. Так вот UE слайдера меняет частоту, запоминая ее в shift register, а в таймауте генерируется сама синусоида . И если долго двигать слайдером, таймауту нет возможности сработать(записать новую порцию синусоиды) поэтому и происходит ошибка
Artem.spb

Activity Автор
professor
professor
Сообщения: 3410
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 176 раз
Контактная информация:

Re: Приоритет в Event Structure

Сообщение Artem.spb »

jane_wild писал(а): 15 апр 2021, 14:56 Так вот UE слайдера меняет частоту, запоминая ее в shift register, а в таймауте генерируется сама синусоида .
И вот тут-то всё неправильно.
работа с железом и взаимодействие с пользователем категорически должны быть в разных циклах. Так что здесь подходит мой первый вараинт - по слайдеру информация пересылается в другой цикл и там используется по назначению.
Аватара пользователя
jane_wild
master
master
Сообщения: 461
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 84 раза
Поблагодарили: 15 раз
Контактная информация:

Re: Приоритет в Event Structure

Сообщение jane_wild »

Так они в разных циклах, слайдер в одном vi UE в другом. Но по сути разделения нет, с этим я согласна. Поэтому мне понравился третий вариант. Попробую вместо таймаута генеривовать события, в отдельном цикле, с заданым промежутком и установлю высокий приоритет, думаю будет работать.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5467
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 88 раз

Re: Приоритет в Event Structure

Сообщение IvanLis »

jane_wild писал(а): 15 апр 2021, 14:31 Из скриншота видно, что событие стоп присутствует в обоих event structure. Это от одной кнопки? И по ее нажатию останавливаются оба цикла?
Да, я по этому на скрине их и показал.
Т.е. второй обрабатывает только два события, а фактически одно - TimeOut.
А по нажатии Stop, цикл останавливается и работа vi завершается.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»