INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

Case-Auswahl im SubVI abhängig vom Aufrufer



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

10.02.2016, 15:47
Beitrag #1

aw Offline
LVF-Grünschnabel
*


Beiträge: 32
Registriert seit: Nov 2013

2015
2013
DE_EN


Deutschland
Case-Auswahl im SubVI abhängig vom Aufrufer
Hallo,

ich habe ein SubVI mit einer Casestruktur, dass von verschiedenen übergeordneten VIs aufgerufen werden kann. Der Großteil des Programmcodes wird von allen aufrufenden VIs benötigt, nur die Berechnung von einigen Parametern und damit die Cases unterscheiden sich je nachdem welches Vi aufruft. Bisher steuere ich die Auswahl des Cases über eine Typdefinition mit Enums und übergebe an der jeweiligen Stelle im Programm eine Enum-Konstante an das SubVI bzw. den dortigen Caseselektor. Gibt es eine elegantere Lösung den jeweiligen Case abhängig vom Aufrufer abzuarbeiten?

Danke für Eure Hilfe!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
10.02.2016, 15:50 (Dieser Beitrag wurde zuletzt bearbeitet: 10.02.2016 15:51 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Case-Auswahl im SubVI abhängig vom Aufrufer

Akzeptierte Lösung

Hallo aw,

Zitat:Gibt es eine elegantere Lösung den jeweiligen Case abhängig vom Aufrufer abzuarbeiten?
Du könntest abfragen, wer der Aufrufer ist (CallChain) - und anhand dessen VI-Namen den Case aufrufen.
Ob das jetzt eleganter als ein typdefiniertes Enum ist, glaube ich nicht… Big Grin

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.02.2016, 17:43
Beitrag #3

aw Offline
LVF-Grünschnabel
*


Beiträge: 32
Registriert seit: Nov 2013

2015
2013
DE_EN


Deutschland
RE: Case-Auswahl im SubVI abhängig vom Aufrufer
Danke GerdW.

Ich gebe Dir recht, es ist nicht wirklich eleganter. Aber ich spare mir am SubVI zumindest den Anschluss für die Enum und natürlich die Enum selbst. Bei einem recht umfangreichen Projekt bedeutet das ein klitzekleines bisschen mehr Übersicht. Und der Programmieraufwand für die Aufrufkette hält sich durchaus auch in Grenzen. Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.02.2016, 18:23
Beitrag #4

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.697
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: Case-Auswahl im SubVI abhängig vom Aufrufer
(10.02.2016 17:43 )aw schrieb:  Aber ich spare mir am SubVI zumindest den Anschluss für die Enum und natürlich die Enum selbst.
Das halte ich für einen ganz schlechten Programmierstil.

Zitat:Bei einem recht umfangreichen Projekt bedeutet das ein klitzekleines bisschen mehr Übersicht.
Unübersichtlichkeit und Umfang stehen in keinem kausalen Zusammenhang ...

Ich rate von solchen Algorithmen ab. Dieser Algorithmus ist vom Namen des aufrufenden Programmes abhängig. Somit ist das VI wohl nicht wiederverwendbar. Ich würde bei strikten Enums bleiben.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.02.2016, 19:06
Beitrag #5

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Case-Auswahl im SubVI abhängig vom Aufrufer
Und ich würde den Enum-Input zusätzlich auf "Erforderlich" setzen, um darüber eine vernünftige Code-Dokumentation zu erzwingen…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.02.2016, 21:37
Beitrag #6

aw Offline
LVF-Grünschnabel
*


Beiträge: 32
Registriert seit: Nov 2013

2015
2013
DE_EN


Deutschland
RE: Case-Auswahl im SubVI abhängig vom Aufrufer
Erst einmal danke für Euer Feedback. Ich bin immer für Anregungen bezüglich guten Programmierstils dankbar. Trotzallem sei mir eine Nachfrage erlaubt.

Zitat:Ich rate von solchen Algorithmen ab. Dieser Algorithmus ist vom Namen des aufrufenden Programmes abhängig. Somit ist das VI wohl nicht wiederverwendbar. Ich würde bei strikten Enums bleiben.
Kannst Du das bitte kurz näher erläutern. Für mich sieht das so aus: Unabhängig davon für welche Variante ich mich entscheide, muss ich bei Änderungen nachbessern. Bei der Variante mit der Aufrufkette muss ich ggf. geänderte VI-Namen ändern oder einen neuen Case für einen neuen Aufrufer hinzufügen.
Im zweiten Fall muss ich die Typdefinition erweitern und ebenfalls einen neuen Case hinzufügen. So oder so ist die Wiederverwendbarkeit bei beiden nicht ohne weiteres gegeben!?!
Ich kann den Vor- oder Nachteil der einen bzw. anderen Variante dabei nicht wirklich erkennen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.02.2016, 22:31
Beitrag #7

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.697
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: Case-Auswahl im SubVI abhängig vom Aufrufer
(10.02.2016 21:37 )aw schrieb:  So oder so ist die Wiederverwendbarkeit bei beiden nicht ohne weiteres gegeben!?!

Bei der Verwendung der Aufrufkette tritt folgendes Problem auf - ein sehr gefährliches Problem: Wenn du das SubVI (im Allgemeinen: ein Modul) in eine neues Projekt integrierst, also in ein neues VI platzierst - wird zur Entwicklungszeit kein Fehler (<= das ist das Problem) auftreten. Warum auch sollte ein Fehler auftreten: Im SubVI machst du einen String-Vergleich, der erst zur Laufzeit relevant ist. Um das Problem zu umgehen, musst du also von vorne herein einen Case im SubVI haben, der eine Meldung macht, wenn das aufrufende VI unbekannt ist. Würde hier jetzt zur Entwicklungszeit ein Fehler auftreten, wäres du nämlich daran erinnert, dass du Strings im SubVI ändern musst. Mag sein, dass dieses Problem in deinem Falle nicht so gravieren ist - aber es besteht.

Wenn du einen Enumerator nimmst, kann überhaupt nichts passieren - da gibt es per se keine Probleme (nur Arbeiten). Zum Modul "SubVI" gehört nämlich auch der Enumerator. Wenn du also das SubVI in ein neues Projekt integrierst ("wiederverwendest"), musst du auch den Enumerator kopieren. Ohne den Enumerator wird zur Entwicklungszeit angezeigt, dass er fehlt! Spätestes dann wirst du ihn kopieren. Zur Integration eines Modules gehört auch immer der Aufruf des Moduls in einem aufrufenden Objekt. Und bei der Platzierung des Modules auf dem BD wirst du bereits zur Entwicklungszeit durch die IDE daran erinnert, dass du einen Eingangsparameter entsprechend belegen musst. Wenn jetzt im Gegensatz zu oben das Programm als ablauffähig angezeigt wird, wird es auch funktionieren (es sei denn du hast dich bei der Auswahl des Enumerators vertippt etc.).

Es gibt auch noch einen programmier-theoretischen Grund, es ohne Aufrufkette und mit Enumerator zu machen: Ein Modul, das wiederverwendet werden soll, muss ein "gekapseltes Objekt" sein. Als solches hat es interne Daten und Funktionen, die nach außen hin nicht sichtbar und nicht zugreifbar sind. Diese internen Daten und Funktionen sind naturgegeben projektunabhängig (das ist zwar sehr schwierig - wenn dem aber nicht so währe, würde man es nicht wiederverwenden wollen). Interes in einem SubVI ist das komplette BD (enthält Daten!) und das FP. Nach außen hin hat ein Objekt eine Schnittstelle - im Falle eines VIs sind das die Ein- und Ausgänge.

Und was meinst du wohl ist mit der Aufrufkette: Der Inhalt der Aufrufkette ist projektabhängig! Es befinden sich innerhalb des Objektes also Daten, die nicht unabhängig sind, aber auch nicht zugreifbar! Aufrufkette widerspricht also dem Paradigma "gekapselt". Mit dem Enumerator ist das ganz einfach: der gehört zur Schnittstelle.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.02.2016, 09:07
Beitrag #8

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Case-Auswahl im SubVI abhängig vom Aufrufer
Hallo aw,

Zitat:Im zweiten Fall muss ich die Typdefinition erweitern und ebenfalls einen neuen Case hinzufügen. So oder so ist die Wiederverwendbarkeit bei beiden nicht ohne weiteres gegeben!?!
Warum nicht?
Wenn du das Enum nur durch Hintenanfügen von neuen Items erweiterst, bleibt die Wiederverwendbarkeit gegeben!
Du musst die älteren Projekte nur beim nächsten Öffnen neu kompilieren, da sich das Enum selbst geändert hat, ansonsten ändert sich aber nichts…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.02.2016, 09:34
Beitrag #9

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.697
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: Case-Auswahl im SubVI abhängig vom Aufrufer
Ich wollte noch folgendes schreiben:

Ein Algorithmus kann mittels eines Namens identifiziert werden. Spricht: Wenn du eine Case-Sequenz hast, die abhängige Sachen macht, so hat jeder einzelne Programmteil in den Cases einen Namen - offensichtlich den Namen, den auch der Case hat. Nun sollte aber dieser Name nach dem gewählt werden, was der Programmteil tut (Enumerator) - und nicht nach dem, der diesen Programmteil aufruft (Aufrufkette). Mag sein, dass bei dir diese Namen bisher identisch sind - das ist aber im Normalfall nicht der Fall. Wenn du das SubVI in eine neues Projekt einbindest, heißt der selbe Algorithmus plötzlich anders.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.02.2016, 10:03
Beitrag #10

aw Offline
LVF-Grünschnabel
*


Beiträge: 32
Registriert seit: Nov 2013

2015
2013
DE_EN


Deutschland
RE: Case-Auswahl im SubVI abhängig vom Aufrufer
Hallo IchSelbst und GerdW,

danke für Eure Ausführungen und Muße einem Grünschnabel diese Programmierparadigmen etwas näher zu bringen, ich habe durchaus etwas dazugelernt und sehe jetzt klarer. Ich werde das neue Wissen beim weiteren Programmieren berücksichtigen.

Beste Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Case-Struktur: Angegebener Case nicht vorhanden braendy 10 6.835 02.02.2021 15:05
Letzter Beitrag: Lucki
  Event Case Ignoriert Tastendruck wenn in Gegenwart eines anderen "Leeren" Event Case Ksanto 8 8.261 23.10.2017 09:08
Letzter Beitrag: Ksanto
  Combobox Fallabhängige Auswahl ichmaglachs 4 5.522 29.11.2015 14:24
Letzter Beitrag: ichmaglachs
  Case Strukture mit 3 Case lola2014 13 11.496 23.10.2014 14:17
Letzter Beitrag: GerdW
  Case Auswahl mittels Digitaleingängen voldulum 2 3.387 24.07.2014 13:24
Letzter Beitrag: voldulum
  Subvi in Case beenden Michael26 10 8.575 28.05.2014 11:07
Letzter Beitrag: Michael26

Gehe zu: