Трудности использования SubVi
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: Трудности использования SubVi
Borjomy_1, человек 40 инженеров придут и в один монитор будут разглядывать каждый своё. Я с таким сталкивался по работе. Правда параметров тогда было не 200, а 8.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
-
- beginner
- Сообщения: 48
- Зарегистрирован: 06 май 2014, 10:30
- Версия LabVIEW: 2011, 2015
- Откуда: Vldr
- Благодарил (а): 1 раз
- Контактная информация:
Re: Трудности использования SubVi
Так понимаю у меня тоже подобная проблема, как у автора.
В main.vi есть кластер typedef, данные из которого расходятся по всей программе в SubVI с различной глубиной иерархии. В этом кластере есть массивы, и иногда есть необходимость передать именно в той конфигурации, в которой я выставил в main.vi (т.е. передавать не только данные, как я делаю обычно, но и свойства). Не знаю как обеспечить простой, гибкий метод передачи всего этого в недры программы, при этом, чтобы не было проблем при отладке отдельных SubVI.
Передавать кластер из ссылок, вместо typedef кластера с данными? (т.е. надо создавать отдельный typedef с ссылками, при изменении основного кластера typedef его пересоздавать каждый раз?, + при отладке я хочу видеть и менять все данные в SubVI, а не ссылки на элементы из кластера).
Для наглядности приведу упрощенный пример, того, что у меня: Т.е. при нажатии кнопки необходимо, чтобы SubVI нижнего уровня вытаскивал только текущие индексы массивов.
Как быть?
В main.vi есть кластер typedef, данные из которого расходятся по всей программе в SubVI с различной глубиной иерархии. В этом кластере есть массивы, и иногда есть необходимость передать именно в той конфигурации, в которой я выставил в main.vi (т.е. передавать не только данные, как я делаю обычно, но и свойства). Не знаю как обеспечить простой, гибкий метод передачи всего этого в недры программы, при этом, чтобы не было проблем при отладке отдельных SubVI.
Передавать кластер из ссылок, вместо typedef кластера с данными? (т.е. надо создавать отдельный typedef с ссылками, при изменении основного кластера typedef его пересоздавать каждый раз?, + при отладке я хочу видеть и менять все данные в SubVI, а не ссылки на элементы из кластера).
Для наглядности приведу упрощенный пример, того, что у меня: Т.е. при нажатии кнопки необходимо, чтобы SubVI нижнего уровня вытаскивал только текущие индексы массивов.
Как быть?
-
- professor
- Сообщения: 3406
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Трудности использования SubVi
Что такое свойство массива?
Если вам нужно по кнопке в main что-то делать в sub, то саб должен работать параллельно и по кнопке в него должна лететь команда (очереди, нотификаторы, события для этого и придуманы).Т.е. при нажатии кнопки необходимо, чтобы SubVI нижнего уровня вытаскивал только текущие индексы массивов. Как быть?
В крайнем случае можно мониторить значение кнопки по ссылке но это плохая идея.
-
- beginner
- Сообщения: 48
- Зарегистрирован: 06 май 2014, 10:30
- Версия LabVIEW: 2011, 2015
- Откуда: Vldr
- Благодарил (а): 1 раз
- Контактная информация:
Re: Трудности использования SubVi
в данном случае выставленные в GUI индексы массива (Index values)
не, наверное вы неверно меня поняли. События у меня обрабатываются в main VI, и тут не про них. Вот на примере, который я обозначил, 2 массива - один внутри другого. В SubVI нижнего уровня из этого кластера берутся массивы и обрабатываются вложенными циклами. Однако мне необходимо обработать не все элементы этих массивов (N1xN2), а только выставленные индексами.Artem.spb писал(а): ↑15 мар 2024, 17:00 Если вам нужно по кнопке в main что-то делать в sub, то саб должен работать параллельно и по кнопке в него должна лететь команда (очереди, нотификаторы, события для этого и придуманы).
В крайнем случае можно мониторить значение кнопки по ссылке но это плохая идея.
-
- VIP
- Сообщения: 1337
- Зарегистрирован: 03 фев 2010, 00:42
- Награды: 6
- Версия LabVIEW: 6.1 - 2024
- Откуда: Германия
- Благодарил (а): 1 раз
- Поблагодарили: 44 раза
- Контактная информация:
Re: Трудности использования SubVi
Я б явно пробрасывал отдельными вспомогательными элементами в кластере
-
- beginner
- Сообщения: 48
- Зарегистрирован: 06 май 2014, 10:30
- Версия LabVIEW: 2011, 2015
- Откуда: Vldr
- Благодарил (а): 1 раз
- Контактная информация:
Re: Трудности использования SubVi
Да, похоже других вариантов нет. Появляется в main.vi обработчик, который выставляет текущие индексы и все - с этим можно мириться, НО. Для отладки опять же неудобняк - если я запускаю непосредственно SubVi нижнего уровня, то его логика уже будет другая. Придется либо править их вручную, либо городить логику, исходя из того, что SubVI запускается сам, а не вызывается сверху и подсовывать индексы, которые выставлены в этом SubVi. В общем дополнительный гемор. Вроде что мешает сделать возможность передавать объект полностью, а не только его valueAndreyDmitriev писал(а): ↑15 мар 2024, 19:25 Я б явно пробрасывал отдельными вспомогательными элементами в кластере
-
- professor
- Сообщения: 3406
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Трудности использования SubVi
А вы часом не усложняете себе жизнь? Если из всего массива вам нужен только видимый элемент (по индексу), так и передайте в саб этот элемент, а не весь массив.
-
- beginner
- Сообщения: 48
- Зарегистрирован: 06 май 2014, 10:30
- Версия LabVIEW: 2011, 2015
- Откуда: Vldr
- Благодарил (а): 1 раз
- Контактная информация:
Re: Трудности использования SubVi
Хотел, чтобы использовался один typedef для main и subvi, т.к. помимо этих массивов subvi использует и другие его элементы. Да и по логике работы программы - в этот subvi встроен сбор данных, и параллельно обработка, визуализация и сохранение на очередях (producer-consumer - т.е. пока прога получает данные с приборов следующего теста, в это же время она обрабатывает данные от предыдущего другим потоком), а иначе эти потроха тоже придется выносить в main vi.
P.S. возможно мне стоит как-то сменить концепцию (поменять шаблон??), но я уже привык в main.vi использовать event structure, и стремлюсь в каждом кадре делать минимум фарша (в идеале только subvi). Хотя в тех спагетти, которые я лепил раньше, как раз делал так, как сейчас предлагаете. Т.о. в моем случае не дает найти компромисс между гибкостью и эстетикой кода (либо спагетти из которых можно вытянуть/втянуть что угодно, либо использовать typedef + много subvi - код становится читаемый, однако существенно теряет в гибкости)