Грамотная работа со ссылками

Простейшие вопросы в области инженерной разработки

Грамотная работа со ссылками

Postby Аня on 21 Mar 2018, 11:53

Есть VI, содержащий на лицевой панели множество разноплановых элементов.

При взаимодействии пользователя с любым из них, происходят изменения в свойствах других элементов.
К примеру, при нажатии на кнопку Boolean, изменяется свойство Color у элемента Cluster, свойства Boolean text и Color у другой кнопки, а также значение элемента Enum.

Чтобы не запутаться, в начале выполнения программы я формирую кластер, состоящий из ссылок на все необходимые контролы. И, в зависимости от события, передаю его на вход тому или иному VI, в котором и происходят изменения свойств.

Проблема заключается в формировании этого кластера ссылок. Если количество элементов достигает нескольких десятков, то ссылки на них начинают занимать пространство большее чем весь остальной программный код, что затрудняет его читаемость.

Пробовала вместо кластера передавать только одну ссылку на текущий VI, из которой в SubVI получала Referense на все элементы и по Control Index выбирала из массива необходимый. Но в данном случае, необходимо помнить Control Index каждого элемента, и соблюдать осторожность при их удалении.


Есть ли универсальный способ решения подобной задачи?
Attachments
пример.png
Пример формирования кластера ссылок для 10 элементов.
Last edited by Аня on 21 Mar 2018, 14:47, edited 1 time in total.
Аня
beginner
beginner
 
Posts: 27
Joined: 25 May 2015, 20:09
LabVIEW Version: 14.1
Karma: 0

Re: Грамотная работа со ссылками

Postby IvanLis on 21 Mar 2018, 13:48

Вы в принципе правильно делаете.
Можно передавать ссылку на FrontPanel, потом формировать массив ([имя элемента],[ссылка]).
Потом в массиве ищите элемент по его имени, выдергиваете ссылку, обращаетесь к свойствам элемента по ссылке.
Снимок экрана от 2018-03-21 13-44-34.png
User avatar
IvanLis
professor
professor
 
Posts: 4653
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 730
hardware VIP bloggers teachers

Re: Грамотная работа со ссылками

Postby Vitekkz88 on 21 Mar 2018, 14:04

Аня, А Вам шашечки или ехать? :crazy:
Я делаю так, как привык: только через кластер ссылок. Кстати, входной кластер для boundle cluster переводите в type-def. Тогда и вход SubVi не надо будет править постоянно путём копипаста.
Варианты с именами и индексами тоже используются, но Вы сэкономите в одном месте, а в другом добавите. Скажем так, это издержки среды разработки :brows:
Attachments
Ref.png
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
User avatar
Vitekkz88
expert
expert
 
Posts: 1047
Joined: 21 Jan 2014, 15:45
Location: Томск
Medals: 3
Activity (1) Silver (1) Автор (1)
LabVIEW Version: 12,13,14
Karma: 301
hardware I/O VIP

Re: Грамотная работа со ссылками

Postby Artem.spb on 21 Mar 2018, 14:11

В дополнение к предыдущему: я предпочитаю заранее подготовить кластер ссылок, чтобы не искать в массиве при работе программы. А при большом количестве контролов собираю их программно. Разница только в том, что я один раз (при запуске) трачу время на поиск контролов по имени.
Но во всех случаях работы по имени контрола есть опасность потерять что-нибудь при переименовании контрола.
Artem.spb
expert
expert
 
Posts: 1443
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 248
CLD hardware I/O VIP freelance

Re: Грамотная работа со ссылками

Postby Аня on 21 Mar 2018, 14:13

Vitekkz88 wrote:Аня, А Вам шашечки или ехать? :crazy:
Я делаю так, как привык: только через кластер ссылок. Кстати, входной кластер для boundle cluster переводите в type-def. Тогда и вход SubVi не надо будет править постоянно путём копипаста.
Варианты с именами и индексами тоже используются, но Вы сэкономите в одном месте, а в другом добавите. Скажем так, это издержки среды разработки :brows:



Спасибо. Type-def я также использую. И по размерам у меня выходит примерно такое же полотно ссылок как и у Вас, только с дополнительными группировками на подкластеры.
Слышала, что правильно оформленный код должен вмещаться на лист А4.
Уж очень хочется спрятать всё это безобразие в какой-нибудь subVI, не привязываясь к именам и индексам.
Аня
beginner
beginner
 
Posts: 27
Joined: 25 May 2015, 20:09
LabVIEW Version: 14.1
Karma: 0

Re: Грамотная работа со ссылками

Postby Artem.spb on 21 Mar 2018, 14:22

Индексы использовать - самое опасное.а без имён в subVI не получится.
Artem.spb
expert
expert
 
Posts: 1443
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 248
CLD hardware I/O VIP freelance

Re: Грамотная работа со ссылками

Postby Аня on 21 Mar 2018, 14:24

IvanLis wrote:Можно передавать ссылку на FrontPanel, потом формировать массив ([имя элемента],[ссылка]).
Потом в массиве ищите элемент по его имени, выдергиваете ссылку, обращаетесь к свойствам элемента по ссылке.

Artem.spb wrote:В дополнение к предыдущему: я предпочитаю заранее подготовить кластер ссылок, чтобы не искать в массиве при работе программы. А при большом количестве контролов собираю их программно. Разница только в том, что я один раз (при запуске) трачу время на поиск контролов по имени.
Но во всех случаях работы по имени контрола есть опасность потерять что-нибудь при переименовании контрола.

Спасибо. По-видимому, придеться так и сделать.
Аня
beginner
beginner
 
Posts: 27
Joined: 25 May 2015, 20:09
LabVIEW Version: 14.1
Karma: 0

Re: Грамотная работа со ссылками

Postby Vitekkz88 on 21 Mar 2018, 14:30

Аня писал(а): Слышала, что правильно оформленный код должен вмещаться на лист А4.
Уж очень хочется спрятать всё это безобразие в какой-нибудь subVI, не привязываясь к именам и индексам.

Про правильно оформленный код - есть оговорка. А вот так: "По возможности старайтесь, чтоб БД умещалась на одном экране". Как видете, это не всегда возможно. Либо колдовать с OOP, но тогда дерево проекта будет расти как на дрожжах, либо развлекаться классическим способом :crazy: Я за классику :brows: Главное, чтобы подход к разработке был понятен Вам и другим разработчикам.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
User avatar
Vitekkz88
expert
expert
 
Posts: 1047
Joined: 21 Jan 2014, 15:45
Location: Томск
Medals: 3
Activity (1) Silver (1) Автор (1)
LabVIEW Version: 12,13,14
Karma: 301
hardware I/O VIP

Re: Грамотная работа со ссылками

Postby dadreamer on 21 Mar 2018, 15:02

Аня, вот похожая тема - viewtopic.php?f=35&t=8488 , в которой я тоже в своё время озадачивался аналогичным вопросом. В итоге остановился на Variant'е и атрибутах (см. последний пост). В атрибуты запихиваю две пары "имя (label) контрола - reference" и "имя - индекс". Этого за глаза хватает, чтобы в любом СабВИ полноценно управлять контролом, как значением, так и его свойствами/методами. Property/Invoke Nodes вызываю только в цикле обработки UI (поток-то один), значения - хоть где (по индексам через Get/Set Control Values By Index). Единственное неудобство при таком подходе - необходимость "подглядывать" имена контролов при извлечении из Variant'а. Ну, и уникальность имён, само собой. Может, есть какие-то иные минусы, я специально не искал, ибо всё пока устраивает.
User avatar
dadreamer
professor
professor
 
Posts: 3157
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 803
I/O VIP vision internet

Re: Грамотная работа со ссылками

Postby Юрий on 21 Mar 2018, 20:23

В одном из больших проектов было сделано так. В екселе прописывал все имена контролов и VI, где они были, а так же примечания. Была программа, которая считывала этот екселовский файл и искала по именам все ссылки попутно создавая массив имён. На тот момент это казалось вполне удобно - и редактировать удобно и заказчик мог проанализировать и дать свои замечания. В другой работе такой же подход был и при создании тегов OPC модели ТП. Этим же файлом пользовался и программист контроллера, писавший программу для АСУ ТП.
Юрий
developer
developer
 
Posts: 290
Joined: 28 Feb 2010, 18:04
LabVIEW Version: LV2015
Karma: 52


Return to Для чайников

Who is online

Users browsing this forum: No registered users and 12 guests

cron