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

Нужен совет!

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

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

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

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

Добавлено: 04 фев 2019, 14:56
yakuba26
[quote="IvanLis"][quote="yakuba26"]

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

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

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

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

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

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

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

Добавлено: 05 фев 2019, 11:06
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.

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

Добавлено: 05 фев 2019, 12:09
Jakob Brontfeyn
Smotri primer

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

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

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

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

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

Добавлено: 06 фев 2019, 08:29
yakuba26
Artem.spb,

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

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

Добавлено: 06 фев 2019, 09:32
yakuba26
Нашел выход из ситуации, увеличил время задержки

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

Добавлено: 06 фев 2019, 15:20
Artem.spb
yakuba26 писал(а):Artem.spb,

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

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

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

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

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

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

Добавлено: 07 фев 2019, 23:26
IvanLis
В качестве зарядки для мозгов можете разобраться с примером.
Untitled 1.vi
lv2016
(32.34 КБ) 70 скачиваний
2.png
Untitled 2 (SubVI).vi
lv2016
(13.05 КБ) 67 скачиваний
Untitled 2 (SubVI).vi - таймер (реентерабельная subVI), который запускается в асинхронном режиме по нажатии на кнопку и по истечении 1 сек отправляет в очередь сообщение с именем нажатой кнопки.
Untitled 1.vi - собственно основная программа.
Здесь в верхнем цикле, при нажатии на конку, мы передаем таймеру название кнопки.
В нижнем цикле мы обрабатываем очередь, принимаем имя кнопки и в зависимости от нажатой кнопки зажигаем один из четырех индикаторов.

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