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!
28.02.2007, 15:45 (Dieser Beitrag wurde zuletzt bearbeitet: 28.02.2007 15:45 von monoceros84.)
Ich habe einen Menu-Ring, den ich zur Laufzeit des Programms über die Eigenschaft StringsAndValues[] mit Daten fülle. Nun soll aber immer der erste Eintrag des Rings standartmäßig vorselektiert werden. Statt dessen schreibt LabVIEW einen Wert <2> oder ähnliches rein. Dies ist ein ungültiger Wert und verursacht in meinem Programm nur unnötigen Ärger. Der einfachste Weg wäre also eine Selektion des ersten Eintrages. Wie kann ich das lösen?
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Item eines Menu Ring selektieren
Hallo,
lade doch bitte mal Dein VI hoch, ich würde es mir gerne mal anschauen. Dann kann ich evtl. auch helfen.
Mir kommt es nämlich komisch vor, dass LabVIEW <2> reinschreibt.
Gruß Markus
' schrieb:Hi...
Ich habe einen Menu-Ring, den ich zur Laufzeit des Programms über die Eigenschaft StringsAndValues[] mit Daten fülle. Nun soll aber immer der erste Eintrag des Rings standartmäßig vorselektiert werden. Statt dessen schreibt LabVIEW einen Wert <2> oder ähnliches rein. Dies ist ein ungültiger Wert und verursacht in meinem Programm nur unnötigen Ärger. Der einfachste Weg wäre also eine Selektion des ersten Eintrages. Wie kann ich das lösen?
Danke für eure Hilfe!
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
28.02.2007, 16:30 (Dieser Beitrag wurde zuletzt bearbeitet: 28.02.2007 16:33 von cb.)
Ich habe einen Menu-Ring, den ich zur Laufzeit des Programms über die Eigenschaft StringsAndValues[] mit Daten fülle. Nun soll aber immer der erste Eintrag des Rings standartmäßig vorselektiert werden. Statt dessen schreibt LabVIEW einen Wert <2> oder ähnliches rein. Dies ist ein ungültiger Wert und verursacht in meinem Programm nur unnötigen Ärger. Der einfachste Weg wäre also eine Selektion des ersten Eintrages. Wie kann ich das lösen?
Danke für eure Hilfe!
Das Problem entsteht durch eine s.g. Race Condition, vermutlich hast du die Property-Node zum Befüllen der Strings parallel zu einer lokalen Variablen gelegt, die den ersten Wert auswählt. Am einfachsten umgeht man das so:
Zur Erklärung: die Property-Node und die lokale Variable können nicht exakt zur gleichen Zeit verarbeitet werden. Wenn die Property Node und die lokale Variable parallel liegen, wird mehr oder weniger zufällig das eine oder das andere zuerst ausgeführt. Wenn nun die lokale Variable als erstes ausgeführt wird und der Ring noch keine Elemente hat, wird der Standard-Wert für den ausgewählten Index angezeigt. In deinem Fall ist das <2> für das 3. Element.
@VDB: Was soll das mit dem "Scan" bringen? Es reicht doch, die Ring-Variable nach dem Schreiben einfach mit "0" zu beschreiben! Hab ich da evtl. die Frage missverstanden?
@Markus: Das mit dem <2> kommt vor, wenn irgendwie ein Eintrag nicht "sauber" definiert wurde, oder wenn aus "Reihenfolge-Gründen" irgendwas nicht passt...ich konnte das jetzt grade auch nicht reproduzieren, aber ich hatte das auch schon mal...ist aber immer ein Verständnisproblem/Benutzerfehler!
Gruss
Achim
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
28.02.2007, 16:43 (Dieser Beitrag wurde zuletzt bearbeitet: 28.02.2007 16:44 von VDB.)
' schrieb:@VDB: Was soll das mit dem "Scan" bringen? Es reicht doch, die Ring-Variable nach dem Schreiben einfach mit "0" zu beschreiben! Hab ich da evtl. die Frage missverstanden?
@Markus: Das mit dem <2> kommt vor, wenn irgendwie ein Eintrag nicht "sauber" definiert wurde, oder wenn aus "Reihenfolge-Gründen" irgendwas nicht passt...ich konnte das jetzt grade auch nicht reproduzieren, aber ich hatte das auch schon mal...ist aber immer ein Verständnisproblem/Benutzerfehler!
Gruss
Achim
Es ist eine universelle Lösung, falls man ein bestimmtes Item einstellen möchte.
Um nur das erste Element zu setzen reicht i2dx Lösung aus...
Danke für die schnellen Antworten. Ich bin leider schon daheim, deswegen kann ich das VI jetzt nicht posten. Aber es ist nicht viel dazu - im Grunde entspricht es dem, was i2dx gepostet hat. Nur wird anstatt der String- die StringsAndValues-Eigenschaft benutzt. Und das Array wird dynamisch erzeugt. Hintergrund ist der:
Der Benutzer wählt irgendwann am Anfang eine beliebige Variation aus 6 zu testenden Modulen aus. Dabei ist es wichtig zu wissen, ob er z.B. Modul 1, 2, 3 und 4 - oder Modul 2, 4, und 6 testen will. Diese ausgewählten Module werden in einem Array gespeichert. Und dieses Array soll letztendlich in den Menu Ring, um die Auswahl der grafischen Anzeige der Testdaten zu ermöglichen. Dabei kommt dann je nach Auswahl des Benutzers die entsprechende Modulnummer aus dem Ring. Es kann also passieren, dass in dem Ring nur die Values 2, 4 und 6 vorkommen, jedoch keine 0 oder 1.
Deswegen geht das mit der Konstante 0 im Beispiel von i2dx nicht. Ich habe auch keine lokalen Variablen definiert - einfach das Array dem Proporty-Knot übergeben.
Was ich weiterhin schon probiert habe, ist ähnlich dem Beispiel von i2dx: Im gleichen Proporty-Knot die Value-Eigenschaft zu setzen. Allerdings nicht mit einer Konstante, sondern mit dem Value-Wert des ersten Array-Eintrages. Dabei wechselt LabVIEW aber nicht zum ersten Listeneintrag, sondern versucht, dem gerade angezeigtem Eintrag <2> (oder manchmal auch <0>, <1> usw.) diesen Value-Wert zuzuweisen. Das geht meistens schief, weil es dann halt doppelte Values in dem Ring gibt.
Was ich nochmal probieren werde ist dem Ring direkt ohne Proporty-Knot den Value-Wert zuzuweisen - wie in dem Beispiel von VDB. An so was simples hab ich gar nicht gedacht.
' schrieb:Statt dessen schreibt LabVIEW einen Wert <2> oder ähnliches rein. Dies ist ein ungültiger Wert und verursacht in meinem Programm nur unnötigen Ärger.
Bin mir nicht ganz sicher, aber wenn man in den Eigenschaften "undefinierte Werte zulassen" abhakt, dann dürfte das doch nicht mehr passieren...
' schrieb:Bin mir nicht ganz sicher, aber wenn man in den Eigenschaften "undefinierte Werte zulassen" abhakt, dann dürfte das doch nicht mehr passieren...
doch, das kommt trozdem vor, weil man den Wert ja quasi *von intern aufdrängt*. Wenn der Haken bei "undefinierte Werte" gesetzt ist hat man noch den zusätzlichen Menüpunkt "andere" und kann einen anderen Wert eintragen, aber das will man ja bei einem Ring meistens gerade nicht ...