2015-04-30 1 views
0

Использование структур событий в LabView может запутать, особенно при смешивании с синхронным рабочим процессом. Мой вопрос заключается в том, когда структура событий существует в одном кадре последовательности, как я могу заставить ее игнорировать события (например, mousedown на определенной кнопке), которые были запущены, когда рабочий процесс находится в другом кадре последовательности?Как игнорировать события в LabView, вызванные вне определенного кадра последовательности?

В настоящее время структуры событий обрабатывают события только в правильном кадре в последовательности, но если один из них был запущен, когда рабочий процесс находится в предыдущем кадре, он также обрабатывает их, и я хочу, чтобы он игнорировал любые события, которые weren ' t срабатывает в кадре, в котором существует структура событий.

http://puu.sh/hwnoO/acdd4c011d.png

Вот часть моей работы. Если мускулатура запущена во время выполнения левой части, я хочу, чтобы структура события игнорировала эти события после достижения последовательности.

+0

Я живу в маленьком мире и никогда не использовал структуры событий таким образом. Не могли бы вы описать, что именно вы пытаетесь сделать? Не реализация, а функциональность, которую вы пытаетесь достичь. – user122302

+0

Я генерирую случайную последовательность вспышек кнопок, в течение которых пользователю не разрешается нажимать кнопки. Затем в следующем кадре пользователь должен повторить шаблон кнопки в том же порядке, щелкнув по ним. Моя цель состояла в том, чтобы предотвратить обман, позволяя щелчкам кнопки заполнять очередь событий, пока кнопки мигали. –

ответ

2

Вместо размещения структуры событий внутри вашей основной последовательности программ поместите ее в отдельный цикл и передайте детали каждого события в основную последовательность с помощью очереди. Затем вы можете отбросить детали событий, которые вы не хотите, сбросив очередь в нужную точку.

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

+0

Это на самом деле имеет большой смысл. Просто чтобы уточнить, по очереди, вы просто имеете в виду массив, не так ли? –

+0

Нет, я имею в виду очередь - выполните поиск в помощи LabVIEW, если вы еще не узнали об этом.Вы можете создать очередь для любого типа данных, который вам нравится, но для вашего приложения вы можете отправить целочисленное значение, соответствующее нажатой кнопке, или, может быть, кластер этого целого и временную метку, чтобы ваш основной цикл знал, когда произошел щелчок , Посмотрите на некоторые примеры очередей для большего количества идей. – nekomatic

0

http://puu.sh/hwsBE/fe50dee671.png

Я не мог понять, как очистить очередь событий для встроенных типов событий как MouseDown, но мне удалось обойти это путем создания статической ссылки на VI и установив курсор занят во время предыдущей последовательности, отключив нажатие. Затем, когда будет достигнута последовательность для структуры события, я отключу курсор из занятой, который повторно активирует щелчок.

1

Вы можете регистрироваться для событий динамически. Регистрация - это момент времени, когда структура события запускает события очереди, и в вашем случае это происходит, когда ВП структура событий находится в режиме запуска (то есть это выполняется или один из его вызывающих абонентов есть). Вы можете изменить его так, чтобы вы регистрировались с помощью узла Register for Events, а затем вы получали только события с этого момента. Когда вы отмените регистрацию, вы прекратите получать события.

Существует очень хорошая презентация Джека Данауэя, в котором подробно рассказывается о событиях here.

Вы можете найти для себя код here.

В LabVIEW 2013 и более поздних версиях есть дополнительные опции для управления очередью событий, но я не буду вдаваться в них здесь.