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 

Kann ein VI erkennen, ob an den Ports ein Draht angeschlossen ist?



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!

06.03.2012, 09:55
Beitrag #11

BNT Offline
LVF-Freak
****


Beiträge: 744
Registriert seit: Aug 2008

5.0 - 22Q3
1999
EN

64291
Deutschland
RE: Kann ein VI erkennen, ob an den Ports ein Draht angeschlossen ist?
Hi
Die Frage, wissen zu wollen, ob im Caller-VI ein Draht an ein SubVI angeschlossen ist oder nicht, zeugt meiner Meinung nach von schlechtem Design.

Ein VI kann selbstständig ausgeführt werden, und übernimmt die Daten für die Datenquellen auf dem Blockdiagramm aus den Frontpanel-Controls. Wird es als subVI aufgerufen, übernimmt es die Daten für die Datenquellen auf dem Blockdiagramm vom Caller. Datenfluss! In beiden Fällen sollte das VI sinnvoll und vorhersagbar arbeiten und richtige Ergebnisse liefern.

Die Frage, wissen zu wollen, ob im Caller-VI ein Draht an ein SubVI angeschlossen ist oder nicht, kann man vermeiden, in dem man die notwendigen Eingänge der Connector-Pane auf required setzt. Dann ist der Caller gezwungen eine sinnvolle Wahl zu treffen. Ob Rückgabewerte vom Caller verarbeitet werden, sollte völlig irrelevant sein.

Zusätzlich sollte in jedem SubVI der Wertebereich der Eingänge überprüft werden. Das gilt natürlich auch für die Ausgänge. Auch die Ausgänge sollten immer in einem definierten Wertebereich liegen, auf den sich der Caller verlassen kann. Fehlverhalten sollte im Error Cluster berichtet werden. Für die Fehlerbehandlung ist dann wieder der Caller zuständig.

Dieses Vorgehen hilft, robuste Software zu entwicklen. Übrigens: Der VI-Analyzer kann überprüfen, ob alle Error-Ausgänge verdrahtet sind.

Gruß Holger

NI Alliance Partner & LabVIEW Champion
GnuPG Key: 6C077E71, refer to http://www.gnupg.org for details.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
06.03.2012, 12:37 (Dieser Beitrag wurde zuletzt bearbeitet: 06.03.2012 12:39 von Kiesch.)
Beitrag #12

Kiesch Offline
LVF-Stammgast
***


Beiträge: 412
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
RE: Kann ein VI erkennen, ob an den Ports ein Draht angeschlossen ist?
@BNT

Eigentlich wäre solches Verhalten sogar ein Designevorteil. Es geht ja nicht darum wie Fehlende Drähte allgemein zu behandeln sind und das das trotzdem funktionieren (oder gerade nicht - setzen auf "erforderlich") soll, sondern darum eine Funktionsumschaltung durch die Anordnung der Verdrahtung zu erreichen.

Im Prinzip ist ja gewünscht, dass man eine FGV nicht über ein explizites Kommando steuert, sondern über Ein- / Ausgangsbelegung. Da diese redundant ist zum Kommando (leer - lösch / Eingang - Schreiben / Ausgang - lesen) wäre das sogar dahingehend sinnvoll, dass man sich Fehler bei falschem Kommando spart (was weis ich, unachtsam das falsche Kommando reingegeben im Code).

Andererseits kann man so natürlich bei vergessener Verkabelung neue Fehler produzieren. Denke trotzdem dass das SO (mit "intuitiver" Kommandoerkennung) die bessere Variante wäre. Aber na ja, ist ja mindestens beim Ausgang nicht ganz einfach möglich.

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.03.2012, 13:15 (Dieser Beitrag wurde zuletzt bearbeitet: 06.03.2012 13:16 von BNT.)
Beitrag #13

BNT Offline
LVF-Freak
****


Beiträge: 744
Registriert seit: Aug 2008

5.0 - 22Q3
1999
EN

64291
Deutschland
RE: Kann ein VI erkennen, ob an den Ports ein Draht angeschlossen ist?
Wäre es dann nicht immer besser die FGV in subVIs zu kapseln, die jeweils nur schreiben oder lesen, also nur einen Eingang und keinen Ausgang und umgekeht haben?

Das sind zwar zwei VIs mehr, aber ein solches Design wäre Datenfluss-konform und beim Aufruf im Caller unproblematisch.

Gruß Holger

NI Alliance Partner & LabVIEW Champion
GnuPG Key: 6C077E71, refer to http://www.gnupg.org for details.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.03.2012, 09:40
Beitrag #14

Hook1986 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 149
Registriert seit: Jan 2012

2010
2011
DE_EN


Deutschland
RE: Kann ein VI erkennen, ob an den Ports ein Draht angeschlossen ist?
Hallo,

@Kiesch /Lucki: Wieso sollte man denn bei einer FGV den Fall Release, also löschen der Daten, überhaupt benötigen? Ist für mich etwas seltsam, dass man einen Wert löschen und nicht ersetzen will.

Prinzipiell ist es doch aber von Voretil, wenn man einem SubVI einen "Befehl" mitgibt, da dies durchaus auch die Wartbarkeit des übergeordneten VIs stark erhöht und die Lesbarkeit des Codes verbessert.

MfG Carsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.03.2012, 14:09
Beitrag #15

Kiesch Offline
LVF-Stammgast
***


Beiträge: 412
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
RE: Kann ein VI erkennen, ob an den Ports ein Draht angeschlossen ist?
Nunja, die Info kann man auch in die Kontexthilfe stecken, wobei die man das sowieso nur in Fällen verwenden sollte in denen aus der Anschlussbelegung auch sofort der Verwendungskontext für den Bearbeiter klar wird Big Grin

Davon ab: Man kann mit einem Release ja intern auch einen Schalter setzen, der darauf hinweist das die Variable nicht initialisiert ist. Das könnte man zum Beispiel brauchen wenn man eine Motorsteuerung hat die kalibriert wird und die Kalibration da drin speichert weil die in verschiedenen Programmteilen gebraucht wird und irgendwann diese Kalibration löscht um anzuzeigen, dass die nichtmehr gültig ist (was weis ich - Kalibration basiert auf nem Abstand zu nem Werkstück und man wechselt das Werkstück und muss die deswegen neu machen o.ä.). Dann kann man schon mit dem Wechsel des Werkstücks die Kalibration löschen und so sicherstellen, dass die neu gemacht werden muss.

Wie gesagt das nur mal als mögliches Beispiel. Bin da auch aktuell am basteln einer sinnvollen Architektur meiner LV Objekte, damit die selbst Rückmeldung geben ob die Vollständig initialisiert sind oder nicht. In meinem Fall würde ich dabei durch das Resetten vor allem einen Buffer löschen (Array das Werte aus einem File einliest) und natürlich sicherstellen, mein Programm weis ob es schon in dem File gelesen hat und die Daten aus dem RAM nehmen darf oder aber das File neu einlesen muss. etc. pp. Gibt eigentlich zahllose Anwendungen für einen kontrollierten Reset.

Gruß Kiesch

P.S: @BNT

Es geht hier um eine Erleichterung der Arbeit. Wenn es eine einfache Möglichkeit gäbe auf sowas zu prüfen wäre das schon schick. Ist letztlich nichts anderes als eine Art von Funktionen überladen. Die Möglichkeit vermisse ich in Labview tatsächlich schmerzlich (auch wenn es halt eine Designentscheidung von NI ist - auch wenn ich das Inkonsequent finde, wo man doch ohne OO auch polymorphe VIs unterstützt)...
Wie auch immer, letztlich muss man selbst entscheiden wie der Code für einen selbst am leichtesten durchschaubar und Verständlich ist. Nach aktueller funktionalität ist dabei vermutlich tatsächlich die Kapselung der FGV die sinnvollste Variante.

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.03.2012, 15:14 (Dieser Beitrag wurde zuletzt bearbeitet: 07.03.2012 15:15 von phylin.)
Beitrag #16

phylin Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 60
Registriert seit: Nov 2011

8.5
2011
DE


Deutschland
RE: Kann ein VI erkennen, ob an den Ports ein Draht angeschlossen ist?
(06.03.2012 13:15 )BNT schrieb:  Wäre es dann nicht immer besser die FGV in subVIs zu kapseln, die jeweils nur schreiben oder lesen, also nur einen Eingang und keinen Ausgang und umgekeht haben?

Das sind zwar zwei VIs mehr, aber ein solches Design wäre Datenfluss-konform und beim Aufruf im Caller unproblematisch.

Gruß Holger

Die Idee gefällt mir. Lässt sich auch super mit Polymorphen VI kombinieren, in dem das fehlende Schieberegister durch eine FGV in den polymorphen VI instanzen ersetzt wird.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.03.2012, 15:41 (Dieser Beitrag wurde zuletzt bearbeitet: 07.03.2012 15:42 von eb.)
Beitrag #17

eb Offline
LVF-Lernwilliger
***


Beiträge: 292
Registriert seit: Mar 2008

2014
2008
EN

12xxx
Deutschland
RE: Kann ein VI erkennen, ob an den Ports ein Draht angeschlossen ist?
Hallo,

ich verfolge eure Gedankengänge durchaus interessiert, aber werde immer skeptischer...

Sofern die Anwendung nicht hochkomplex ist, und der Nutzen solch "unüblicher Struktur-Konstruktionen" den Aufwand und die Gehirnknoten (bei euch und anderen) rechtfertigt, bin ich weiterhin der Ansicht:
Keep it simple! Das ist oft die nachhaltigste Designentscheidung, die auch der Wartbarkeit und Pflegbarkeit sehr zu Gute kommt.
Wenn also eine "Standard-FGV" ihren Job tut, warum dann "Unter-FGVs" und "SubFGV-Queue-Init/Read/Write-Verschachtelungen" mit 3 VIs statt einem VI, usw. ?

Ich finde den Ansatz, den der TE gepostet hat, ganz gut: selbstinitialisierende FGV mit typdef Enum. Für komplexere Sachen dann "ActionEngines" wo nötig.
Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.03.2012, 00:11
Beitrag #18

phylin Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 60
Registriert seit: Nov 2011

8.5
2011
DE


Deutschland
RE: Kann ein VI erkennen, ob an den Ports ein Draht angeschlossen ist?
Ich habe mal versucht das TE beispiel als polymorphes VI umzusetzen:
Das VI soll sich je nach angeschlossenem Datentyp automatisch ändern. Das Queue-shiftregister befindet sich in einem FGV-subvi.

Nichts ist angeschlossen: Release
Double am eingang: Send
Double am ausgang: Read

Leider scheiterts am READ fall. Das VI passt sich nämlich nur auf Eingangsdatentypen an.


Angehängte Datei(en)
0.0 .zip  polymorph.zip (Größe: 31,79 KB / Downloads: 195)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Nicht Darstellbare Zeichen erkennen Philipp_O 2 3.534 21.11.2022 07:39
Letzter Beitrag: Philipp_O
  Mehrere Spitzenwerte aus einer Messreihe erkennen niklas2016 8 5.370 15.02.2021 14:27
Letzter Beitrag: BNT
Question Regelwert eingependelt erkennen TpunktN 7 5.863 23.04.2019 13:34
Letzter Beitrag: TpunktN
  Grauwerte Kamera Video erkennen BeutelSeb 0 3.314 25.05.2016 10:09
Letzter Beitrag: BeutelSeb
  Tool - VIs ohne Caller erkennen und auflisten achim @ FZK 1 4.503 07.07.2014 08:40
Letzter Beitrag: achim @ FZK
  Abfrage von Herstellerdaten eines USB-Ports TiCy 16 12.408 12.02.2013 07:49
Letzter Beitrag: dali4u

Gehe zu: