Как бы вы решили задачу с видимостью кнопок
-
FireFly
- expert
- Сообщения: 1321
- Зарегистрирован: 25 апр 2009, 08:58
- Награды: 2
- Версия LabVIEW: 2014
- Откуда: Санкт-Петербург
- Поблагодарили: 1 раз
Как бы вы решили задачу с видимостью кнопок
Отвечая на вопрос на LabVIEW.ru выложил пример... И задумался оптимальным ли способом я решил задачу.
Задача следующая: На ФП есть N (N>>1) кнопок. Кнопки не являются массивом! К тому же часть из них расположенна в TabPanel. Необходимо отображать их пользователю по очереди (сначала видна одна, остальные невидимые, затем другая становится видимой, первая становится невидимой и т.д.).
Как бы вы решили такую задачку? Интересен собственно подход к решению такой задачи.
Задача следующая: На ФП есть 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
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Как бы вы решили...
Да, выглядит неплохо и компактно. Я бы наверное тоже так сделал.
Есть другой вариант - создать статический референс каждой кнопки и обьеденить их в массив с помощью Build Array, но конечно это место на блок диаграмме сожрёт и не будет выглядеть так компактно.
Есть другой вариант - создать статический референс каждой кнопки и обьеденить их в массив с помощью Build Array, но конечно это место на блок диаграмме сожрёт и не будет выглядеть так компактно.
-
- leader
- Сообщения: 548
- Зарегистрирован: 20 авг 2009, 17:58
- Награды: 2
- Версия LabVIEW: 2011
- Контактная информация:
Re: Как бы вы решили...
Решение достаточно хорошее, можно немного переделать SubVI - посмотри пример - queues использовать не обязательно и, конечно, надо добавить ref.array как output of function
Просто в таком виде легче to debug
Просто в таком виде легче to debug
- Вложения
-
- Queue Control Reference Info.vi
- (24.77 КБ) 182 скачивания
We live in a graphical world.
Why not program in one?
Why not program in one?
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Как бы вы решили...
Клёво.
Я где то использовал рекурсивность для одного проекта:
http://www.labviewportal.org/viewtopic.php?p=158#p158
А теперь, в 2009 использовать рекурсивность стало ещё проще.
Я где то использовал рекурсивность для одного проекта:
http://www.labviewportal.org/viewtopic.php?p=158#p158
А теперь, в 2009 использовать рекурсивность стало ещё проще.
-
FireFly
- expert
- Сообщения: 1321
- Зарегистрирован: 25 апр 2009, 08:58
- Награды: 2
- Версия LabVIEW: 2014
- Откуда: Санкт-Петербург
- Поблагодарили: 1 раз
Re: Как бы вы решили...
Блин. Дома только 8.5 а посмотреть не терпится. Может кто-нибудь пересохранить?
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
-
- leader
- Сообщения: 548
- Зарегистрирован: 20 авг 2009, 17:58
- Награды: 2
- Версия LabVIEW: 2011
- Контактная информация:
Re: Как бы вы решили...
Можно и 8.5 :)
Кстати на 2009 действительно добавили много полезных вещей
Кстати на 2009 действительно добавили много полезных вещей
- Вложения
-
- Queue Control Reference Info.vi
- (31.55 КБ) 164 скачивания
We live in a graphical world.
Why not program in one?
Why not program in one?
-
FireFly
- expert
- Сообщения: 1321
- Зарегистрирован: 25 апр 2009, 08:58
- Награды: 2
- Версия LabVIEW: 2014
- Откуда: Санкт-Петербург
- Поблагодарили: 1 раз
Re: Как бы вы решили...
Очень интересная рекурсия! Взял на заметку :) А ещё охото посмотреть как рекурсия организованна в 2009. Кажется скоро нам обновят :)
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
-
Forward
- professional
- Сообщения: 337
- Зарегистрирован: 03 мар 2008, 12:41
- Награды: 3
- Версия LabVIEW: 2010
- Откуда: Кишинев
- Контактная информация:
Re: Как бы вы решили...
Лично мне сразу в глаза бросился один недостаток (может незначительный, но тем не менее) в таком решении: в каждой итерации делаются невидимыми уже невидимые кнопки - много ненужных "движений" . Я бы вытаскивал из массива только 2 ссылки: одну кнопку прятал бы, другую показывал, остальные бы не трогал. Хотя опять таки от случая зависит; может где-то и не стоит "усложнять" код.
-
- leader
- Сообщения: 548
- Зарегистрирован: 20 авг 2009, 17:58
- Награды: 2
- Версия LabVIEW: 2011
- Контактная информация:
Re: Как бы вы решили...
конечно самое правильное это отправлять толко 2 ref. Но разговор в принципе был о способе передачи
большого количества refs
большого количества refs
We live in a graphical world.
Why not program in one?
Why not program in one?
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Как бы вы решили...
Еще по поводу оптимизации: Не надо передавать весь массив в subvi. Вместе с тем, что говорил Forward, получается как-то так: (внимание - это snipplet).
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
-
FireFly
- expert
- Сообщения: 1321
- Зарегистрирован: 25 апр 2009, 08:58
- Награды: 2
- Версия LabVIEW: 2014
- Откуда: Санкт-Петербург
- Поблагодарили: 1 раз
Re: Как бы вы решили...
Про отправлять толко 2 ref это верное замечание.
Но вопрос собственно в том, нужно ли вообще использовать массив Reference, и если да, то каким способом его генерировать? Может есть какие-нибудь более оптимальные способы управления большим количеством Controls и/или индикаторов? Просто опыта работы в LabVIEW у меня совсем мало, я не знаю наверное и 10% его возможностей, вот и интерисуюсь.
Но вопрос собственно в том, нужно ли вообще использовать массив Reference, и если да, то каким способом его генерировать? Может есть какие-нибудь более оптимальные способы управления большим количеством Controls и/или индикаторов? Просто опыта работы в LabVIEW у меня совсем мало, я не знаю наверное и 10% его возможностей, вот и интерисуюсь.
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Как бы вы решили...
это одна из рекомендаций NI (Labview Intermediate I)FireFly писал(а):нужно ли вообще использовать массив Reference
все зависит от потребностей, я бы делал так:FireFly писал(а):каким способом его генерировать?
1. Заранее известное количество индикаторов/кнопок (как eg и сказал) - просто статические references
2. Количество заранее неизвестно, например подгружается модуль написанный другим разработчиком, так как ты сделал
3. Количество заранее известно, но дизайн постоянно меняется, тогда берем в руки scripting и делаем автоматическую генерацию массива статическиx ссылок
За что я люблю так это за то, что доступны все уровни сложности
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
FireFly
- expert
- Сообщения: 1321
- Зарегистрирован: 25 апр 2009, 08:58
- Награды: 2
- Версия LabVIEW: 2014
- Откуда: Санкт-Петербург
- Поблагодарили: 1 раз
Re: Как бы вы решили...
А если дизайн не меняется, количество известно, но очень велико? Использовать статические references, заняв ими половину экрана на БД? Насколько это выгоднее в плане производительности по сравнению с вариантом генерации массива?
Тогда сдедующий вопрос - нужно ли, и если да то где, использовать Close Reference?
Тогда сдедующий вопрос - нужно ли, и если да то где, использовать Close Reference?
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
-
- leader
- Сообщения: 548
- Зарегистрирован: 20 авг 2009, 17:58
- Награды: 2
- Версия LabVIEW: 2011
- Контактная информация:
Re: Как бы вы решили...
NI рекомендуют всегда закрыбать refs. Конечно если в проекте какой то ref использовать все время то не нужно его закрывать
если использовать статические references то при разработке при каждом изменении FP нужно будет удалят или добавлять статические references. если же делать как FireFly сделал (или как я) то получится более универсально
если использовать статические references то при разработке при каждом изменении FP нужно будет удалят или добавлять статические references. если же делать как FireFly сделал (или как я) то получится более универсально
We live in a graphical world.
Why not program in one?
Why not program in one?