Отслеживание события в цикле
-
- assistant
- Сообщения: 147
- Зарегистрирован: 20 авг 2009, 18:08
- Награды: 1
- Версия LabVIEW: 15
- Контактная информация:
Отслеживание события в цикле
Как сделать попроще, чтобы Event Structure отслеживала изменение какого-нибудь параметра в цикле? Ну как в этом примере, значения Waveform Chat меняется, и по этому событию должна загореться лампочка.
- Вложения
-
- Event.vi
- (10.44 КБ) 116 скачиваний
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
-
- VIP
- Сообщения: 1337
- Зарегистрирован: 03 фев 2010, 00:42
- Награды: 6
- Версия LabVIEW: 6.1 - 2024
- Откуда: Германия
- Благодарил (а): 1 раз
- Поблагодарили: 44 раза
- Контактная информация:
Re: Отслеживание события в цикле
Ну и Event структуру не забываем в цикл завернуть, иначе она сработает однократно. Ну и лампочку кто-то гасить должен - сама она не погаснет, разумеется.
-
- assistant
- Сообщения: 147
- Зарегистрирован: 20 авг 2009, 18:08
- Награды: 1
- Версия LabVIEW: 15
- Контактная информация:
Re: Отслеживание события в цикле
Вопрос ведь от чайника... Вот так - как-то не так...?
- Вложения
-
- Event.vi
- (11.9 КБ) 100 скачиваний
-
Oleg B.
- leader
- Сообщения: 674
- Зарегистрирован: 25 сен 2011, 11:30
- Награды: 2
- Версия LabVIEW: 5 .. 2021
- Откуда: Israel
- Контактная информация:
Re: Отслеживание события в цикле
Вот именно - как-то не так.....Ella писал(а):Вопрос ведь от чайника... Вот так - как-то не так...?
- Вложения
-
- Event2.vi
- LV 8.5
- (14.82 КБ) 135 скачиваний
veni, vidi, phallomorphi
-
- interested
- Сообщения: 5
- Зарегистрирован: 18 май 2019, 22:16
- Версия LabVIEW: 8.5;18
- Контактная информация:
Re: Отслеживание события в цикле
Понимаю что актуальность темы данным давно утрачена, но оставляю этот комментарий на случай, если кто-то наткнется на эту тему в поисках ответа на свой вопрос.
Все события и изменения на лицевой панели старайтесь обрабатывать в теле одного(основного) цикла программы. Прикрепил картинку и исходник своей реализации примера(вся программа состоит из 1го цикла и 2х событий).
Выше приведенная реализация примера как минимум не корректна из-за лишнего цикла и дополнительных обрабатываемых событий, соответственно это влечет за собой загромождение схемы и лишнюю нагрузку на систему.Oleg B. писал(а):Вот именно - как-то не так.....Ella писал(а):Вопрос ведь от чайника... Вот так - как-то не так...?
Все события и изменения на лицевой панели старайтесь обрабатывать в теле одного(основного) цикла программы. Прикрепил картинку и исходник своей реализации примера(вся программа состоит из 1го цикла и 2х событий).
- Вложения
-
- Event.vi
- Исходник
- (14.61 КБ) 80 скачиваний
-
- professor
- Сообщения: 3404
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 175 раз
- Контактная информация:
Re: Отслеживание события в цикле
ну у вас тоже не самый идеальный вариант.Rayfat писал(а):Понимаю что актуальность темы данным давно утрачена, но оставляю этот комментарий на случай, если кто-то наткнется на эту тему в поисках ответа на свой вопрос.Выше приведенная реализация примера как минимум не корректна из-за лишнего цикла и дополнительных обрабатываемых событий, соответственно это влечет за собой загромождение схемы и лишнюю нагрузку на систему.Oleg B. писал(а):Вот именно - как-то не так.....Ella писал(а):Вопрос ведь от чайника... Вот так - как-то не так...?
Все события и изменения на лицевой панели старайтесь обрабатывать в теле одного(основного) цикла программы. Прикрепил картинку и исходник своей реализации примера(вся программа состоит из 1го цикла и 2х событий).
Ставить лучше избегать таймаутов внутри событий.
К тому же в таком варианте параметр "частота" не корректен. Реальная частота будет в 2 раза ниже указанной: прогромама подождёт таймаут, а потом ещё раз сделает паузу.
Ну и кнопка стоп ВНЕ событий - тоже плохой тон. Корректно было бы добавить событие этой кнопки и выходить по нему.
-
- interested
- Сообщения: 5
- Зарегистрирован: 18 май 2019, 22:16
- Версия LabVIEW: 8.5;18
- Контактная информация:
Re: Отслеживание события в цикле
Artem.spb, Доброго времени суток вам! Полностью с вами согласен, хотя я и не претендовал на идеальный вариант моего исполнения(Я накидал исходник по-быстрому на коленке).
В общем ваше сообщение заставило меня задуматься и переделать эту миниатюрною программку.
Также поясню свои ошибки (Кстати вас тоже прошу, в будущем когда критикуете, поясняйте пожалуйста... Мы всё-таки в разделе "для чайников" пояснения людям здесь очень полезны могу быть. ).
Предположим у нас 1я итерация, структура event ждет заданное время(терминал timeout) событие, по истечению заданного времени начинается выполнятся тело селектора timeout структуры event, в котором генерируется событие, после выполнения тела селектора timeout 1я итерация заканчивается(все это время булевое значение индикатора не менялось).
Начинается 2я итерация, поскольку было сгенерировано событие в предыдущей итерации, то начинается выполнятся тело селектора "Waveform": Value Change структуры event, в теле этого селектора булевое значение инвертируется(хоть и не явно) и выполняется функция wait которая ждет заданное время затем 2я итерация заканчивается. Таким образом 2я итерация цикла по длительности времени равна первой.
На 3й итерации все повторяется в точности также как при 1й итерации, отсюда вывод четные итерации генерируют событие, нечетные их обрабатывают. Можете проверить в режиме дебаг.
Надеюсь информация приведенная в моем посту будет хоть кому-то полезна, файлик без использования функции wait и другими коррективами прикреплю к посту. Вообще забавно, сколько смысла может нести такая мелкая программка.
В общем ваше сообщение заставило меня задуматься и переделать эту миниатюрною программку.
Также поясню свои ошибки (Кстати вас тоже прошу, в будущем когда критикуете, поясняйте пожалуйста... Мы всё-таки в разделе "для чайников" пояснения людям здесь очень полезны могу быть. ).
Полностью согласен что подобных конструкций нужно избегать, ибо wait в структуре event могут "замораживать" работу программы(к примеру когда мы обновляем в основном цикле контроллеры но лицевой панели), особенно при частом срабатывании событий использование подобной конструкции намертво "заморозит" программу.Ставить лучше избегать таймаутов внутри событий.
Здесь не соглашусь с вами, поясню почему.К тому же в таком варианте параметр "частота" не корректен. Реальная частота будет в 2 раза ниже указанной: программа подождёт таймаут, а потом ещё раз сделает паузу.
Предположим у нас 1я итерация, структура event ждет заданное время(терминал timeout) событие, по истечению заданного времени начинается выполнятся тело селектора timeout структуры event, в котором генерируется событие, после выполнения тела селектора timeout 1я итерация заканчивается(все это время булевое значение индикатора не менялось).
Начинается 2я итерация, поскольку было сгенерировано событие в предыдущей итерации, то начинается выполнятся тело селектора "Waveform": Value Change структуры event, в теле этого селектора булевое значение инвертируется(хоть и не явно) и выполняется функция wait которая ждет заданное время затем 2я итерация заканчивается. Таким образом 2я итерация цикла по длительности времени равна первой.
На 3й итерации все повторяется в точности также как при 1й итерации, отсюда вывод четные итерации генерируют событие, нечетные их обрабатывают. Можете проверить в режиме дебаг.
Здесь я погорячился. Выход из программ корректен по прерыванию, спасет в случаи если программа не откликается. :)Ну и кнопка стоп ВНЕ событий - тоже плохой тон. Корректно было бы добавить событие этой кнопки и выходить по нему.
Надеюсь информация приведенная в моем посту будет хоть кому-то полезна, файлик без использования функции wait и другими коррективами прикреплю к посту. Вообще забавно, сколько смысла может нести такая мелкая программка.
- Вложения
-
- CODE.vi
- (15.47 КБ) 80 скачиваний
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Отслеживание события в цикле
Вот именно - у Вас между обновлениями булевского индикатор происходит две итерации. А должна обновляться каждую итерацию, ибо смысл потом иметь частоту обновления?
А вообще, если нужно определить изменилось ли какое-то значение, нужно использовать push, а не pull. Т.е. отслеживать данные на той частоте, на которой они генерятся. Для этого можно использовать User Event, если нужно использовать в том же цикле Event Structure.
А вообще, если нужно определить изменилось ли какое-то значение, нужно использовать push, а не pull. Т.е. отслеживать данные на той частоте, на которой они генерятся. Для этого можно использовать User Event, если нужно использовать в том же цикле Event Structure.
Мы делили апельсин - много наших полегло...
-
- interested
- Сообщения: 5
- Зарегистрирован: 18 май 2019, 22:16
- Версия LabVIEW: 8.5;18
- Контактная информация:
Re: Отслеживание события в цикле
Kosist, важно сделать тогда уточнение о какой частоте мы говорим, вы говорите о частоте повторений, а я о частоте изменений. На практике часто бывает необходимость использовать как и ту так и другую.
Для частоты повторений в моем примере вводимая частота должна быть в 2 раза больше.
Для частоты повторений в моем примере вводимая частота должна быть в 2 раза больше.