Как бы вы решили задачу с видимостью кнопок

Обсуждение, связанное с разработкой ПО верхнего уровня
Аватара пользователя
FireFly

Activity Black
expert
expert
Сообщения: 1321
Зарегистрирован: 25 апр 2009, 08:58
Награды: 2
Версия LabVIEW: 2014
Откуда: Санкт-Петербург
Поблагодарили: 1 раз

Как бы вы решили задачу с видимостью кнопок

Сообщение FireFly »

Отвечая на вопрос на LabVIEW.ru выложил пример... И задумался оптимальным ли способом я решил задачу.

Задача следующая: На ФП есть N (N>>1) кнопок. Кнопки не являются массивом! К тому же часть из них расположенна в TabPanel. Необходимо отображать их пользователю по очереди (сначала видна одна, остальные невидимые, затем другая становится видимой, первая становится невидимой и т.д.).

Как бы вы решили такую задачку? Интересен собственно подход к решению такой задачи.
Вложения
VI.vi
(19.84 КБ) 203 скачивания
SubVI.vi
(16.64 КБ) 191 скачивание
SubVI2.vi
(7.27 КБ) 171 скачивание
Последний раз редактировалось FireFly 25 авг 2009, 13:35, всего редактировалось 2 раза.
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Как бы вы решили...

Сообщение Eugen Graf »

Да, выглядит неплохо и компактно. Я бы наверное тоже так сделал.
Есть другой вариант - создать статический референс каждой кнопки и обьеденить их в массив с помощью Build Array, но конечно это место на блок диаграмме сожрёт и не будет выглядеть так компактно.
Eugene

Activity Bronze
leader
leader
Сообщения: 548
Зарегистрирован: 20 авг 2009, 17:58
Награды: 2
Версия LabVIEW: 2011
Контактная информация:

Re: Как бы вы решили...

Сообщение Eugene »

Решение достаточно хорошее, можно немного переделать SubVI - посмотри пример - queues использовать не обязательно и, конечно, надо добавить ref.array как output of function
Просто в таком виде легче to debug
Вложения
Queue Control Reference Info.vi
(24.77 КБ) 182 скачивания
We live in a graphical world.
Why not program in one?
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Как бы вы решили...

Сообщение Eugen Graf »

Клёво.
Я где то использовал рекурсивность для одного проекта:
http://www.labviewportal.org/viewtopic.php?p=158#p158

А теперь, в :labview: 2009 использовать рекурсивность стало ещё проще.
Аватара пользователя
FireFly

Activity Black
expert
expert
Сообщения: 1321
Зарегистрирован: 25 апр 2009, 08:58
Награды: 2
Версия LabVIEW: 2014
Откуда: Санкт-Петербург
Поблагодарили: 1 раз

Re: Как бы вы решили...

Сообщение FireFly »

Блин. Дома только 8.5 а посмотреть не терпится. Может кто-нибудь пересохранить?
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
Eugene

Activity Bronze
leader
leader
Сообщения: 548
Зарегистрирован: 20 авг 2009, 17:58
Награды: 2
Версия LabVIEW: 2011
Контактная информация:

Re: Как бы вы решили...

Сообщение Eugene »

Можно и 8.5 :)
Кстати на 2009 действительно добавили много полезных вещей
Вложения
Queue Control Reference Info.vi
(31.55 КБ) 164 скачивания
We live in a graphical world.
Why not program in one?
Аватара пользователя
FireFly

Activity Black
expert
expert
Сообщения: 1321
Зарегистрирован: 25 апр 2009, 08:58
Награды: 2
Версия LabVIEW: 2014
Откуда: Санкт-Петербург
Поблагодарили: 1 раз

Re: Как бы вы решили...

Сообщение FireFly »

Очень интересная рекурсия! Взял на заметку :) А ещё охото посмотреть как рекурсия организованна в 2009. Кажется скоро нам обновят :)
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
Аватара пользователя
Forward

Activity Tutorials Black
professional
professional
Сообщения: 337
Зарегистрирован: 03 мар 2008, 12:41
Награды: 3
Версия LabVIEW: 2010
Откуда: Кишинев
Контактная информация:

Re: Как бы вы решили...

Сообщение Forward »

Лично мне сразу в глаза бросился один недостаток (может незначительный, но тем не менее) в таком решении: в каждой итерации делаются невидимыми уже невидимые кнопки - много ненужных "движений" :rtfm: . Я бы вытаскивал из массива только 2 ссылки: одну кнопку прятал бы, другую показывал, остальные бы не трогал. Хотя опять таки от случая зависит; может где-то и не стоит "усложнять" код.
Eugene

Activity Bronze
leader
leader
Сообщения: 548
Зарегистрирован: 20 авг 2009, 17:58
Награды: 2
Версия LabVIEW: 2011
Контактная информация:

Re: Как бы вы решили...

Сообщение Eugene »

конечно самое правильное это отправлять толко 2 ref. Но разговор в принципе был о способе передачи
большого количества refs
We live in a graphical world.
Why not program in one?
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Как бы вы решили...

Сообщение mzu2006 »

Еще по поводу оптимизации: Не надо передавать весь массив в subvi. Вместе с тем, что говорил Forward, получается как-то так:
SubVI2.png
SubVI2.png (15.13 КБ) 6334 просмотра
(внимание - это snipplet).
Вложения
VI.vi
(15.24 КБ) 151 скачивание
SubVI2.vi
(11.08 КБ) 131 скачивание
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Как бы вы решили...

Сообщение Eugen Graf »

Оо, первый сниппет в нашем форуме. Поздравляю :1stplace:
Аватара пользователя
FireFly

Activity Black
expert
expert
Сообщения: 1321
Зарегистрирован: 25 апр 2009, 08:58
Награды: 2
Версия LabVIEW: 2014
Откуда: Санкт-Петербург
Поблагодарили: 1 раз

Re: Как бы вы решили...

Сообщение FireFly »

Про отправлять толко 2 ref это верное замечание.
Но вопрос собственно в том, нужно ли вообще использовать массив Reference, и если да, то каким способом его генерировать? Может есть какие-нибудь более оптимальные способы управления большим количеством Controls и/или индикаторов? Просто опыта работы в LabVIEW у меня совсем мало, я не знаю наверное и 10% его возможностей, вот и интерисуюсь.
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Как бы вы решили...

Сообщение mzu2006 »

FireFly писал(а):нужно ли вообще использовать массив Reference
это одна из рекомендаций NI (Labview Intermediate I)
FireFly писал(а):каким способом его генерировать?
все зависит от потребностей, я бы делал так:

1. Заранее известное количество индикаторов/кнопок (как eg и сказал) - просто статические references
2. Количество заранее неизвестно, например подгружается модуль написанный другим разработчиком, так как ты сделал
3. Количество заранее известно, но дизайн постоянно меняется, тогда берем в руки scripting и делаем автоматическую генерацию массива статическиx ссылок :crazy: :haha:

За что я люблю :labview: так это за то, что доступны все уровни сложности
Аватара пользователя
FireFly

Activity Black
expert
expert
Сообщения: 1321
Зарегистрирован: 25 апр 2009, 08:58
Награды: 2
Версия LabVIEW: 2014
Откуда: Санкт-Петербург
Поблагодарили: 1 раз

Re: Как бы вы решили...

Сообщение FireFly »

А если дизайн не меняется, количество известно, но очень велико? Использовать статические references, заняв ими половину экрана на БД? Насколько это выгоднее в плане производительности по сравнению с вариантом генерации массива?
Тогда сдедующий вопрос - нужно ли, и если да то где, использовать Close Reference?
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
Eugene

Activity Bronze
leader
leader
Сообщения: 548
Зарегистрирован: 20 авг 2009, 17:58
Награды: 2
Версия LabVIEW: 2011
Контактная информация:

Re: Как бы вы решили...

Сообщение Eugene »

NI рекомендуют всегда закрыбать refs. Конечно если в проекте какой то ref использовать все время то не нужно его закрывать
если использовать статические references то при разработке при каждом изменении FP нужно будет удалят или добавлять статические references. если же делать как FireFly сделал (или как я) то получится более универсально
We live in a graphical world.
Why not program in one?
Ответить

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