Страница 1 из 1

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

Добавлено: 21 мар 2018, 11:53
Аня
Есть VI, содержащий на лицевой панели множество разноплановых элементов.

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

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

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

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


Есть ли универсальный способ решения подобной задачи?

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

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

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

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

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

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

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

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

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

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

Добавлено: 21 мар 2018, 14:22
Artem.spb
Индексы использовать - самое опасное.а без имён в subVI не получится.

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

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

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

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

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

Добавлено: 21 мар 2018, 15:02
dadreamer
Аня, вот похожая тема - http://labviewportal.org/viewtopic.php?f=35&t=8488 , в которой я тоже в своё время озадачивался аналогичным вопросом. В итоге остановился на Variant'е и атрибутах (см. последний пост). В атрибуты запихиваю две пары "имя (label) контрола - reference" и "имя - индекс". Этого за глаза хватает, чтобы в любом СабВИ полноценно управлять контролом, как значением, так и его свойствами/методами. Property/Invoke Nodes вызываю только в цикле обработки UI (поток-то один), значения - хоть где (по индексам через Get/Set Control Values By Index). Единственное неудобство при таком подходе - необходимость "подглядывать" имена контролов при извлечении из Variant'а. Ну, и уникальность имён, само собой. Может, есть какие-то иные минусы, я специально не искал, ибо всё пока устраивает.

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

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