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

Простейшие вопросы в области инженерной разработки
Ответить
Аня
beginner
beginner
Сообщения: 27
Зарегистрирован: 25 май 2015, 20:09
Версия LabVIEW: 14.1
Контактная информация:

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

Сообщение Аня »

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

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

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

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

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


Есть ли универсальный способ решения подобной задачи?
Вложения
Пример формирования кластера ссылок для 10 элементов.
Пример формирования кластера ссылок для 10 элементов.
Последний раз редактировалось Аня 21 мар 2018, 14:47, всего редактировалось 1 раз.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5461
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

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

Сообщение IvanLis »

Вы в принципе правильно делаете.
Можно передавать ссылку на FrontPanel, потом формировать массив ([имя элемента],[ссылка]).
Потом в массиве ищите элемент по его имени, выдергиваете ссылку, обращаетесь к свойствам элемента по ссылке.
Снимок экрана от 2018-03-21 13-44-34.png
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

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

Сообщение Vitekkz88 »

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

Activity Автор
professor
professor
Сообщения: 3391
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

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

Сообщение Artem.spb »

В дополнение к предыдущему: я предпочитаю заранее подготовить кластер ссылок, чтобы не искать в массиве при работе программы. А при большом количестве контролов собираю их программно. Разница только в том, что я один раз (при запуске) трачу время на поиск контролов по имени.
Но во всех случаях работы по имени контрола есть опасность потерять что-нибудь при переименовании контрола.
Аня
beginner
beginner
Сообщения: 27
Зарегистрирован: 25 май 2015, 20:09
Версия LabVIEW: 14.1
Контактная информация:

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

Сообщение Аня »

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

Спасибо. Type-def я также использую. И по размерам у меня выходит примерно такое же полотно ссылок как и у Вас, только с дополнительными группировками на подкластеры.
Слышала, что правильно оформленный код должен вмещаться на лист А4.
Уж очень хочется спрятать всё это безобразие в какой-нибудь subVI, не привязываясь к именам и индексам.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3391
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

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

Сообщение Artem.spb »

Индексы использовать - самое опасное.а без имён в subVI не получится.
Аня
beginner
beginner
Сообщения: 27
Зарегистрирован: 25 май 2015, 20:09
Версия LabVIEW: 14.1
Контактная информация:

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

Сообщение Аня »

IvanLis писал(а):Можно передавать ссылку на FrontPanel, потом формировать массив ([имя элемента],[ссылка]).
Потом в массиве ищите элемент по его имени, выдергиваете ссылку, обращаетесь к свойствам элемента по ссылке.
Artem.spb писал(а):В дополнение к предыдущему: я предпочитаю заранее подготовить кластер ссылок, чтобы не искать в массиве при работе программы. А при большом количестве контролов собираю их программно. Разница только в том, что я один раз (при запуске) трачу время на поиск контролов по имени.
Но во всех случаях работы по имени контрола есть опасность потерять что-нибудь при переименовании контрола.
Спасибо. По-видимому, придеться так и сделать.
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

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

Сообщение Vitekkz88 »

Аня писал(а): Слышала, что правильно оформленный код должен вмещаться на лист А4.
Уж очень хочется спрятать всё это безобразие в какой-нибудь subVI, не привязываясь к именам и индексам.
Про правильно оформленный код - есть оговорка. А вот так: "По возможности старайтесь, чтоб БД умещалась на одном экране". Как видете, это не всегда возможно. Либо колдовать с OOP, но тогда дерево проекта будет расти как на дрожжах, либо развлекаться классическим способом :crazy: Я за классику :brows: Главное, чтобы подход к разработке был понятен Вам и другим разработчикам.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение dadreamer »

Аня, вот похожая тема - http://labviewportal.org/viewtopic.php?f=35&t=8488 , в которой я тоже в своё время озадачивался аналогичным вопросом. В итоге остановился на Variant'е и атрибутах (см. последний пост). В атрибуты запихиваю две пары "имя (label) контрола - reference" и "имя - индекс". Этого за глаза хватает, чтобы в любом СабВИ полноценно управлять контролом, как значением, так и его свойствами/методами. Property/Invoke Nodes вызываю только в цикле обработки UI (поток-то один), значения - хоть где (по индексам через Get/Set Control Values By Index). Единственное неудобство при таком подходе - необходимость "подглядывать" имена контролов при извлечении из Variant'а. Ну, и уникальность имён, само собой. Может, есть какие-то иные минусы, я специально не искал, ибо всё пока устраивает.
Юрий
leader
leader
Сообщения: 526
Зарегистрирован: 28 фев 2010, 18:04
Версия LabVIEW: LV2018
Благодарил (а): 10 раз
Поблагодарили: 18 раз
Контактная информация:

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

Сообщение Юрий »

В одном из больших проектов было сделано так. В екселе прописывал все имена контролов и VI, где они были, а так же примечания. Была программа, которая считывала этот екселовский файл и искала по именам все ссылки попутно создавая массив имён. На тот момент это казалось вполне удобно - и редактировать удобно и заказчик мог проанализировать и дать свои замечания. В другой работе такой же подход был и при создании тегов OPC модели ТП. Этим же файлом пользовался и программист контроллера, писавший программу для АСУ ТП.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»