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 

Anschlüsse überprüfen



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!

19.11.2009, 19:33
Beitrag #1

loki77 Offline
LVF-Grünschnabel
*


Beiträge: 14
Registriert seit: Oct 2009

7.1.1
-
de

81677
Deutschland
Anschlüsse überprüfen
Hallo,

ich wollte wissen, wie ich in einem SubVI überprüfen kann, ob bestimmte Eingänge im aufrufenden VI verdrahtet sind oder nicht.

Hintergrund:
Ich habe eine FGV mit mehreren Eingängen. Es besteht die Notwendigkeit, bestimmte Kombinationen von Eingängen zu verdrahten, d.h. mal will ich in Eingang A und C schreiben, mal nur C, mal A, D und C und so weiter. Wenn ich aber einen "Schreibe auf allen Eingängen"-Case zulasse, so gehen die Daten der unverdrahteten verloren (da sie den Momentanwert des Bedienelements bekommen).

Weiß jemand eine Lösung?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2009, 19:47 (Dieser Beitrag wurde zuletzt bearbeitet: 19.11.2009 19:59 von Lucki.)
Beitrag #2

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Anschlüsse überprüfen
Mir fällt dazu auch nichts Besseres als das:
Als Standardwert einen Wert nehmen, der normalerweise bei angeschlossenem Eingang nicht vorkommt, also z.B NaN bei dbl-Format.
Und dann per Case-Unterscheidung dafür sorgen, daß, wenn der Standardwert vorkommt, also am Eingang nichts angeschlossen ist, der alte Wert im FGV-VI nicht überschrieben wird.
Die Methode im Beispiel funktioniert natürlich nicht, wenn NaN auch als regulärer Wert vorkommen kann, es ist also nicht unbedingt die Universal-Lösung. Besser wäre es, wenn ein VI direkt erkennen könnte, ob ein Eingang verdrahtet ist oder nicht. Die Funktionen von NI selbst beherschen diese Unterscheidung, aber es wird nach meinem Kenntnisstand nicht verraten, wie sie das machen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2009, 19:58
Beitrag #3

loki77 Offline
LVF-Grünschnabel
*


Beiträge: 14
Registriert seit: Oct 2009

7.1.1
-
de

81677
Deutschland
Anschlüsse überprüfen
Mir ist gerade selbst was eingefallen: Ich beschreibe im Spalt rechts zwischen Case- und For-Struktur per Eigenschaftsknoten das Bedienelement mit dem jeweils aktuellen Wert. So müsste das gehen...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2009, 22:02
Beitrag #4

schrotti Offline
LVF-Freak
****


Beiträge: 842
Registriert seit: Feb 2008

2009 - 2011
2006
kA

70180
Deutschland
Anschlüsse überprüfen
Du könntest für jeden Fall einen Case machen. Wenn du nur A schreiben willst, dann nimm nur den Wert von A entgegen. Wenn du dafür die Werte alten Werte von B und C benötigst, dann holst du sie dir aus dem lokalen Speicher. Wenn das mit den Referenzen klappt solltest du es nur anwenden, wenn deine FGV nicht oft aufgerufen wird, da die Wertübergabe per Referenz sehr langsam ist.

@Lucki: Welche Funktion zeigt soch ein Verhalten? Ist mir völlig unbekannt. Kenne nur die Möglichkeit, einen Eingang als "Erforderlich" zu setzen, was zur Folge hat, dass das VI bei fehlender Verdrahtung nicht ausführbar ist.

Gruß Julius
Empfehlungen: expressionflow, LavaG , mooregoodideas, OpenG, JKI Blog
Tipp
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2009, 22:09
Beitrag #5

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Anschlüsse überprüfen
Hmm
Sinn eines FGV ist es doch, Werte, die ich im Speicher halten will, in einem Schieberegister der äußeren While-Schleife zu speichern.
Und wenn ich im Fall X den Eingang A nicht brauche, dann wird damit in Fall X nichts gemacht. Wenn Eingang A dafür im Fall Y gebraucht wird, wird er auch im Fall Y verwendet. Ich sehe keinen Bedarf, irgendeinen Wert per PropertyNode zu lesen oder zu schreiben...

Wenn du dir jetzt nicht merken willst, bei welchem Fall des FGV du welche Eingänge brauchst und welche nicht, dann schreibst du einfach für jeden Aufruffall ein eigenes VI.

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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2009, 23:21 (Dieser Beitrag wurde zuletzt bearbeitet: 20.11.2009 08:51 von Lucki.)
Beitrag #6

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Anschlüsse überprüfen
' schrieb:@Lucki: Welche Funktion zeigt soch ein Verhalten? Ist mir völlig unbekannt.
Nehmen wir als ein Beispiel von etlichen anderen die Funktion "Aus Array entfernen".
   
Wenn ich dort (oberes Bild) als Länge nichts anschliieße, wird als zu entfernende Länge 1 benutzt. Der gelöschte Teil ist eine einfache Zahl.
Wenn ich aber die Länge 1 an den Input tatsächlich anschließe, sollte man meinen es kommt das Gleiche heraus. Nicht ganz: der gelöschte Teil ist jetzt ein Array der Länge 1.
Und es geht weiter: Wenn ich an diesen Eingang mit der rechten Maustaste eine Konstante erzeuge, so hat diese den Wert 0. Der gelöschte Teil ist dann ein leeres Array.

Ich möchte den sehen, der ein solches Verhalten in einem eigenen SubVI nachbaut. Ich meine, daß NI beim Erstellen seiner VIs über Features verfügt, die den "Menschen draußen im Lande" (- wie unsere Bundeskanzlerin zu sagen pflegt -) nicht zur Verfügung stehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2009, 23:46 (Dieser Beitrag wurde zuletzt bearbeitet: 19.11.2009 23:47 von schrotti.)
Beitrag #7

schrotti Offline
LVF-Freak
****


Beiträge: 842
Registriert seit: Feb 2008

2009 - 2011
2006
kA

70180
Deutschland
Anschlüsse überprüfen
@Lucki: Ah ok, ich dachte du meinst zur Laufzeit. Mit Scripting ginge das was du meinst wohl, vernünftig wäre es aber nicht.Big Grin

Gruß Julius
Empfehlungen: expressionflow, LavaG , mooregoodideas, OpenG, JKI Blog
Tipp
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
20.11.2009, 12:06
Beitrag #8

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Anschlüsse überprüfen
' schrieb:Und wenn ich im Fall X den Eingang A nicht brauche, dann wird damit in Fall X nichts gemacht. Wenn Eingang A dafür im Fall Y gebraucht wird, wird er auch im Fall Y verwendet.
Also hier liegst Du entweder ganz falsch oder ich versteh nicht wie Du das meinst.
Wenn man den Eingang A nicht braucht, ihn also nicht anschließt, dann wird eben doch etwas gemacht: Es wird der Standardwert genommen, und der ist nicht identisch mit dem alten Wert im Shift-Register, den man erhalten möchte.
Ja, wenn es gelänge, ein SubVI bei mehrfachem Aufruf dazu zu bringen, daß es, wenn ein Eingang nicht angeschlossen ist, statt des Standardwertes den zuletzt eingegebenen Wert verwendet, dann wäre das Problem radikal gelöst. So radikal, daß man für die Speicherung eines Wertes in einer FGV gar kein Shiftegister mehr bräuchte.
Man braucht eben in einer FGV immer noch einen boolschen Eingang, mit dem ich dem VI sage, daß ein neuer Wert am Eingang anliegt. Den Knopf brauche ich deshalb, weil das SubVI zu dumm ist selbst zu erkennen, ob ein Eingang angeschlossen ist oder nicht.
Es ist durchaus aus möglich, in einer FGV beliebig viele Werte zu speichern, aber dann braucht man eben für jede dieser Varablen einen seperaten boolschen Knopf. Also so:
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
20.11.2009, 12:46
Beitrag #9

TSC Offline
LVF-Team
LVF-Team

Beiträge: 1.882
Registriert seit: Sep 2008

LV 2018 SP1
2008
EN

52379
Deutschland
Anschlüsse überprüfen
' schrieb:Nehmen wir als ein Beispiel von etlichen anderen die Funktion "Aus Array entfernen".
[attachment=50861:clipInputs.png]
Wenn ich dort (oberes Bild) als Länge nichts anschliieße, wird als zu entfernende Länge 1 benutzt. Der gelöschte Teil ist eine einfache Zahl.
Wenn ich aber die Länge 1 an den Input tatsächlich anschließe, sollte man meinen es kommt das Gleiche heraus. Nicht ganz: der gelöschte Teil ist jetzt ein Array der Länge 1.
Und es geht weiter: Wenn ich an diesen Eingang mit der rechten Maustaste eine Konstante erzeuge, so hat diese den Wert 0. Der gelöschte Teil ist dann ein leeres Array.

Ich möchte den sehen, der ein solches Verhalten in einem eigenen SubVI nachbaut. Ich meine, daß NI beim Erstellen seiner VIs über Features verfügt, die den "Menschen draußen im Lande" (- wie unsere Bundeskanzlerin zu sagen pflegt -) nicht zur Verfügung stehen.

Ist das nicht einfach ein optionaler Anschluss mit Standardwert 1???

LG
Torsten

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
20.11.2009, 12:53
Beitrag #10

SeBa Offline
LVF-Guru
*****


Beiträge: 2.025
Registriert seit: Oct 2008

09SP1 & 10 FDS
2008
DE

65xxx
Deutschland
Anschlüsse überprüfen
Ich habe mich vor einiger Zeit mit einer ähnlichen Problematik auseinandergesetzt.

In einer FGV werden die Daten in einem Cluster gespeichert. Damit wollte ich erreichen, nur ein Read im Enum zum steuern der FGV zu haben, ebenso nur ein Write. Das funktionierte auch ganz gut, nach dem Read kann man mit "unbundle by name" den Wert(oder mehrere) bekommen den man will.
Beim Schreiben mit "bundle by name" wurden aber immer nur die angeschlossenen Werte geschrieben, nicht angeschlossene Werte bekamen die Werte aus der Konstanten. Werte die in einem vorhergehenden Write in die FGV gespeichert wurden gingen so wieder verloren (Bild1).
Erste Abhilfe habe ich mir dann beschafft, indem ich die FGV vor dem Write einfach ausgelesen habe und die Ausgabe als "Konstante" für "bundle by name" genutzt habe (Bild2).

    #1

    #2

Funktioniert... hat mir aber nicht so gefallen. Daher habe ich nach einer Möglichkeit gesucht, nur Werte im Cluster der FGV zu speichern, wenn diese von einem Standardwert abweichen. In meinem Fall ein leerer String und NaN.
Was ich jetzt noch lösen müsste, wäre das Rücksetzen von einem Clustereintrag auf den Init-Wert. Einfach NaN zu speichern geht ja nicht, da das dem Standard entspeicht und ignoriert wird. Aber das ist für mich im Moment nicht so wichtig.

In der neuen FGV vergleiche ich also die Werte im Cluster mit den Standardwerten, nur wenn die neuen Werte ungleich dem Standard sind, werden sie gespeichert (Bild5) ansonsten wird der Wert aus dem Shiftreg. der FGV behalten (Bild6).

    #3

    #4

    #5
    #6

Vielleicht hilft es dir, bestimmt kann man das eleganter lösen...


Gruß SeBa

Dieser Beitrag soll weder nützlich, informativ noch lesbar sein.

Er erhebt lediglich den Anspruch dort wo er ungenau ist, wenigstens eindeutig ungenau zu sein.
In Fällen größerer Abweichungen ist es immer der Leser, der sich geirrt hat.

Rette einen Baum!
Diesen Beitrag nur ausdrucken, wenn unbedingt nötig!
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
  SubVI Anschlüsse ändern mikadm 2 5.263 06.08.2020 05:50
Letzter Beitrag: MScz
  String überprüfen ob Buchstabe vorhanden ist marsius 3 5.289 19.05.2014 07:48
Letzter Beitrag: GerdW
  Zahl auf Wertebereich überprüfen und Ausgang setzen Serial 3 5.182 29.04.2014 06:20
Letzter Beitrag: Serial
  String auf "Nicht-"Zahlen überprüfen... Booner 8 8.393 15.01.2013 14:33
Letzter Beitrag: GerdW
  SubVI ohne Anschlüsse iMax 7 8.787 19.12.2012 14:59
Letzter Beitrag: PaulF
  Überprüfen von Pfaden wohlhum 6 7.446 23.01.2012 16:47
Letzter Beitrag: Odie

Gehe zu: