Добрый вечер!
У меня несколько раз в программе используются разные SubVI которые делают почти одно и то же - я передаю ссылку на файл
в SubVI, с ним производятся определенные операции и подается на выход кластер с результатами. Отличие в том, что с разными файлами разные операции нужно делать, но везде на выходе некоторый кластер.
Мне хотелось бы создать SubVI, который принимая одну ссылку на файл и команду enum (что с ним делать) на выход выдавал бы соответственно разные кластеры с результатами. Это можно сделать ?
PS пробовал с variant, но как то сложно получается - во внешней программе нужно указать тип кластера и это занимает много дополнительного места на блок диаграмме.
Полиморфный VI при помощи входного enum-переключателя
-
- professor
- Сообщения: 3410
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Полиморфный VI при помощи входного enum-переключателя
А какой результат вы ожидаете?
Пока на выходе "какой-то" кластер, всё будет "сложно".
Или унифицируйте кластер, или делайте тот самый полиморфный, но в качестве переключателя будет выбор полиморфа снизу. Пока функция одна и та же, она не сможет выдать вам разные результаты в зависимости от входного параметра (кроме Variant, который вы отметаете)
Пока на выходе "какой-то" кластер, всё будет "сложно".
Или унифицируйте кластер, или делайте тот самый полиморфный, но в качестве переключателя будет выбор полиморфа снизу. Пока функция одна и та же, она не сможет выдать вам разные результаты в зависимости от входного параметра (кроме Variant, который вы отметаете)
-
- leader
- Сообщения: 526
- Зарегистрирован: 28 фев 2010, 18:04
- Версия LabVIEW: LV2018
- Благодарил (а): 10 раз
- Поблагодарили: 18 раз
- Контактная информация:
Re: Полиморфный VI при помощи входного enum-переключателя
dakishi, Мне хотелось бы создать SubVI, который принимая одну ссылку на файл и команду enum (что с ним делать) на выход выдавал бы соответственно разные кластеры с результатами. Это можно сделать ?
Можно, если этот VI будет иметь столько выходов, сколько вариантов кластеров.
Можно, если этот VI будет иметь столько выходов, сколько вариантов кластеров.
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Полиморфный VI при помощи входного enum-переключателя
Начиная с 2017 для этой цели можно использовать malleable VIs.
Ну, или решить это при помощи классов.
Ну, или решить это при помощи классов.
Мы делили апельсин - много наших полегло...
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: Полиморфный VI при помощи входного enum-переключателя
Мне хотелось бы создать SubVI, который принимая одну ссылку на файл и команду enum (что с ним делать) на выход выдавал бы соответственно разные кластеры с результатами. Это можно сделать ?
Если у вас одна функция отличается от другой только операцией суммирования(например) - это уже две разные функции. В этом случае Вам нужно архитектурно подумать над приложением: объединить повторяющиеся части и вынести отличия за пределы. Но и в этом случае нужно подумать: а не случится ли так, что сегодня это общие части, а завтра это должны быть две разные и независимые части?
Если бы Вы делали это с помощью классов - то Вам бы пришлось создавать набор классов и методов. Да, некоторые методы бы отличались всего одной операцией, однако их принадлежность к классу бы играла ключевую роль. Так что не парьтесь особо, если в case-структуре у вас будет N команд и для каждой будет своя функция.
Создайте общий кластер из всех нужных полей и работайте с ним: пишите/читайте значения полей где будет удобно и когда нужно. Если полей много, то группируйте их между собой в отдельные кластеры, но в итоге так же работайте с общим кластером. Делайте кластеры как typedef, это поможет на этапах сопровождения доработок.
Если у вас одна функция отличается от другой только операцией суммирования(например) - это уже две разные функции. В этом случае Вам нужно архитектурно подумать над приложением: объединить повторяющиеся части и вынести отличия за пределы. Но и в этом случае нужно подумать: а не случится ли так, что сегодня это общие части, а завтра это должны быть две разные и независимые части?
Если бы Вы делали это с помощью классов - то Вам бы пришлось создавать набор классов и методов. Да, некоторые методы бы отличались всего одной операцией, однако их принадлежность к классу бы играла ключевую роль. Так что не парьтесь особо, если в case-структуре у вас будет N команд и для каждой будет своя функция.
Создайте общий кластер из всех нужных полей и работайте с ним: пишите/читайте значения полей где будет удобно и когда нужно. Если полей много, то группируйте их между собой в отдельные кластеры, но в итоге так же работайте с общим кластером. Делайте кластеры как typedef, это поможет на этапах сопровождения доработок.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
-
- professor
- Сообщения: 3410
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Полиморфный VI при помощи входного enum-переключателя
[quote=="Kosist"]Ну, или решить это при помощи классов.[/quote]
Как классы помогут сделать одинаковые функции с разными выходами?
Если только выходное значение - это элемент класса
Как классы помогут сделать одинаковые функции с разными выходами?
Если только выходное значение - это элемент класса
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Полиморфный VI при помощи входного enum-переключателя
Для разных выходов свой accessor будет в таком случае, т.е. сама функция выхода не должна иметь.
При любой имплементации, будет место в программе где будет использоваться конкретное выходное значение - если все делать классами, то в этом моменте будет вызываться accessor конкретного класса.
При любой имплементации, будет место в программе где будет использоваться конкретное выходное значение - если все делать классами, то в этом моменте будет вызываться accessor конкретного класса.
Мы делили апельсин - много наших полегло...
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 23 Ответы
- 4629 Просмотры
-
Последнее сообщение maxim_MA
-
- 6 Ответы
- 1648 Просмотры
-
Последнее сообщение ladik
-
- 38 Ответы
- 13309 Просмотры
-
Последнее сообщение AndreyDmitriev
-
- 2 Ответы
- 272 Просмотры
-
Последнее сообщение Optoelectronics
-
- 4 Ответы
- 1671 Просмотры
-
Последнее сообщение Borjomy_1