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

Простейшие вопросы в области инженерной разработки

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

Postby GT21 on 09 Nov 2017, 14:05

Добрый день
Есть такая задача: сделать так, чтобы кнопка после запуска эвента становилась нерабочей
Я накидал пример, в нем после нажатия на кнопку она блокируется, на 2сек включается индикатор и затем кнопка снова работает. Проблема в том, что если тыкать по кнопке несколько раз пока горит индикатор, то она все равно срабатывает. Если же сделать ее неактивной вручную до запуска, то кнопка не срабатывает
ЗЫ: на "clear" не обращайте внимание, она служебная
Attachments
testing button.vi
(10.83 KiB) Downloaded 12 times
GT21
beginner
beginner
 
Posts: 42
Joined: 29 Apr 2016, 09:22
LabVIEW Version: 8.6
Karma: 0

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

Postby GT21 on 09 Nov 2017, 14:06

ЗЫ2: если что, прошу скидывать программы в версии лабвью 8
GT21
beginner
beginner
 
Posts: 42
Joined: 29 Apr 2016, 09:22
LabVIEW Version: 8.6
Karma: 0

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

Postby dadreamer on 09 Nov 2017, 14:46

Вы организовали задержку прямо в обработчике события. Пока вы не вышли из обработчика, он продолжает накапливать события. Сделайте кнопку неактивной и выйдите из кадра. Перенесите задержку в другое место - например, в кадр Timeout. Но не используйте Wait, а задайте таймаут 50-100мс и анализируйте разницу таймеров. Как будет больше 2000мс, сделаете кнопку активной.
Attachments
testing button-1.vi
lv8.0
(14.18 KiB) Downloaded 7 times
Last edited by dadreamer on 09 Nov 2017, 14:53, edited 1 time in total.
User avatar
dadreamer
doctor
doctor
 
Posts: 2897
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 709
I/O VIP vision internet

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

Postby AlexanderKonoval on 09 Nov 2017, 14:49

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

при этом если вывести в параллельный цикл - то всё работает так, как нужно.
колдооооовствооооо! (С)
AlexanderKonoval
developer
developer
 
Posts: 250
Joined: 03 Jan 2014, 19:37
Location: Украина, Киев
LabVIEW Version: 2016
Karma: 53

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

Postby GT21 on 09 Nov 2017, 14:57

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

дело в том, что эта программа - лишь имитация. вместо задержек и лампочки там будет подпрограмма на N минут с кучей задержек внутри
GT21
beginner
beginner
 
Posts: 42
Joined: 29 Apr 2016, 09:22
LabVIEW Version: 8.6
Karma: 0

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

Postby dadreamer on 09 Nov 2017, 14:58

GT21 wrote:дело в том, что эта программа - лишь имитация. вместо задержек и лампочки там будет подпрограмма на N минут с кучей задержек внутри

Тогда выносите в отдельный цикл. В эвенте не стоит выполнять времязатратный код.
User avatar
dadreamer
doctor
doctor
 
Posts: 2897
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 709
I/O VIP vision internet

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

Postby GT21 on 09 Nov 2017, 15:09

dadreamer wrote:
GT21 wrote:дело в том, что эта программа - лишь имитация. вместо задержек и лампочки там будет подпрограмма на N минут с кучей задержек внутри

Тогда выносите в отдельный цикл. В эвенте не стоит выполнять времязатратный код.

а можно как-нибудь костылями обойтись? переделывать будет очень проблемно
GT21
beginner
beginner
 
Posts: 42
Joined: 29 Apr 2016, 09:22
LabVIEW Version: 8.6
Karma: 0

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

Postby AlexanderKonoval on 09 Nov 2017, 15:28

да там не то чтобы переделка. просто ставите ещё один цикл, связываете его с обработчиком событий при помощи нотифьера. нажали на кнопку - отправили на нотифьер уведомление, что кнопку надо выключить - делаете код - закончили делать код - шлёте нотифьер включить.
дело нескольких минут.
колдооооовствооооо! (С)
AlexanderKonoval
developer
developer
 
Posts: 250
Joined: 03 Jan 2014, 19:37
Location: Украина, Киев
LabVIEW Version: 2016
Karma: 53

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

Postby GT21 on 09 Nov 2017, 16:05

не совсем понял. так?
Attachments
testing button11.vi
(12.17 KiB) Downloaded 8 times
GT21
beginner
beginner
 
Posts: 42
Joined: 29 Apr 2016, 09:22
LabVIEW Version: 8.6
Karma: 0

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

Postby taras_33 on 09 Nov 2017, 18:52

Как уже указывали, очень плохая идея, в event структуре выполнять код, требующий какого то времени, либо сложных вычислений. Это структура предназначена в первую очередь для обслуживания UI (юзер интерфейса) Но если сильно хочется, то как советовал AlexanderKonoval держите..
Attachments
testing button_Notifier.vi
(17.06 KiB) Downloaded 10 times
То, что мы знаем-------ограничено, а что не знаем------бесконечно!
User avatar
taras_33
advanced
advanced
 
Posts: 152
Joined: 31 Oct 2009, 18:25
Location: Minsk -> Miami
Medals: 1
Activity (1)
LabVIEW Version: 2016
Karma: 82
CLD

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

Postby Blackman on 09 Nov 2017, 19:20

Старая тема. Не менее 10 лет :haha:
Снимите "галку" Lock panel until... или заблокируйте панель Set Busy на время выполнения подпрограммы.
В более поздних версиях LabVIEW можно поставить "галку" Limit maximum istances ... со значением 1 .
Blackman
leader
leader
 
Posts: 685
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 171

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

Postby GT21 on 10 Nov 2017, 08:03

Blackman wrote:Старая тема. Не менее 10 лет :haha:
Снимите "галку" Lock panel until...

хм, стоило снять галочку и, похоже, события "нажатие кнопки" больше не встают в очередь (при условии, что в программе есть блокировка кнопки. если блокировки нет, то срабатывает)
GT21
beginner
beginner
 
Posts: 42
Joined: 29 Apr 2016, 09:22
LabVIEW Version: 8.6
Karma: 0


Return to Для чайников

Who is online

Users browsing this forum: Bing [Bot] and 12 guests

cron