Есть VI, содержащий на лицевой панели множество разноплановых элементов.
При взаимодействии пользователя с любым из них, происходят изменения в свойствах других элементов.
К примеру, при нажатии на кнопку Boolean, изменяется свойство Color у элемента Cluster, свойства Boolean text и Color у другой кнопки, а также значение элемента Enum.
Чтобы не запутаться, в начале выполнения программы я формирую кластер, состоящий из ссылок на все необходимые контролы. И, в зависимости от события, передаю его на вход тому или иному VI, в котором и происходят изменения свойств.
Проблема заключается в формировании этого кластера ссылок. Если количество элементов достигает нескольких десятков, то ссылки на них начинают занимать пространство большее чем весь остальной программный код, что затрудняет его читаемость.
Пробовала вместо кластера передавать только одну ссылку на текущий VI, из которой в SubVI получала Referense на все элементы и по Control Index выбирала из массива необходимый. Но в данном случае, необходимо помнить Control Index каждого элемента, и соблюдать осторожность при их удалении.
Есть ли универсальный способ решения подобной задачи?
Грамотная работа со ссылками
-
- beginner
- Сообщения: 27
- Зарегистрирован: 25 май 2015, 20:09
- Версия LabVIEW: 14.1
- Контактная информация:
Грамотная работа со ссылками
Последний раз редактировалось Аня 21 мар 2018, 14:47, всего редактировалось 1 раз.
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Грамотная работа со ссылками
Вы в принципе правильно делаете.
Можно передавать ссылку на FrontPanel, потом формировать массив ([имя элемента],[ссылка]).
Потом в массиве ищите элемент по его имени, выдергиваете ссылку, обращаетесь к свойствам элемента по ссылке.
Можно передавать ссылку на FrontPanel, потом формировать массив ([имя элемента],[ссылка]).
Потом в массиве ищите элемент по его имени, выдергиваете ссылку, обращаетесь к свойствам элемента по ссылке.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: Грамотная работа со ссылками
Аня, А Вам шашечки или ехать?
Я делаю так, как привык: только через кластер ссылок. Кстати, входной кластер для boundle cluster переводите в type-def. Тогда и вход SubVi не надо будет править постоянно путём копипаста.
Варианты с именами и индексами тоже используются, но Вы сэкономите в одном месте, а в другом добавите. Скажем так, это издержки среды разработки![:brows: :brows:](./images/smilies/eyebrows.gif)
![:crazy: :crazy:](./images/smilies/icon_crazy.gif)
Я делаю так, как привык: только через кластер ссылок. Кстати, входной кластер для boundle cluster переводите в type-def. Тогда и вход SubVi не надо будет править постоянно путём копипаста.
Варианты с именами и индексами тоже используются, но Вы сэкономите в одном месте, а в другом добавите. Скажем так, это издержки среды разработки
![:brows: :brows:](./images/smilies/eyebrows.gif)
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
-
- professor
- Сообщения: 3410
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Грамотная работа со ссылками
В дополнение к предыдущему: я предпочитаю заранее подготовить кластер ссылок, чтобы не искать в массиве при работе программы. А при большом количестве контролов собираю их программно. Разница только в том, что я один раз (при запуске) трачу время на поиск контролов по имени.
Но во всех случаях работы по имени контрола есть опасность потерять что-нибудь при переименовании контрола.
Но во всех случаях работы по имени контрола есть опасность потерять что-нибудь при переименовании контрола.
-
- beginner
- Сообщения: 27
- Зарегистрирован: 25 май 2015, 20:09
- Версия LabVIEW: 14.1
- Контактная информация:
Re: Грамотная работа со ссылками
Vitekkz88 писал(а):Аня, А Вам шашечки или ехать?![]()
Я делаю так, как привык: только через кластер ссылок. Кстати, входной кластер для boundle cluster переводите в type-def. Тогда и вход SubVi не надо будет править постоянно путём копипаста.
Варианты с именами и индексами тоже используются, но Вы сэкономите в одном месте, а в другом добавите. Скажем так, это издержки среды разработки
Спасибо. Type-def я также использую. И по размерам у меня выходит примерно такое же полотно ссылок как и у Вас, только с дополнительными группировками на подкластеры.
Слышала, что правильно оформленный код должен вмещаться на лист А4.
Уж очень хочется спрятать всё это безобразие в какой-нибудь subVI, не привязываясь к именам и индексам.
-
- professor
- Сообщения: 3410
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Грамотная работа со ссылками
Индексы использовать - самое опасное.а без имён в subVI не получится.
-
- beginner
- Сообщения: 27
- Зарегистрирован: 25 май 2015, 20:09
- Версия LabVIEW: 14.1
- Контактная информация:
Re: Грамотная работа со ссылками
IvanLis писал(а):Можно передавать ссылку на FrontPanel, потом формировать массив ([имя элемента],[ссылка]).
Потом в массиве ищите элемент по его имени, выдергиваете ссылку, обращаетесь к свойствам элемента по ссылке.
Спасибо. По-видимому, придеться так и сделать.Artem.spb писал(а):В дополнение к предыдущему: я предпочитаю заранее подготовить кластер ссылок, чтобы не искать в массиве при работе программы. А при большом количестве контролов собираю их программно. Разница только в том, что я один раз (при запуске) трачу время на поиск контролов по имени.
Но во всех случаях работы по имени контрола есть опасность потерять что-нибудь при переименовании контрола.
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: Грамотная работа со ссылками
Про правильно оформленный код - есть оговорка. А вот так: "По возможности старайтесь, чтоб БД умещалась на одном экране". Как видете, это не всегда возможно. Либо колдовать с OOP, но тогда дерево проекта будет расти как на дрожжах, либо развлекаться классическим способомАня писал(а): Слышала, что правильно оформленный код должен вмещаться на лист А4.
Уж очень хочется спрятать всё это безобразие в какой-нибудь subVI, не привязываясь к именам и индексам.
![:crazy: :crazy:](./images/smilies/icon_crazy.gif)
![:brows: :brows:](./images/smilies/eyebrows.gif)
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Грамотная работа со ссылками
Аня, вот похожая тема - http://labviewportal.org/viewtopic.php?f=35&t=8488 , в которой я тоже в своё время озадачивался аналогичным вопросом. В итоге остановился на Variant'е и атрибутах (см. последний пост). В атрибуты запихиваю две пары "имя (label) контрола - reference" и "имя - индекс". Этого за глаза хватает, чтобы в любом СабВИ полноценно управлять контролом, как значением, так и его свойствами/методами. Property/Invoke Nodes вызываю только в цикле обработки UI (поток-то один), значения - хоть где (по индексам через Get/Set Control Values By Index). Единственное неудобство при таком подходе - необходимость "подглядывать" имена контролов при извлечении из Variant'а. Ну, и уникальность имён, само собой. Может, есть какие-то иные минусы, я специально не искал, ибо всё пока устраивает.
-
- leader
- Сообщения: 526
- Зарегистрирован: 28 фев 2010, 18:04
- Версия LabVIEW: LV2018
- Благодарил (а): 10 раз
- Поблагодарили: 18 раз
- Контактная информация:
Re: Грамотная работа со ссылками
В одном из больших проектов было сделано так. В екселе прописывал все имена контролов и VI, где они были, а так же примечания. Была программа, которая считывала этот екселовский файл и искала по именам все ссылки попутно создавая массив имён. На тот момент это казалось вполне удобно - и редактировать удобно и заказчик мог проанализировать и дать свои замечания. В другой работе такой же подход был и при создании тегов OPC модели ТП. Этим же файлом пользовался и программист контроллера, писавший программу для АСУ ТП.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 16 Ответы
- 3268 Просмотры
-
Последнее сообщение Artem.spb
-
- 4 Ответы
- 226 Просмотры
-
Последнее сообщение Andrew Lunev