Блокировка кнопки

Простейшие вопросы в области инженерной разработки
Ответить
GT21
user
user
Сообщения: 74
Зарегистрирован: 29 апр 2016, 09:22
Версия LabVIEW: 8.6
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Блокировка кнопки

Сообщение GT21 »

Добрый день
Есть такая задача: сделать так, чтобы кнопка после запуска эвента становилась нерабочей
Я накидал пример, в нем после нажатия на кнопку она блокируется, на 2сек включается индикатор и затем кнопка снова работает. Проблема в том, что если тыкать по кнопке несколько раз пока горит индикатор, то она все равно срабатывает. Если же сделать ее неактивной вручную до запуска, то кнопка не срабатывает
ЗЫ: на "clear" не обращайте внимание, она служебная
Вложения
testing button.vi
(10.83 КБ) 91 скачивание
LabVIEW 8.6
GT21
user
user
Сообщения: 74
Зарегистрирован: 29 апр 2016, 09:22
Версия LabVIEW: 8.6
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Блокировка кнопки

Сообщение GT21 »

ЗЫ2: если что, прошу скидывать программы в версии лабвью 8
LabVIEW 8.6
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Блокировка кнопки

Сообщение dadreamer »

Вы организовали задержку прямо в обработчике события. Пока вы не вышли из обработчика, он продолжает накапливать события. Сделайте кнопку неактивной и выйдите из кадра. Перенесите задержку в другое место - например, в кадр Timeout. Но не используйте Wait, а задайте таймаут 50-100мс и анализируйте разницу таймеров. Как будет больше 2000мс, сделаете кнопку активной.
Вложения
testing button-1.vi
lv8.0
(14.18 КБ) 78 скачиваний
Последний раз редактировалось dadreamer 09 ноя 2017, 14:53, всего редактировалось 1 раз.
AlexanderKonoval
developer
developer
Сообщения: 257
Зарегистрирован: 03 янв 2014, 19:37
Версия LabVIEW: 2016
Откуда: Украина, Киев
Контактная информация:

Re: Блокировка кнопки

Сообщение AlexanderKonoval »

это чертовски странно, но если это всё внутри ивента нажатия - то действительно не работает.

при этом если вывести в параллельный цикл - то всё работает так, как нужно.
колдооооовствооооо! (С)
GT21
user
user
Сообщения: 74
Зарегистрирован: 29 апр 2016, 09:22
Версия LabVIEW: 8.6
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Блокировка кнопки

Сообщение GT21 »

dadreamer писал(а):Вы организовали задержку прямо в обработчике события. Пока вы не вышли из обработчика, он продолжает накапливать события. Сделайте кнопку неактивной и выйдите из кадра. Перенесите задержку в другое место - например, в кадр Timeout. Но не используйте Wait, а задайте таймаут 50-100мс и анализируйте разницу таймеров. Как будет больше 2000мс, сделаете кнопку активной.
дело в том, что эта программа - лишь имитация. вместо задержек и лампочки там будет подпрограмма на N минут с кучей задержек внутри
LabVIEW 8.6
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Блокировка кнопки

Сообщение dadreamer »

GT21 писал(а):дело в том, что эта программа - лишь имитация. вместо задержек и лампочки там будет подпрограмма на N минут с кучей задержек внутри
Тогда выносите в отдельный цикл. В эвенте не стоит выполнять времязатратный код.
GT21
user
user
Сообщения: 74
Зарегистрирован: 29 апр 2016, 09:22
Версия LabVIEW: 8.6
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Блокировка кнопки

Сообщение GT21 »

dadreamer писал(а):
GT21 писал(а):дело в том, что эта программа - лишь имитация. вместо задержек и лампочки там будет подпрограмма на N минут с кучей задержек внутри
Тогда выносите в отдельный цикл. В эвенте не стоит выполнять времязатратный код.
а можно как-нибудь костылями обойтись? переделывать будет очень проблемно
LabVIEW 8.6
AlexanderKonoval
developer
developer
Сообщения: 257
Зарегистрирован: 03 янв 2014, 19:37
Версия LabVIEW: 2016
Откуда: Украина, Киев
Контактная информация:

Re: Блокировка кнопки

Сообщение AlexanderKonoval »

да там не то чтобы переделка. просто ставите ещё один цикл, связываете его с обработчиком событий при помощи нотифьера. нажали на кнопку - отправили на нотифьер уведомление, что кнопку надо выключить - делаете код - закончили делать код - шлёте нотифьер включить.
дело нескольких минут.
колдооооовствооооо! (С)
GT21
user
user
Сообщения: 74
Зарегистрирован: 29 апр 2016, 09:22
Версия LabVIEW: 8.6
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Блокировка кнопки

Сообщение GT21 »

не совсем понял. так?
Вложения
testing button11.vi
(12.17 КБ) 72 скачивания
LabVIEW 8.6
Аватара пользователя
taras_33

Activity
professional
professional
Сообщения: 391
Зарегистрирован: 31 окт 2009, 18:25
Награды: 1
Версия LabVIEW: 2019
Поблагодарили: 13 раз
Контактная информация:

Re: Блокировка кнопки

Сообщение taras_33 »

Как уже указывали, очень плохая идея, в event структуре выполнять код, требующий какого то времени, либо сложных вычислений. Это структура предназначена в первую очередь для обслуживания UI (юзер интерфейса) Но если сильно хочется, то как советовал AlexanderKonoval держите..
Вложения
testing button_Notifier.vi
(17.06 КБ) 83 скачивания
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Блокировка кнопки

Сообщение Blackman »

Старая тема. Не менее 10 лет :haha:
Снимите "галку" Lock panel until... или заблокируйте панель Set Busy на время выполнения подпрограммы.
В более поздних версиях LabVIEW можно поставить "галку" Limit maximum istances ... со значением 1 .
GT21
user
user
Сообщения: 74
Зарегистрирован: 29 апр 2016, 09:22
Версия LabVIEW: 8.6
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Блокировка кнопки

Сообщение GT21 »

Blackman писал(а):Старая тема. Не менее 10 лет :haha:
Снимите "галку" Lock panel until...
хм, стоило снять галочку и, похоже, события "нажатие кнопки" больше не встают в очередь (при условии, что в программе есть блокировка кнопки. если блокировки нет, то срабатывает)
LabVIEW 8.6
Ответить

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