Страница 1 из 2

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

Добавлено: 31 июл 2014, 13:57
zzontt
Есть ли возможность объединить несколько кнопок в одну?
Тесть при нажатие на одну кнопку на лицевой панели, одновременно с ней нажимается еще одна или две кнопки одновременно с ней.
Как это сделать программно я не знаю так как события генерируемые этими кнопками обрабатываются в трех разных циклах работающих параллельно.

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

Добавлено: 31 июл 2014, 14:52
IvanLis
zzontt писал(а):Есть ли возможность объединить несколько кнопок в одну?
Тесть при нажатие на одну кнопку на лицевой панели, одновременно с ней нажимается еще одна или две кнопки одновременно с ней.
Как это сделать программно я не знаю так как события генерируемые этими кнопками обрабатываются в трех разных циклах работающих параллельно.
Нажатие кнопок обрабатывайте с использованием Event структуры.
Для имитации нажатия кнопки используйте Property Node -> Value(Signaling).

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

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

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

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

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

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

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

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

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

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

Добавлено: 01 авг 2014, 17:15
Vitekkz88
zzontt
Вот смотри пример на нотифаерах. Найдешь их в палитре Programm -> synchronization.
Всего ОДНА кнопка "Стоп" на 4 цикла:)
Почитай еще,что такое dataflow. Именно на этом принципе и основано программирование в LabVIEW.

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

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

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

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

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

Добавлено: 06 авг 2014, 13:23
Super Star
если вы посмотрите на пример выше, то найдете отличия
вы каждый раз создаете и удаляете нотифер

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

Добавлено: 06 авг 2014, 14:09
zzontt
Super Star писал(а):если вы посмотрите на пример выше, то найдете отличия
вы каждый раз создаете и удаляете нотифер
Да нелепая ошибка, разобрался с ней, спасибо за подсказки и наводки, если не сложно посмотрите пожалуйста еще одну новую тему которую я создал в этом разделе форума.

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

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

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

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

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

Добавлено: 08 авг 2014, 12:30
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, хочу от этого затыка избавится.

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

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