Добрый день!
Вопрос лаконичен: как лучше заполнить кластер, состоящий из контролов, который находится на лицевой панели одного VI, в другом VI?
Поясню. У меня есть кластер, состоящий из множества контролов, и его нужно хитрым образом заполнять.
Естественно делать это в основном VI я не хочу, так как забью все блок-диаграмму. Нужно вынести в отдельную функцию (отдельный VI).
Но тут лично у меня возникает вопрос, как передавать этот кластер в другой VI, идет ли передача данных по значению, или по ссылке.
В си, я бы передал указатель или ссылку на мою структуру. А в лабвью?
Могу создать новый VI, где входным и выходным параметром будут мои кластеры. Передавать на вход в кластер буду через свойство кластера Property node -> Value, выводить так же.
Но правильно ли так делать? Ведь если в контроле содержится большой объем данных, то я по сути буду несколько раз копировать эти данные в памяти, что не эффективно.
Или нужно делать через ссылку на контролы, которые составляют этот кластер?
alan писал(а):как лучше заполнить кластер, состоящий из контролов, который находится на лицевой панели одного VI, в другом VI
Делаете ссылку (reference) на этот кластер, для удобства задайте его структуру как type definition.
Задаете reference как входной параметр SubVI.
Внутри SubVI обращаетесь к этому кластеру через ссылку, а к отдельным элементам используя type definition.
IvanLis, у Вас в файле Cluster Refnum. Я уже все обыскал, как найти эту ссылку в панели инструментов?
Re: Заполнение кластера одного VI в другом VI
Добавлено: 14 окт 2015, 17:05
Borjomy_1
На кластере ПКМ->Create->Reference. Константу можно превратить в контрол ПКМ->Change to Control
Re: Заполнение кластера одного VI в другом VI
Добавлено: 14 окт 2015, 17:51
IvanLis
Borjomy_1 писал(а):Константу можно превратить в контрол ПКМ->Change to Control
В Linux немного по другому, но принцип аналогичен:
Без имени1.png (11.44 КБ) 5250 просмотров
А вообще можно сделать и так:
Z6i3Hd6gD90
Re: Заполнение кластера одного VI в другом VI
Добавлено: 20 окт 2015, 15:14
alan
Спасибо, господа!
А такой вопрос сопутствующий. У меня на входе в VI много ссылок на разные кластеры. Так как я их всех заполняю в одном VI.
Мне не всегда нужно подключать на вход все ссылки, поэтому встает вопрос: как мне проверить внутри VI подключена ли ссылка, и вообще, правильная она или нет.
Если не подключена, я просто не буду использовать определенный блок программы.
Re: Заполнение кластера одного VI в другом VI
Добавлено: 20 окт 2015, 15:24
dadreamer
alan,
Re: Заполнение кластера одного VI в другом VI
Добавлено: 23 сен 2022, 10:10
rsv
IvanLis писал(а): ↑14 окт 2015, 08:20
Внутри SubVI обращаетесь к этому кластеру через ссылку, а к отдельным элементам используя type definition.
Добрый день.
Как работать со значениями элементов кластера в SubVI понятно, но мне необходимо в SubVI изменить свойства элементов.
Как можно по ссылке на кластер добратья до свойств элементов кластера, TipStrip например?
Re: Заполнение кластера одного VI в другом VI
Добавлено: 23 сен 2022, 13:43
Artem.spb
rsv писал(а): ↑23 сен 2022, 10:10
Как можно по ссылке на кластер добратья до свойств элементов кластера, TipStrip например?
IvanLis писал(а): ↑14 окт 2015, 08:20
Внутри SubVI обращаетесь к этому кластеру через ссылку, а к отдельным элементам используя type definition.
Добрый день.
Как работать со значениями элементов кластера в SubVI понятно, но мне необходимо в SubVI изменить свойства элементов.
Как можно по ссылке на кластер добратья до свойств элементов кластера, TipStrip например?
ref1.png (7.17 КБ) 1194 просмотра
ref4.png (3.52 КБ) 1194 просмотра
Re: Заполнение кластера одного VI в другом VI
Добавлено: 23 сен 2022, 14:41
rsv
Спасибо, Artem.spb и ujin1.
P.S.
А я всё искал возможность через ссылку на кластер создать ссылку на элемент и для него редактировать узел свойств...
Re: Заполнение кластера одного VI в другом VI
Добавлено: 13 мар 2023, 14:32
rsv
В предложенных вариантах обращение к элементам кластера производится по порядковому номеру. Если для всех элементов действия аналогичные, то это будет нормально работать даже в случае смены сортировки элементов внутри кластера.
А если для элементов кластера нужны какие-то особые действия, то после смены сортировки модуль перестанет работать корректно.
Как обратиться к элементу кластера из другого модуля по имени чтобы избежать проблем при смене сортировки?
Re: Заполнение кластера одного VI в другом VI
Добавлено: 13 мар 2023, 14:58
Borjomy_1
Берете массив элементов кластера, и для каждого вычитываете свойство "Label". Далее производите поиск в массиве этих свойств нужного имени через "Search 1D Array". Результат будет индексом нужного элемента в массиве.
Вычитывать свойства можно один раз при запуске программы, используя функцию "First Call?" и храня результат в "FeedBack Node", если функция используется с одним типом кластера. Если их предусмотрено несколько, то придется имена элементов считывать каждый раз.
Re: Заполнение кластера одного VI в другом VI
Добавлено: 13 мар 2023, 15:52
rsv
Borjomy_1 писал(а): ↑13 мар 2023, 14:58
Берете массив элементов кластера, и для каждого вычитываете свойство "Label". Далее производите поиск в массиве этих свойств нужного имени через "Search 1D Array". Результат будет индексом нужного элемента в массиве.
Вычитывать свойства можно один раз при запуске программы, используя функцию "First Call?" и храня результат в "FeedBack Node", если функция используется с одним типом кластера. Если их предусмотрено несколько, то придется имена элементов считывать каждый раз.