Нужен совет!

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

Нужен совет!

Postby yakuba26 on 04 Feb 2019, 12:11

Мужики выручите :help: застрял на такой штуке. Мне нужно что бы я прокликал кнопки, а индикаторы загорелись в той последовательности в которой кликал, но с задержкой в секунду. Т.е я быстро все их кликнул, а они с задержкой друг за другом включились. Пробовал сделать с очередью Queue, но что то не выходит. Помогите советом, как сделать правильно?
yakuba26
beginner
beginner
 
Posts: 45
Joined: 13 Dec 2018, 13:55
Location: Саратов
LabVIEW Version: 2018
Karma: 0

Re: Нужен совет!

Postby IvanLis on 04 Feb 2019, 14:07

yakuba26 wrote:Мужики выручите :help: застрял на такой штуке. Мне нужно что бы я прокликал кнопки, а индикаторы загорелись в той последовательности в которой кликал, но с задержкой в секунду. Т.е я быстро все их кликнул, а они с задержкой друг за другом включились. Пробовал сделать с очередью Queue, но что то не выходит. Помогите советом, как сделать правильно?

Мужик, с очередью тоже должно работать, только цикл обработки очереди должен медленнее работать, чем производитель событий. Выкладывайте, что Вы уже сделали, будем разбираться в чем ошибка.
User avatar
IvanLis
professor
professor
 
Posts: 4699
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 740
hardware VIP bloggers teachers

Re: Нужен совет!

Postby yakuba26 on 04 Feb 2019, 14:56

[quote="IvanLis"][quote="yakuba26"]

Я понимаю, что сделал полную ерунду, но больше на ум не приходит.
Attachments
Untitled 1.vi
(7.92 KiB) Downloaded 11 times
yakuba26
beginner
beginner
 
Posts: 45
Joined: 13 Dec 2018, 13:55
Location: Саратов
LabVIEW Version: 2018
Karma: 0

Re: Нужен совет!

Postby IvanLis on 04 Feb 2019, 15:31

yakuba26 wrote:Я понимаю, что сделал полную ерунду, но больше на ум не приходит.

Вам необходимо в цикле отправки использовать EventCase, что бы событие генерировалось только при нажатии кнопки. И писать события последовательно, именно в той очередности как они генерируются.
В цикле обработки необходимо добавить задержку после фиксации события перед изменением состояния индикатора. События обрабатывать последовательно.

Откройте любой пример с использованием очереди и найдите отличия логике работы.
User avatar
IvanLis
professor
professor
 
Posts: 4699
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 740
hardware VIP bloggers teachers

Re: Нужен совет!

Postby yakuba26 on 05 Feb 2019, 10:28

IvanLis wrote: И писать события последовательно, именно в той очередности как они генерируются.
В цикле обработки необходимо добавить задержку после фиксации события перед изменением состояния индикатора. События обрабатывать последовательно.



Не могли показать небольшим примером если не сложно :help: :thank: Про эвент и задержку понял, но вот более подходящий пример так и не нашел :think:
yakuba26
beginner
beginner
 
Posts: 45
Joined: 13 Dec 2018, 13:55
Location: Саратов
LabVIEW Version: 2018
Karma: 0

Re: Нужен совет!

Postby IvanLis on 05 Feb 2019, 11:06

yakuba26 wrote:Не могли показать небольшим примером если не сложно :help: :thank: Про эвент и задержку понял, но вот более подходящий пример так и не нашел :think:

Примера выполнения Вашей задачи Вы и не найдете.
За основу нужно брать стандартные примеры:
Example
Refer to the Queue Overflow and Underflow VI in the labview\examples\Synchronization\Queue directory for an example of using the Obtain Queue function.
User avatar
IvanLis
professor
professor
 
Posts: 4699
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 740
hardware VIP bloggers teachers

Re: Нужен совет!

Postby Jakob Brontfeyn on 05 Feb 2019, 12:09

Smotri primer
Attachments
knopki_delay_1.llb
(77.03 KiB) Downloaded 11 times
User avatar
Jakob Brontfeyn
expert
expert
 
Posts: 1704
Joined: 28 Feb 2008, 11:01
Medals: 6
Activity (1) Gold (1) Silver (2) Black (2)
Karma: 237
VIP

Re: Нужен совет!

Postby yakuba26 on 05 Feb 2019, 15:27

Можете пожайлуста подсказать, как сделать, что бы на выходе из очереди, булиновский элемент очереди передовался определенному индикатору?
( тип данных очереди булиновский ) :help:
yakuba26
beginner
beginner
 
Posts: 45
Joined: 13 Dec 2018, 13:55
Location: Саратов
LabVIEW Version: 2018
Karma: 0

Re: Нужен совет!

Postby Artem.spb on 05 Feb 2019, 22:23

yakuba26 wrote:Можете пожайлуста подсказать, как сделать, что бы на выходе из очереди, булиновский элемент очереди передовался определенному индикатору?
( тип данных очереди булиновский ) :help:


Если элементы попадают в очередь в строгом порядке, то проверяйте индекс цикла (например, case-структурой), и в зависимости от него действуйте
Если элементы попадают в очередь в случайном порядке, то никак.
Измените очередь: отправляйте кластер: получатель и значение. Дальше опять case-структурой
Artem.spb
expert
expert
 
Posts: 1494
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 250
CLD hardware I/O VIP freelance

Re: Нужен совет!

Postby yakuba26 on 06 Feb 2019, 08:29

Artem.spb,

Не могли бы подсказать, как сделать задержку в очереди? Ставлю обычную задержку она не работает, очередь не тормозится. Хочу что бы элементы из очереди удалялись ( считывались с задержкой ). Решил пока кейсы не ставить, попробовать на сравнении.
Attachments
Безымянный.png
yakuba26
beginner
beginner
 
Posts: 45
Joined: 13 Dec 2018, 13:55
Location: Саратов
LabVIEW Version: 2018
Karma: 0

Re: Нужен совет!

Postby yakuba26 on 06 Feb 2019, 09:32

Нашел выход из ситуации, увеличил время задержки
yakuba26
beginner
beginner
 
Posts: 45
Joined: 13 Dec 2018, 13:55
Location: Саратов
LabVIEW Version: 2018
Karma: 0

Re: Нужен совет!

Postby Artem.spb on 06 Feb 2019, 15:20

yakuba26 wrote:Artem.spb,

Хочу что бы элементы из очереди удалялись ( считывались с задержкой ).


что за дикая дикость? элементы из очереди должны извлекаться как можно быстрее, без всяких задержек. Задержка, если уж нужна, должна быть на стороне отправки. Иначе, если отправка идёт чаще, чем чтение, у вас очередь будет бесконечно расти.
Artem.spb
expert
expert
 
Posts: 1494
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 250
CLD hardware I/O VIP freelance

Re: Нужен совет!

Postby Blackman on 06 Feb 2019, 18:26

yakuba26 wrote:Нашел выход из ситуации, увеличил время задержки

:nono: Это не выход - тупик. :D
Событие Mouse Down не обязательно приводит к изменению состояния кнопки. В результате это может привести к не соответствию значения (состояния) кнопки значению (состоянию) индикатора. В приведенном примере задержка задается контролом duration (msec). Попробуйте быстро щелкать по кнопке не дожидаясь реакции индикатора.
Attachments
Simple Cmd Queue Example.png
Blackman
leader
leader
 
Posts: 823
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 243
VIP

Re: Нужен совет!

Postby yakuba26 on 07 Feb 2019, 08:39

Blackman wrote:
yakuba26 wrote:Нашел выход из ситуации, увеличил время задержки

:nono: Это не выход - тупик. :D
Событие Mouse Down не обязательно приводит к изменению состояния кнопки. В результате это может привести к не соответствию значения (состояния) кнопки значению (состоянию) индикатора. В приведенном примере задержка задается контролом duration (msec). Попробуйте быстро щелкать по кнопке не дожидаясь реакции индикатора.


Ну пока осечек не было с Mouse Down. Вот как сделал в итоге. У меня стоповые кнопки идет в приоритете над пусковыми ( остальные ивенты идентичны ). Потом всю эту очередь буду посылать в порт.
А что у вас за блоки для назначения ссылки на очередь? Нигде не встречал таких.
Attachments
11.png
Пусковая
222.png
Стоповая
yakuba26
beginner
beginner
 
Posts: 45
Joined: 13 Dec 2018, 13:55
Location: Саратов
LabVIEW Version: 2018
Karma: 0

Re: Нужен совет!

Postby IvanLis on 07 Feb 2019, 23:26

В качестве зарядки для мозгов можете разобраться с примером.
Untitled 1.vi
lv2016
(32.34 KiB) Downloaded 4 times

2.png

Untitled 2 (SubVI).vi
lv2016
(13.05 KiB) Downloaded 5 times


Untitled 2 (SubVI).vi - таймер (реентерабельная subVI), который запускается в асинхронном режиме по нажатии на кнопку и по истечении 1 сек отправляет в очередь сообщение с именем нажатой кнопки.
Untitled 1.vi - собственно основная программа.
Здесь в верхнем цикле, при нажатии на конку, мы передаем таймеру название кнопки.
В нижнем цикле мы обрабатываем очередь, принимаем имя кнопки и в зависимости от нажатой кнопки зажигаем один из четырех индикаторов.

Это может и не самое элегантное решение, но наверняка самое ресурсо экономичное.
И не забудьте правильно указать путь к таймеру в статической ссылке (указана стрелкой).
User avatar
IvanLis
professor
professor
 
Posts: 4699
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 740
hardware VIP bloggers teachers


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

Who is online

Users browsing this forum: No registered users and 7 guests

cron