Полиморфный VI при помощи входного enum-переключателя

Простейшие вопросы в области инженерной разработки
Ответить
dakishi
assistant
assistant
Сообщения: 120
Зарегистрирован: 05 сен 2019, 21:01
Репутация: 0
Версия LabVIEW: 2019
Контактная информация:

Полиморфный VI при помощи входного enum-переключателя

Сообщение dakishi »

Добрый вечер!

У меня несколько раз в программе используются разные SubVI которые делают почти одно и то же - я передаю ссылку на файл
в SubVI, с ним производятся определенные операции и подается на выход кластер с результатами. Отличие в том, что с разными файлами разные операции нужно делать, но везде на выходе некоторый кластер.
Мне хотелось бы создать SubVI, который принимая одну ссылку на файл и команду enum (что с ним делать) на выход выдавал бы соответственно разные кластеры с результатами. Это можно сделать ?

PS пробовал с variant, но как то сложно получается - во внешней программе нужно указать тип кластера и это занимает много дополнительного места на блок диаграмме.

Artem.spb

Activity Автор
expert
expert
Сообщения: 1942
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Репутация: 0
Версия LabVIEW: 12-18
Контактная информация:

Re: Полиморфный VI при помощи входного enum-переключателя

Сообщение Artem.spb »

А какой результат вы ожидаете?
Пока на выходе "какой-то" кластер, всё будет "сложно".
Или унифицируйте кластер, или делайте тот самый полиморфный, но в качестве переключателя будет выбор полиморфа снизу. Пока функция одна и та же, она не сможет выдать вам разные результаты в зависимости от входного параметра (кроме Variant, который вы отметаете)

Юрий
professional
professional
Сообщения: 359
Зарегистрирован: 28 фев 2010, 18:04
Репутация: 0
Версия LabVIEW: LV2018
Контактная информация:

Re: Полиморфный VI при помощи входного enum-переключателя

Сообщение Юрий »

dakishi, Мне хотелось бы создать SubVI, который принимая одну ссылку на файл и команду enum (что с ним делать) на выход выдавал бы соответственно разные кластеры с результатами. Это можно сделать ?
Можно, если этот VI будет иметь столько выходов, сколько вариантов кластеров.

Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1069
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Репутация: 0
Версия LabVIEW: 2013-2020
Контактная информация:

Re: Полиморфный VI при помощи входного enum-переключателя

Сообщение Kosist »

Начиная с :labview: 2017 для этой цели можно использовать malleable VIs.
Ну, или решить это при помощи классов.
Мы делили апельсин - много наших полегло...

Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Репутация: 0
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Полиморфный VI при помощи входного enum-переключателя

Сообщение Vitekkz88 »

Мне хотелось бы создать SubVI, который принимая одну ссылку на файл и команду enum (что с ним делать) на выход выдавал бы соответственно разные кластеры с результатами. Это можно сделать ?
Если у вас одна функция отличается от другой только операцией суммирования(например) - это уже две разные функции. В этом случае Вам нужно архитектурно подумать над приложением: объединить повторяющиеся части и вынести отличия за пределы. Но и в этом случае нужно подумать: а не случится ли так, что сегодня это общие части, а завтра это должны быть две разные и независимые части?
Если бы Вы делали это с помощью классов - то Вам бы пришлось создавать набор классов и методов. Да, некоторые методы бы отличались всего одной операцией, однако их принадлежность к классу бы играла ключевую роль. Так что не парьтесь особо, если в case-структуре у вас будет N команд и для каждой будет своя функция.
Создайте общий кластер из всех нужных полей и работайте с ним: пишите/читайте значения полей где будет удобно и когда нужно. Если полей много, то группируйте их между собой в отдельные кластеры, но в итоге так же работайте с общим кластером. Делайте кластеры как typedef, это поможет на этапах сопровождения доработок.
Вложения
Clusters.png
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын

Artem.spb

Activity Автор
expert
expert
Сообщения: 1942
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Репутация: 0
Версия LabVIEW: 12-18
Контактная информация:

Re: Полиморфный VI при помощи входного enum-переключателя

Сообщение Artem.spb »

[quote=="Kosist"]Ну, или решить это при помощи классов.[/quote]
Как классы помогут сделать одинаковые функции с разными выходами?
Если только выходное значение - это элемент класса

Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1069
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Репутация: 0
Версия LabVIEW: 2013-2020
Контактная информация:

Re: Полиморфный VI при помощи входного enum-переключателя

Сообщение Kosist »

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

Ответить

Вернуться в «Для чайников»