Заполнение кластера одного VI в другом VI
-
- advanced
- Сообщения: 157
- Зарегистрирован: 30 авг 2012, 13:16
- Версия LabVIEW: 16
- Откуда: Москва
- Контактная информация:
Заполнение кластера одного VI в другом VI
Добрый день!
Вопрос лаконичен: как лучше заполнить кластер, состоящий из контролов, который находится на лицевой панели одного VI, в другом VI?
Поясню. У меня есть кластер, состоящий из множества контролов, и его нужно хитрым образом заполнять.
Естественно делать это в основном VI я не хочу, так как забью все блок-диаграмму. Нужно вынести в отдельную функцию (отдельный VI).
Но тут лично у меня возникает вопрос, как передавать этот кластер в другой VI, идет ли передача данных по значению, или по ссылке.
В си, я бы передал указатель или ссылку на мою структуру. А в лабвью?
Могу создать новый VI, где входным и выходным параметром будут мои кластеры. Передавать на вход в кластер буду через свойство кластера Property node -> Value, выводить так же.
Но правильно ли так делать? Ведь если в контроле содержится большой объем данных, то я по сути буду несколько раз копировать эти данные в памяти, что не эффективно.
Или нужно делать через ссылку на контролы, которые составляют этот кластер?
Вопрос лаконичен: как лучше заполнить кластер, состоящий из контролов, который находится на лицевой панели одного VI, в другом VI?
Поясню. У меня есть кластер, состоящий из множества контролов, и его нужно хитрым образом заполнять.
Естественно делать это в основном VI я не хочу, так как забью все блок-диаграмму. Нужно вынести в отдельную функцию (отдельный VI).
Но тут лично у меня возникает вопрос, как передавать этот кластер в другой VI, идет ли передача данных по значению, или по ссылке.
В си, я бы передал указатель или ссылку на мою структуру. А в лабвью?
Могу создать новый VI, где входным и выходным параметром будут мои кластеры. Передавать на вход в кластер буду через свойство кластера Property node -> Value, выводить так же.
Но правильно ли так делать? Ведь если в контроле содержится большой объем данных, то я по сути буду несколько раз копировать эти данные в памяти, что не эффективно.
Или нужно делать через ссылку на контролы, которые составляют этот кластер?
-
Aleksey Feoktistov
- leader
- Сообщения: 898
- Зарегистрирован: 20 янв 2009, 00:15
- Награды: 6
- Версия LabVIEW: 2015
- Откуда: Tyumen
- Поблагодарили: 2 раза
- Контактная информация:
-
IvanLis
- guru
- Сообщения: 5387
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 25 раз
- Поблагодарили: 75 раз
Re: Заполнение кластера одного VI в другом VI
Делаете ссылку (reference) на этот кластер, для удобства задайте его структуру как type definition.alan писал(а):как лучше заполнить кластер, состоящий из контролов, который находится на лицевой панели одного VI, в другом VI
Задаете reference как входной параметр SubVI.
Внутри SubVI обращаетесь к этому кластеру через ссылку, а к отдельным элементам используя type definition.
------------ LV2010 -----------
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- advanced
- Сообщения: 157
- Зарегистрирован: 30 авг 2012, 13:16
- Версия LabVIEW: 16
- Откуда: Москва
- Контактная информация:
Re: Заполнение кластера одного VI в другом VI
IvanLis, у Вас в файле Cluster Refnum. Я уже все обыскал, как найти эту ссылку в панели инструментов?
-
- doctor
- Сообщения: 2127
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 21 раз
- Поблагодарили: 20 раз
Re: Заполнение кластера одного VI в другом VI
На кластере ПКМ->Create->Reference. Константу можно превратить в контрол ПКМ->Change to Control
-
IvanLis
- guru
- Сообщения: 5387
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 25 раз
- Поблагодарили: 75 раз
Re: Заполнение кластера одного VI в другом VI
В Linux немного по другому, но принцип аналогичен: А вообще можно сделать и так:Borjomy_1 писал(а):Константу можно превратить в контрол ПКМ->Change to Control
Z6i3Hd6gD90
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- advanced
- Сообщения: 157
- Зарегистрирован: 30 авг 2012, 13:16
- Версия LabVIEW: 16
- Откуда: Москва
- Контактная информация:
Re: Заполнение кластера одного VI в другом VI
Спасибо, господа!
А такой вопрос сопутствующий. У меня на входе в VI много ссылок на разные кластеры. Так как я их всех заполняю в одном VI.
Мне не всегда нужно подключать на вход все ссылки, поэтому встает вопрос: как мне проверить внутри VI подключена ли ссылка, и вообще, правильная она или нет.
Если не подключена, я просто не буду использовать определенный блок программы.
А такой вопрос сопутствующий. У меня на входе в VI много ссылок на разные кластеры. Так как я их всех заполняю в одном VI.
Мне не всегда нужно подключать на вход все ссылки, поэтому встает вопрос: как мне проверить внутри VI подключена ли ссылка, и вообще, правильная она или нет.
Если не подключена, я просто не буду использовать определенный блок программы.
-
- assistant
- Сообщения: 130
- Зарегистрирован: 18 июл 2019, 13:53
- Версия LabVIEW: 2020
- Откуда: Россия, Ижевск
- Благодарил (а): 17 раз
- Контактная информация:
Re: Заполнение кластера одного VI в другом VI
Добрый день.
Как работать со значениями элементов кластера в SubVI понятно, но мне необходимо в SubVI изменить свойства элементов.
Как можно по ссылке на кластер добратья до свойств элементов кластера, TipStrip например?
-
- assistant
- Сообщения: 128
- Зарегистрирован: 06 ноя 2020, 15:37
- Версия LabVIEW: 19
- Благодарил (а): 7 раз
- Поблагодарили: 17 раз
- Контактная информация:
Re: Заполнение кластера одного VI в другом VI
-
- assistant
- Сообщения: 130
- Зарегистрирован: 18 июл 2019, 13:53
- Версия LabVIEW: 2020
- Откуда: Россия, Ижевск
- Благодарил (а): 17 раз
- Контактная информация:
Re: Заполнение кластера одного VI в другом VI
Спасибо, Artem.spb и ujin1.
P.S.
А я всё искал возможность через ссылку на кластер создать ссылку на элемент и для него редактировать узел свойств...
P.S.
А я всё искал возможность через ссылку на кластер создать ссылку на элемент и для него редактировать узел свойств...
-
- assistant
- Сообщения: 130
- Зарегистрирован: 18 июл 2019, 13:53
- Версия LabVIEW: 2020
- Откуда: Россия, Ижевск
- Благодарил (а): 17 раз
- Контактная информация:
Re: Заполнение кластера одного VI в другом VI
В предложенных вариантах обращение к элементам кластера производится по порядковому номеру. Если для всех элементов действия аналогичные, то это будет нормально работать даже в случае смены сортировки элементов внутри кластера.
А если для элементов кластера нужны какие-то особые действия, то после смены сортировки модуль перестанет работать корректно.
Как обратиться к элементу кластера из другого модуля по имени чтобы избежать проблем при смене сортировки?
А если для элементов кластера нужны какие-то особые действия, то после смены сортировки модуль перестанет работать корректно.
Как обратиться к элементу кластера из другого модуля по имени чтобы избежать проблем при смене сортировки?
-
- doctor
- Сообщения: 2127
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 21 раз
- Поблагодарили: 20 раз
Re: Заполнение кластера одного VI в другом VI
Берете массив элементов кластера, и для каждого вычитываете свойство "Label". Далее производите поиск в массиве этих свойств нужного имени через "Search 1D Array". Результат будет индексом нужного элемента в массиве.
Вычитывать свойства можно один раз при запуске программы, используя функцию "First Call?" и храня результат в "FeedBack Node", если функция используется с одним типом кластера. Если их предусмотрено несколько, то придется имена элементов считывать каждый раз.
Вычитывать свойства можно один раз при запуске программы, используя функцию "First Call?" и храня результат в "FeedBack Node", если функция используется с одним типом кластера. Если их предусмотрено несколько, то придется имена элементов считывать каждый раз.
-
- assistant
- Сообщения: 130
- Зарегистрирован: 18 июл 2019, 13:53
- Версия LabVIEW: 2020
- Откуда: Россия, Ижевск
- Благодарил (а): 17 раз
- Контактная информация:
Re: Заполнение кластера одного VI в другом VI
Спасибо, алгоритм понятен.Borjomy_1 писал(а): ↑13 мар 2023, 14:58 Берете массив элементов кластера, и для каждого вычитываете свойство "Label". Далее производите поиск в массиве этих свойств нужного имени через "Search 1D Array". Результат будет индексом нужного элемента в массиве.
Вычитывать свойства можно один раз при запуске программы, используя функцию "First Call?" и храня результат в "FeedBack Node", если функция используется с одним типом кластера. Если их предусмотрено несколько, то придется имена элементов считывать каждый раз.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 2 Ответы
- 258 Просмотры
-
Последнее сообщение Borjomy_1