Одновременное нажатие кнопок

Обсуждение, связанное с разработкой ПО верхнего уровня
zzontt
beginner
beginner
Сообщения: 15
Зарегистрирован: 31 июл 2014, 13:48
Версия LabVIEW: 2010
Контактная информация:

Одновременное нажатие кнопок

Сообщение zzontt »

Есть ли возможность объединить несколько кнопок в одну?
Тесть при нажатие на одну кнопку на лицевой панели, одновременно с ней нажимается еще одна или две кнопки одновременно с ней.
Как это сделать программно я не знаю так как события генерируемые этими кнопками обрабатываются в трех разных циклах работающих параллельно.
Аватара пользователя
IvanLis

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

Re: Одновременное нажатие кнопок

Сообщение IvanLis »

zzontt писал(а):Есть ли возможность объединить несколько кнопок в одну?
Тесть при нажатие на одну кнопку на лицевой панели, одновременно с ней нажимается еще одна или две кнопки одновременно с ней.
Как это сделать программно я не знаю так как события генерируемые этими кнопками обрабатываются в трех разных циклах работающих параллельно.
Нажатие кнопок обрабатывайте с использованием Event структуры.
Для имитации нажатия кнопки используйте Property Node -> Value(Signaling).
zzontt
beginner
beginner
Сообщения: 15
Зарегистрирован: 31 июл 2014, 13:48
Версия LabVIEW: 2010
Контактная информация:

Re: Одновременное нажатие кнопок

Сообщение zzontt »

IvanLis писал(а):
zzontt писал(а):Есть ли возможность объединить несколько кнопок в одну?
Тесть при нажатие на одну кнопку на лицевой панели, одновременно с ней нажимается еще одна или две кнопки одновременно с ней.
Как это сделать программно я не знаю так как события генерируемые этими кнопками обрабатываются в трех разных циклах работающих параллельно.
Нажатие кнопок обрабатывайте с использованием Event структуры.
Для имитации нажатия кнопки используйте Property Node -> Value(Signaling).
По пробовал, на разобраться не получилось. Не могли бы вы покзать на простеньком примере.
Ниже прикрепленная упрощенная структура моего проекта, подскажите как сделать так что бы при нажатие на OK Button, вместе с ней происходило имитация нажатия на OK Button2 и OK Button3.
Снимок.jpg
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Одновременное нажатие кнопок

Сообщение Vitekkz88 »

По пробовал, на разобраться не получилось. Не могли бы вы покзать на простеньком примере.
По Вашему же примеру.
Как уже говорили
Для имитации нажатия кнопки используйте Property Node -> Value(Signaling).
Это и используйте.Для создания Property Node наведите на необходимый контрол/индикатор курсор мыши,щелкните правой кнопкой и выберите пункт "Create ->Property Node", либо достань Property Node из палитры Programming - > Application и на вход подключите ссылку контрола/индикатора. Как создать ссылку(reference) думаю сообразите.
Ну а дальше как на картинке:
Вложения
Кнопка.png
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
zzontt
beginner
beginner
Сообщения: 15
Зарегистрирован: 31 июл 2014, 13:48
Версия LabVIEW: 2010
Контактная информация:

Re: Одновременное нажатие кнопок

Сообщение zzontt »

Vitekkz88 писал(а):
По пробовал, на разобраться не получилось. Не могли бы вы покзать на простеньком примере.
По Вашему же примеру.
Как уже говорили
Для имитации нажатия кнопки используйте Property Node -> Value(Signaling).
Это и используйте.Для создания Property Node наведите на необходимый контрол/индикатор курсор мыши,щелкните правой кнопкой и выберите пункт "Create ->Property Node", либо достань Property Node из палитры Programming - > Application и на вход подключите ссылку контрола/индикатора. Как создать ссылку(reference) думаю сообразите.
Ну а дальше как на картинке:
Спасибо. Все прекрасно получилось.
Но вот попробовав распространить этот же метод на три кнопки стоп, которые внутри трех малых циклов, меня ждало разочарование они таким образом взаимодействовать не хотят, с чем это связанно, не подскажите?
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Одновременное нажатие кнопок

Сообщение Vitekkz88 »

Но вот попробовав распространить этот же метод на три кнопки стоп, которые внутри трех малых циклов, меня ждало разочарование они таким образом взаимодействовать не хотят, с чем это связанно, не подскажите?
А Вам необходимо изменить тип механического действия кнопок "Стоп". По умолчанию они создаются с типом Latch When Released. Поменяйте этот тип на любой из Switch и все должно сработать.
Как менять тип мех.действия: на интерфейсной панели щелкаете правой кнопкой мышки по кнопке. Находите строчку Mechanical Action и выбираете. Либо можно зайти в свойства этого контрола и перейти на вкладку Operation.

А будет еще интересней,если Вы почитаете про notifier-ы(уведомители). В приложениях чаще всего используют их для остановки множества циклов. :wink:
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Одновременное нажатие кнопок

Сообщение Vitekkz88 »

zzontt
Вот смотри пример на нотифаерах. Найдешь их в палитре Programm -> synchronization.
Всего ОДНА кнопка "Стоп" на 4 цикла:)
Почитай еще,что такое dataflow. Именно на этом принципе и основано программирование в LabVIEW.
Вложения
STOP.png
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
zzontt
beginner
beginner
Сообщения: 15
Зарегистрирован: 31 июл 2014, 13:48
Версия LabVIEW: 2010
Контактная информация:

Re: Одновременное нажатие кнопок

Сообщение zzontt »

Vitekkz88 писал(а):
Но вот попробовав распространить этот же метод на три кнопки стоп, которые внутри трех малых циклов, меня ждало разочарование они таким образом взаимодействовать не хотят, с чем это связанно, не подскажите?
А Вам необходимо изменить тип механического действия кнопок "Стоп". По умолчанию они создаются с типом Latch When Released. Поменяйте этот тип на любой из Switch и все должно сработать.
Как менять тип мех.действия: на интерфейсной панели щелкаете правой кнопкой мышки по кнопке. Находите строчку Mechanical Action и выбираете. Либо можно зайти в свойства этого контрола и перейти на вкладку Operation.
Спасибо за совет этот способ сработал.
Vitekkz88 писал(а):
А будет еще интересней,если Вы почитаете про notifier-ы(уведомители). В приложениях чаще всего используют их для остановки множества циклов. :wink:
А вот с эти попробую разобраться, мне не надо останавливать все 4 цикла, на том примере что вы привели ниже, мне надо остановить только три внутренних, но все усложняется тем что они в Case-структурах.
zzontt
beginner
beginner
Сообщения: 15
Зарегистрирован: 31 июл 2014, 13:48
Версия LabVIEW: 2010
Контактная информация:

Re: Одновременное нажатие кнопок

Сообщение zzontt »

Vitekkz88 писал(а):zzontt
Вот смотри пример на нотифаерах. Найдешь их в палитре Programm -> synchronization.
Всего ОДНА кнопка "Стоп" на 4 цикла:)
Почитай еще,что такое dataflow. Именно на этом принципе и основано программирование в LabVIEW.
Попробовал реализовать данную систему применительно к моему проекту, с моими особенностями, запускается все без ошибок, но при начале работы программы начинают сыпаться ошибки.
Вложения
Снимок.jpg
Безымянный.jpg
Безымянный.jpg (33.71 КБ) 12762 просмотра
Аватара пользователя
Super Star
adviser
adviser
Сообщения: 228
Зарегистрирован: 07 фев 2013, 08:37
Версия LabVIEW: 2011

Re: Одновременное нажатие кнопок

Сообщение Super Star »

если вы посмотрите на пример выше, то найдете отличия
вы каждый раз создаете и удаляете нотифер
я люблю свою работу.... Я приду сюда в субботу ...
zzontt
beginner
beginner
Сообщения: 15
Зарегистрирован: 31 июл 2014, 13:48
Версия LabVIEW: 2010
Контактная информация:

Re: Одновременное нажатие кнопок

Сообщение zzontt »

Super Star писал(а):если вы посмотрите на пример выше, то найдете отличия
вы каждый раз создаете и удаляете нотифер
Да нелепая ошибка, разобрался с ней, спасибо за подсказки и наводки, если не сложно посмотрите пожалуйста еще одну новую тему которую я создал в этом разделе форума.
zzontt
beginner
beginner
Сообщения: 15
Зарегистрирован: 31 июл 2014, 13:48
Версия LabVIEW: 2010
Контактная информация:

Re: Одновременное нажатие кнопок

Сообщение zzontt »

Vitekkz88 писал(а):zzontt
Вот смотри пример на нотифаерах. Найдешь их в палитре Programm -> synchronization.
Всего ОДНА кнопка "Стоп" на 4 цикла:)
Почитай еще,что такое dataflow. Именно на этом принципе и основано программирование в LabVIEW.
Вашем примере, кнопка стоп будет работать только в том случае если запущен вложенный цикл в котором она находится, а что делать если запущен только 2 и 3 вложенный цикл, а нотификатор гененируется только в первом.
Подскажите пожалуйста, как сделать так что бы каждый цикл мог бы создавать нотификатор на остановку всех остальных, и все остальные могли его принять.
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Одновременное нажатие кнопок

Сообщение Vitekkz88 »

Вашем примере, кнопка стоп будет работать только в том случае если запущен вложенный цикл в котором она находится, а что делать если запущен только 2 и 3 вложенный цикл, а нотификатор гененируется только в первом.
Да,потому что решение было предложено для более ранних пожеланий,а именно.
Ниже прикрепленная упрощенная структура моего проекта, подскажите как сделать так что бы при нажатие на OK Button, вместе с ней происходило имитация нажатия на OK Button2 и OK Button3.
Вы поглядите,где у Вас кнопка OK Button находится :wink:
Подскажите пожалуйста, как сделать так что бы каждый цикл мог бы создавать нотификатор на остановку всех остальных, и все остальные могли его принять.
А позвольте узнать,у Вас вложенные циклы сразу начинаю работать?На сколько я понимаю, Вы хотите получить такой результат:
Есть три кнопки. Если на кнопку нажать - то запускается вложенный цикл. Если её отжать - то вложенный цикл завершается и дальше вновь осуществляется
нажатие кнопки пользователем.
Или надо так: кнопку нажал - цикл запустил. Нажал вторую кнопку - запустился второй цикл и тд...?А потом одной кнопкой "Стоп" оставновить,а так же иметь возможность останавливать циклы теми же кнопками,на которые нажимали?
Нет необходимости создавать уведомителей в каждом цикле. Достаточно создать один в event-структуре и по событию кнопки "Стоп" рассылать во все потоки уведомление.
Посмотрите пример и поясните,что необходимо в итоге?
Вложения
Пример.png
Untitled 1.vi
(11.68 КБ) 264 скачивания
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
zzontt
beginner
beginner
Сообщения: 15
Зарегистрирован: 31 июл 2014, 13:48
Версия LabVIEW: 2010
Контактная информация:

Re: Одновременное нажатие кнопок

Сообщение zzontt »

Vitekkz88 писал(а):
Вашем примере, кнопка стоп будет работать только в том случае если запущен вложенный цикл в котором она находится, а что делать если запущен только 2 и 3 вложенный цикл, а нотификатор гененируется только в первом.
Да,потому что решение было предложено для более ранних пожеланий,а именно.
Ниже прикрепленная упрощенная структура моего проекта, подскажите как сделать так что бы при нажатие на OK Button, вместе с ней происходило имитация нажатия на OK Button2 и OK Button3.
Вы поглядите,где у Вас кнопка OK Button находится :wink:
Подскажите пожалуйста, как сделать так что бы каждый цикл мог бы создавать нотификатор на остановку всех остальных, и все остальные могли его принять.
А позвольте узнать,у Вас вложенные циклы сразу начинаю работать?На сколько я понимаю, Вы хотите получить такой результат:
Есть три кнопки. Если на кнопку нажать - то запускается вложенный цикл. Если её отжать - то вложенный цикл завершается и дальше вновь осуществляется
нажатие кнопки пользователем.
Или надо так: кнопку нажал - цикл запустил. Нажал вторую кнопку - запустился второй цикл и тд...?А потом одной кнопкой "Стоп" оставновить,а так же иметь возможность останавливать циклы теми же кнопками,на которые нажимали?
Нет необходимости создавать уведомителей в каждом цикле. Достаточно создать один в event-структуре и по событию кнопки "Стоп" рассылать во все потоки уведомление.
Посмотрите пример и поясните,что необходимо в итоге?
Логика моего проекта такова, у меня есть три прибора которые выполняют измерения, и я с них собираю данные(это три вложенных цикла внутри основного, сделанны они вложенными для того что бы была возможность не останавливая полностью программу остановить измерения, в главном цикле изменить настройки приборов, а потом их опять запустить), но есть особенность в том что мне не всегда надо запускать на измерение все три прибора, иногда только 1 иногда 2 иногда все три, и если это не все три то те которые будут включены могут быть любыми( то есть, например только 2 или только 3, или 1 и 3, 2 и 3, и тд), у меня на лицевой панели есть кнопка старт и три контрола которыми я выбираю какие конкретно приборы сейчас будут работать (то есть выбрав например 2 и 3 прибор я нажимаю кнопку старт и они начинают измерения), а так же кнопка стоп которая должна остановить все работающие в данный момент приборы, пока что у меня реализованно так что мне в обязательном порядке надо запускать прибор 1, для того что бы была возможность остановить одновременно с ним 2 или/и 3, хочу от этого затыка избавится.
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Одновременное нажатие кнопок

Сообщение Vitekkz88 »

у меня на лицевой панели есть кнопка старт и три контрола которыми я выбираю какие конкретно приборы сейчас будут работать (то есть выбрав например 2 и 3 прибор я нажимаю кнопку старт и они начинают измерения), а так же кнопка стоп которая должна остановить все работающие в данный момент приборы,
Вы мой пример скачали/смотрели?
Там как раз то,что вам необходимо. Вы заранее нажимаете на любые из трёх кнопок - запускаетесь. А потом кнопкой стоп можете всё сразу остановить.
Для наглядности я вынес эту кнопку за циклы:). Событие для уведомителя генерируется по нажатию на копку "Стоп" и рассылается во все активные циклы.
Либо можете работать с каждым прибором по отдельности(то есть в процессе работы вы можете остановить ранее запущенные циклы,а потом работать с любым из них...но только с одним(введу архитектуры приложения). Ну или нажать СТОП, и выбрать другую пару или сразу все три прибора.)
Кстати,можно изменить архитектуру приложения. И тогда Вы сможете рулить всеми тремя приборами хоть в процессе работы,хоть в процессе конфигурирования без предварительного запуска.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Ответить

Вернуться в «Лицевая панель»