13.04.2016, 14:57
Beitrag #1
|
HasteMalNeMark
LVF-Grünschnabel
Beiträge: 13
Registriert seit: Mar 2016
15
2008
DE
Berlin
Deutschland
|
Division durch x VI
Testweise schreibe ich grade an einem Polymorphen VI, was eine beliebige Zahl durch 2 teilen soll.
Später soll dann auch die Möglichkeit gegeben sein, mit einer Kopie dieses Polymorphen VIs
andere Teiler zu verwenden. Der einzige Zweck ist, dass ich gerne bei einer unären mathematischen
Operation auch ein SubVi mit nur einem Anschluss haben möchte und nicht mit zwei wie bei dem Dividieren
SubVi aus der Funktionenpalette.
Mir fehlt hierfür grade so ein bisschen die vom C++ her bekannte Template Programmierung.
LabView hat offensichtlich 15 verschiedene numerische Datentypen und es erscheint mir gerade etwas verschwenderisch
ein polymorphes SubVi mit 15 verschiedenen Anschlusstypen zu erstellen.
Folgendes habe ich versucht:
- Ein Kern Vi, welches ein Variant durch 2 teilt -> Variant kann man erst nach Umwandlung teilen (ist ja auch klar, weil die Variant ja auch
nicht numerische Typen ent[/align]halten kann)
- Ein Kern Vi, welches eine ExtendedCpxDbl durch 2 teilt -> lässt sich nicht so ohne weiteres zurückkonvertieren
- Hilfs VIs, welche verschiedene Eingangstypen in eine ExtendedCpxDbl umwandeln und nach Division wieder zurück
- Ein VI mit Variant Eingang, welches die Variant in eine ExtendedCpxDbl umwandelt und an das Kern VI übergibt, welches dann den halbierten Wert als ExtendedCpxDbl zurückgibt.
Wie auch immer man es dreht, es bleibt ein Grundproblem übrig:
1.) Entweder man hat 15 VIs für die 15 Datentypen, die alle im wesentlichen das Gleiche tun oder
2.) Man hat Schwierigkeiten wieder den Ausgangsdatentyp zurück zu erhalten
Hat jemand schon mal so etwas ähnliches probiert, evtl. sogar mit Express VI?
Mich würde interessieren wie andere das machen.
Vielen Dank und viele Grüße
|
|
|
13.04.2016, 16:20
Beitrag #2
|
|
|
13.04.2016, 17:17
(Dieser Beitrag wurde zuletzt bearbeitet: 13.04.2016 17:17 von GerdW.)
Beitrag #3
|
GerdW
______________
Beiträge: 17.465
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Division durch x VI
Hallo Mark,
Zitat:1.) Entweder man hat 15 VIs für die 15 Datentypen, die alle im wesentlichen das Gleiche tun
Eigentlich ja noch viel mehr: du vergisst, dass man auch mit Arrays beliebiger Dimension (und beliebigem numerischen Datentyps) rechnen kann. Und auch mit Clustern, wenn sie numerische Werte enthalten!
Zitat:2.) Man hat Schwierigkeiten wieder den Ausgangsdatentyp zurück zu erhalten
Ja.
Zitat:es erscheint mir gerade etwas verschwenderisch ein polymorphes SubVi mit 15 verschiedenen Anschlusstypen zu erstellen.
Das ist aber noch immer der einfachste Weg! (Für jeden von dir unterstützten Datentyp ein subVI deines polymorphen VIs anlegen!)
Zitat:Ein Kern Vi, welches ein Variant durch 2 teilt -> Variant kann man erst nach Umwandlung teilen (ist ja auch klar, weil die Variant ja auch
nicht numerische Typen ent[/align]halten kann)
Die Variant-Variante (auch ein schönes Wort!) hat aber einen GROSSEN Nachteil: Du musst entweder einen Variant ausgeben, was dann im aufrufenden VI Probleme machen kann - oder du musst wieder füür jeden unterstützten Datentyp ein subVI anlegen, welches genau diesen Datentyp ans aufrufende VI zurückgibt…
Eine weitere Möglichkeit: mit LVOOP rumspielen…
|
|
|
14.04.2016, 10:10
(Dieser Beitrag wurde zuletzt bearbeitet: 14.04.2016 10:10 von HasteMalNeMark.)
Beitrag #4
|
HasteMalNeMark
LVF-Grünschnabel
Beiträge: 13
Registriert seit: Mar 2016
15
2008
DE
Berlin
Deutschland
|
RE: Division durch x VI
Würde man mit OOP nicht an den gleichen prinzipiellen Stellen steckenbleiben?
Oder bieten die dynamischen dispatches noch mehr Möglichkeiten in diesem Zusammenhang?
|
|
|
14.04.2016, 12:30
Beitrag #5
|
BNT
LVF-Freak
Beiträge: 744
Registriert seit: Aug 2008
5.0 - 22Q3
1999
EN
64291
Deutschland
|
RE: Division durch x VI
(14.04.2016 10:10 )HasteMalNeMark schrieb: Würde man mit OOP nicht an den gleichen prinzipiellen Stellen steckenbleiben?
Oder bieten die dynamischen dispatches noch mehr Möglichkeiten in diesem Zusammenhang?
Die Schwiegrigkeiten wären bei LVOOP andere, sogar schlimmer!
Du würdest nicht nur die Override-VI's für Deine unäre Operation für alle Datentypen implementieren müssen, sondern auch die zugehörigen Basis- und Kindklassen. Zusätzlich sind die Klassenattribute privat! Du kannst Sie also nicht einfach auf dem Frontpanel eingeben oder anzeigen. Du benötigst Attribut-Zugriffs-VI's für jeden Datentyp mit eindeutigem Namen. Diese müssen statische-VIs sein, weil dynamic-Dispach-VIs dieselbe Connector-Pane haben müssen.
Ausweg: XControl! Ein Dynamic-Dispatch-Attribut-Zugriffs-VI, das den Wert als String in der korrekten Formatierung zurückliefert und anzeigt. Alle Kindklassen müssten es überschreiben.
Noch Fragen?
Ich habe noch eine? Wieviel Zeit möchtest Du aufwenden, um alles anderen Rechenoperationen, z.B. Increment, OO-konform zu implementieren.
Was gefällt Dir an dem Primitve Division nicht? Kannst Du das bnitte erläutern? Oder handlet es um eine akademeische Übung?
Gruß Holger
|
|
|
14.04.2016, 13:56
Beitrag #6
|
HasteMalNeMark
LVF-Grünschnabel
Beiträge: 13
Registriert seit: Mar 2016
15
2008
DE
Berlin
Deutschland
|
RE: Division durch x VI
Zum einen möchte ich mir nützliche Bibliotheksfunktionen schreiben, so dass ich dachte ich investiere jetzt ein bisschen Arbeit um mir dann oft andere Arbeit zu sparen.
Da ich schon ziemlich oft durch 2 (oder eine andere Konstante) dividieren musste, bekam ich den Gedanken ein SubVi mit entsprechendem platzsparendem Icon zu erstellen und dieses immer wieder zu verwenden.
Leider fallen einem die Hindernisse oft erst auf, wenn man was ausprobiert. So war es auch hier. Um die Situation sozusagen zu "retten" habe ich die Frage gestellt weil man selbst ja manchmal irgendwelche Tricks nicht kennt, die einem zur Lösung verhelfen. Abgesehen davon lernt man bei solchen Experimenten unabhängig vom Ergebnis meist recht viel, was die Mühe dann wieder lohnt.
Ich denke, ein tolerabler Komprimiss könnte so aussehen, dass man eine Variant annimmt und eine Dbl (oder ext Dbl) ausgibt. Dann hat man zwar unschöne Koercion Dots, aber immerhin gehts.
So wird ich das jetzt wohl lassen, wobei ich mir vielleicht mal bei der nächsten Gelegenheit die XControls reinziehen werde. Man muss ja auch nicht immer alles auf einmal lösen.
|
|
|
14.04.2016, 14:25
Beitrag #7
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
RE: Division durch x VI
Wenn's nur um Platzsparen im BD geht - ExpressionNode:
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
19.04.2016, 08:50
Beitrag #8
|
HasteMalNeMark
LVF-Grünschnabel
Beiträge: 13
Registriert seit: Mar 2016
15
2008
DE
Berlin
Deutschland
|
RE: Division durch x VI
Oh mann, warum kompliziert, wenns auch einfach geht?
Manchmal hat man ne fixe Idee im Kopf und blockiert sich damit selbst.
Die Expression Node ist auf jeden Fall ne gute Idee und ist viel übersichtlicher
als der Kabelverhau mit den Arithmetik VIs.
Weiterer Vorteil: Die Wartbarkeit wird erhöht, wenn man mal die Formel ändern muss.
|
|
|
19.04.2016, 09:20
Beitrag #9
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
RE: Division durch x VI
...und: Der Ausdrucksknoten funktioniert auch mit Arrays und Clustern
|
|
|
| |