Нужен совет!

Простейшие вопросы в области инженерной разработки
Ответить
yakuba26
junior
junior
Сообщения: 66
Зарегистрирован: 13 дек 2018, 13:55
Репутация: 0
Версия LabVIEW: 2018
Откуда: Саратов

Нужен совет!

Сообщение yakuba26 »

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

Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
professor
professor
Сообщения: 4933
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Репутация: 0
Версия LabVIEW: 2015, 2016
Откуда: СССР

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

Сообщение IvanLis »

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

yakuba26
junior
junior
Сообщения: 66
Зарегистрирован: 13 дек 2018, 13:55
Репутация: 0
Версия LabVIEW: 2018
Откуда: Саратов

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

Сообщение yakuba26 »

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

Я понимаю, что сделал полную ерунду, но больше на ум не приходит.
Вложения
Untitled 1.vi
(7.92 КБ) 36 скачиваний

Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
professor
professor
Сообщения: 4933
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Репутация: 0
Версия LabVIEW: 2015, 2016
Откуда: СССР

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

Сообщение IvanLis »

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

Откройте любой пример с использованием очереди и найдите отличия логике работы.

yakuba26
junior
junior
Сообщения: 66
Зарегистрирован: 13 дек 2018, 13:55
Репутация: 0
Версия LabVIEW: 2018
Откуда: Саратов

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

Сообщение yakuba26 »

IvanLis писал(а): И писать события последовательно, именно в той очередности как они генерируются.
В цикле обработки необходимо добавить задержку после фиксации события перед изменением состояния индикатора. События обрабатывать последовательно.
Не могли показать небольшим примером если не сложно :help: :thank: Про эвент и задержку понял, но вот более подходящий пример так и не нашел :think:

Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
professor
professor
Сообщения: 4933
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Репутация: 0
Версия LabVIEW: 2015, 2016
Откуда: СССР

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

Сообщение IvanLis »

yakuba26 писал(а):Не могли показать небольшим примером если не сложно :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.

Аватара пользователя
Jakob Brontfeyn

Activity Gold Silver Black
expert
expert
Сообщения: 1704
Зарегистрирован: 28 фев 2008, 11:01
Награды: 6
Репутация: 0
Контактная информация:

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

Сообщение Jakob Brontfeyn »

Smotri primer
Вложения
knopki_delay_1.llb
(77.03 КБ) 33 скачивания

yakuba26
junior
junior
Сообщения: 66
Зарегистрирован: 13 дек 2018, 13:55
Репутация: 0
Версия LabVIEW: 2018
Откуда: Саратов

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

Сообщение yakuba26 »

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

Artem.spb

Activity Автор
expert
expert
Сообщения: 1936
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Репутация: 0
Версия LabVIEW: 12-18
Контактная информация:

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

Сообщение Artem.spb »

yakuba26 писал(а):Можете пожайлуста подсказать, как сделать, что бы на выходе из очереди, булиновский элемент очереди передовался определенному индикатору?
( тип данных очереди булиновский ) :help:
Если элементы попадают в очередь в строгом порядке, то проверяйте индекс цикла (например, case-структурой), и в зависимости от него действуйте
Если элементы попадают в очередь в случайном порядке, то никак.
Измените очередь: отправляйте кластер: получатель и значение. Дальше опять case-структурой

yakuba26
junior
junior
Сообщения: 66
Зарегистрирован: 13 дек 2018, 13:55
Репутация: 0
Версия LabVIEW: 2018
Откуда: Саратов

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

Сообщение yakuba26 »

Artem.spb,

Не могли бы подсказать, как сделать задержку в очереди? Ставлю обычную задержку она не работает, очередь не тормозится. Хочу что бы элементы из очереди удалялись ( считывались с задержкой ). Решил пока кейсы не ставить, попробовать на сравнении.
Вложения
Безымянный.png

yakuba26
junior
junior
Сообщения: 66
Зарегистрирован: 13 дек 2018, 13:55
Репутация: 0
Версия LabVIEW: 2018
Откуда: Саратов

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

Сообщение yakuba26 »

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

Artem.spb

Activity Автор
expert
expert
Сообщения: 1936
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Репутация: 0
Версия LabVIEW: 12-18
Контактная информация:

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

Сообщение Artem.spb »

yakuba26 писал(а):Artem.spb,

Хочу что бы элементы из очереди удалялись ( считывались с задержкой ).
что за дикая дикость? элементы из очереди должны извлекаться как можно быстрее, без всяких задержек. Задержка, если уж нужна, должна быть на стороне отправки. Иначе, если отправка идёт чаще, чем чтение, у вас очередь будет бесконечно расти.

Blackman

Activity
leader
leader
Сообщения: 929
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Репутация: 0
Версия LabVIEW: 6.1,8.5,20
Контактная информация:

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

Сообщение Blackman »

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

yakuba26
junior
junior
Сообщения: 66
Зарегистрирован: 13 дек 2018, 13:55
Репутация: 0
Версия LabVIEW: 2018
Откуда: Саратов

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

Сообщение yakuba26 »

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

Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
professor
professor
Сообщения: 4933
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Репутация: 0
Версия LabVIEW: 2015, 2016
Откуда: СССР

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

Сообщение IvanLis »

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

Это может и не самое элегантное решение, но наверняка самое ресурсо экономичное.
И не забудьте правильно указать путь к таймеру в статической ссылке (указана стрелкой).

Ответить

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