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

Простейшие вопросы в области инженерной разработки

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

Postby dakishi on 11 Mar 2020, 20:22

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

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

PS пробовал с variant, но как то сложно получается - во внешней программе нужно указать тип кластера и это занимает много дополнительного места на блок диаграмме.
dakishi
user
user
 
Posts: 86
Joined: 05 Sep 2019, 21:01
LabVIEW Version: 2019
Karma: 0

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

Postby Artem.spb on 11 Mar 2020, 22:02

А какой результат вы ожидаете?
Пока на выходе "какой-то" кластер, всё будет "сложно".
Или унифицируйте кластер, или делайте тот самый полиморфный, но в качестве переключателя будет выбор полиморфа снизу. Пока функция одна и та же, она не сможет выдать вам разные результаты в зависимости от входного параметра (кроме Variant, который вы отметаете)
Artem.spb
expert
expert
 
Posts: 1755
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 270
CLD hardware I/O VIP freelance

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

Postby Юрий on 11 Mar 2020, 22:21

dakishi, Мне хотелось бы создать SubVI, который принимая одну ссылку на файл и команду enum (что с ним делать) на выход выдавал бы соответственно разные кластеры с результатами. Это можно сделать ?
Можно, если этот VI будет иметь столько выходов, сколько вариантов кластеров.
Юрий
professional
professional
 
Posts: 348
Joined: 28 Feb 2010, 18:04
LabVIEW Version: LV2015
Karma: 55

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

Postby Kosist on 11 Mar 2020, 22:59

Начиная с :labview: 2017 для этой цели можно использовать malleable VIs.
Ну, или решить это при помощи классов.
Мы делили апельсин - много наших полегло...
User avatar
Kosist
expert
expert
 
Posts: 1031
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 283
CLAD I/O VIP students

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

Postby Vitekkz88 on 12 Mar 2020, 10:35

Мне хотелось бы создать SubVI, который принимая одну ссылку на файл и команду enum (что с ним делать) на выход выдавал бы соответственно разные кластеры с результатами. Это можно сделать ?
Если у вас одна функция отличается от другой только операцией суммирования(например) - это уже две разные функции. В этом случае Вам нужно архитектурно подумать над приложением: объединить повторяющиеся части и вынести отличия за пределы. Но и в этом случае нужно подумать: а не случится ли так, что сегодня это общие части, а завтра это должны быть две разные и независимые части?
Если бы Вы делали это с помощью классов - то Вам бы пришлось создавать набор классов и методов. Да, некоторые методы бы отличались всего одной операцией, однако их принадлежность к классу бы играла ключевую роль. Так что не парьтесь особо, если в case-структуре у вас будет N команд и для каждой будет своя функция.
Создайте общий кластер из всех нужных полей и работайте с ним: пишите/читайте значения полей где будет удобно и когда нужно. Если полей много, то группируйте их между собой в отдельные кластеры, но в итоге так же работайте с общим кластером. Делайте кластеры как typedef, это поможет на этапах сопровождения доработок.
Attachments
Clusters.png
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
User avatar
Vitekkz88
expert
expert
 
Posts: 1097
Joined: 21 Jan 2014, 15:45
Location: Томск
Medals: 3
Activity (1) Silver (1) Автор (1)
LabVIEW Version: 12,13,14
Karma: 307
hardware I/O VIP

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

Postby Artem.spb on 12 Mar 2020, 14:51

[quote=="Kosist"]Ну, или решить это при помощи классов.[/quote]
Как классы помогут сделать одинаковые функции с разными выходами?
Если только выходное значение - это элемент класса
Artem.spb
expert
expert
 
Posts: 1755
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 270
CLD hardware I/O VIP freelance

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

Postby Kosist on 15 Mar 2020, 17:25

Для разных выходов свой accessor будет в таком случае, т.е. сама функция выхода не должна иметь.
При любой имплементации, будет место в программе где будет использоваться конкретное выходное значение - если все делать классами, то в этом моменте будет вызываться accessor конкретного класса.
Мы делили апельсин - много наших полегло...
User avatar
Kosist
expert
expert
 
Posts: 1031
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 283
CLAD I/O VIP students


Return to Для чайников

Who is online

Users browsing this forum: Yandex and 8 guests

cron