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!
20.11.2015, 12:23 (Dieser Beitrag wurde zuletzt bearbeitet: 20.11.2015 13:26 von jg.)
ich würde gerne zwei Cursor an eine andere Position auf der X Achse setzen.
Ich setzte den einen Cursor durch ein Bedienelement an eine betimmte Position auf der X Achse und den zweiten Cursor erstmal zum Testen 30 Positionen weiter.
Verwende ich dafür die Eigenschaft Cursor Index dann wird der cursor gesetzt aber immer eine paar Positionen versetzt.
Setze ich die Eigenschaft Cursor Position X dann wird der Curser zwar an die richige Position gesetzt, jedoch spring dieser dann zu der alten Position zurück.
Außerdem verändere ich die X Achse des XY Graphen, um quasi an bestimmte Bereiche zu kommen und diese dann mit den Cursor anzugucken.
Der gesamte X - Bereich hat ein Minmum von 289- 689.
Setze ich nun den Bereich zB. auf 520-600 und setzte die Cursor auf den Wert 530(Cursor 0 auf 530,Cursor 1 auf 560), dann wird Cursor 0 bei 442,7 und Cursor 1 bei 472,7 gesetzt.(sehe ich in der Cursorlegende).
Nun muss ich beim Cursorindex 847 eingeben, um den Cursor 0 auf den Wert 530 zu setzten.
Wie schon geschrieben setzte ich bei X Positon (Eigenschaft) den Wert zwar an die gewüsnchte Position , jedoch spring er wieder zurück.
Ist vlt.hier das Problem da ich mehrere Signale habe (Multiplot, mehrere Plots beobachten und an allen Plots einrasten) und er dann an der neun Position wieder an der X Position bei den Signalen wieder einrasten soll bei den beobachteten Signalen und er das nicht kann?
Wie bekomme ich es hin , das die Y Position an ihrer Position bleibt?
Ich kann zwar die ausgewählten Pots beobachten und die dann als Array in die Eigenschaft hineingeben, jedoch fehlt dann die Eigenschaft "Einrasten"
Oder geht es nicht und ich muss mir was Programmieren um mit der Eigenschaft Cursor Index an die gewünschte Position zu kommen oder gibt es noch eine andere Möglichkeit bzw. Eigenschaft , die ich übersehen habe?
Gruß HCO
20.11.2015, 12:49 (Dieser Beitrag wurde zuletzt bearbeitet: 20.11.2015 12:49 von GerdW.)
das Verhalten konnte ich nachvollziehen: wenn man den Cursor über Cursor.Position setzen will, springt er wieder zurück.
Mögliche, sehr einfache Lösung:
Die Angabe "Cursor.Index" bezieht sich auf den Array-Index deiner Plotdaten. Wenn du also den Cursor auf z.B. 555nm auf der X-Achse setzen willst, musst du nur den dazugehörigen Arrayindex im X-Array bestimmen. Und dafür gibt es ja die Funktion "Schwellwert (1D-Array)"!
Das Problem kommt von der Cursor-Einstellung "Multiplot". Nach einigen Versuchen sieht es für mich so aus, als ob da irgendwas im Hintergrund nicht ganz sauber programmiert wurde. Es ist aber auch schwierig, denn die Eigenschaften "Cursor.Cursor Position.Cursor X" bzw. "Y" gibt es ja für jeden Plot. Einen Thread habe ich hierzu auch im NI-Forum gefunden: http://forums.ni.com/t5/LabVIEW/programm...-p/3173077
Ich kann nur spekulieren, was genau das Problem ist, aber es sieht so aus, als ob - da bei Multiplot Cursor ja nicht alle x-Werte auf einmal gesetzt werden können - irgendwie im Hintergrund immer wieder die alten Werte hervorgeholt werden.
Bei einem Single-Plot oder Free Cursor funktioniert dein VI dagegen ohne Probleme.
Jetzt aber zu Lösung, in deinem Fall geht das nämlich über Property "Cursor List", exemplarisch könnte das so in etwas aussehen:
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!
ich habe ein weiteres Problem festgestellt und zwar würde ich meine Cusor Positionen X und Y (Im TestVI nur die X Position) auch gerne anzeigen lassen,wenn ich den Cursor an eine andere X Position gesetzt habe.
Habe schon alle Ereigniscases ausprobiert,"Cursor freigeben","Cursor verschieben","XY Graph Wertänderung" etc.
Wenn ich bei "Cursor verschieben" den Cursor bewege(wie der Name des Cases schon sagt) dann klappt die Anzeige auch.
Wenn ich im "Curser freigeben" den Cursor anklicke dann wird der aktuelle Wert angezeigt und wenn ich ihn dann bewege dann klappt es auch.
Jedoch klappt es bei beiden Fällen nicht,wenn ich den Cursor auf eine andere X Position setze.
In meinem Testprogramm habe ich in der Ereignisstruktur ein Timeout.Setze ich da meine "X Postion ausgeben" hinein dann geht es natürlich, jedoch möchte ich nicht die ganze Zeit eine Eigenschaft im Timeout ausführen und in meinem Hauptprog (kennt Ihr ja, Queuesteuerung) gibt es kein Timeout Case.
Im Hauptprogramm würde es nur funktionieren wenn ich die Casestruktur "Messung starten " die X Position ausgeben würde.Jedoch müsste ich dann bei "Messung beenden" auch nochmal in diesen Case "X Position ausgeben" ausführen,damit ich auch bei Messende auch die eingelesenen Signale untersuchen kann.
Es wäre gut wenn es dafür irgendein Ereigsniscase (den ich eventuellübersehen habe) in der Ereignisstruktur geben würde,da ansonsten die Eigenschaft permament in einer While Loop ausgeführt würde und das ist keine Option.
Zitat:zwar würde ich meine Cusor Positionen X und Y (Im TestVI nur die X Position) auch gerne anzeigen lassen,wenn ich den Cursor an eine andere X Position gesetzt habe.
Welches TestVI?
Wieso muss man eine X-Position anzeigen lassen, die man gerade zuvor selbst gesetzt hat? Dann ist die Position doch schon bekannt, oder?
Wie wird diese "andere X-Position" gesetzt?
weil ich durch den Button "Min Max Achse verändern" bestimmte Bereiche im XY Graphen anzeige, um diese zu Untersuchen.
Und den "Cursor verschieben" Button benutze ich dann später um die Cursor an eine bestimmte Position in den bestimmten Bereich zu setzen. (z.B mittig)
Parallel dazu soll natürlich dann die aktuelle Position XY der Cursor angezeigt werden. (Im TestVI zum Testen die X Position).
Gruß HCO
30.11.2015, 14:37 (Dieser Beitrag wurde zuletzt bearbeitet: 30.11.2015 14:38 von jg.)
Hi Jens,
kurze Abschweifung:
Ja das stimmt. Aber ich verzichte so viel wie möglich auf lokale Variablen.
Erstens wegen den Resourcenspeicher und nicht das sich Race Condition einschleichen.
Nehmen Eigenschaftsknoten mehr Resourcenspeicher in anspruch?
Naja, jetzt zurück zu meinem Problem.
Ich hoffe mir kann jemand helfen.
Durch lokale Variablen wird es auch nicht besser ;P
wenn du die Cursorposition immer anzeigen willst, musst du sie auch immer abfragen. Momentan wartest du auf ein Cursor.Move-Event - und das kommt nun mal nicht, wenn du den Curosr programmatisch positionierst.
Also: TimeOut-Event nutzen. Oder ein benutzerdefiniertes Event. Oder im "Cursor zentrieren"-Event einfach die neue Position in eine lokale Variable deiner Anzeige schreiben!
Zitat:Nehmen Eigenschaftsknoten mehr Resourcenspeicher in anspruch?
PropertyNodes erstellen auch eine Datenkopie, wenn man sie als Ersatz für eine lokale Variable nutzt. Und zusätzlich benötigen sie einen Thread-Wechsel in den UI-Thread, was dein VI nicht schneller macht. Der einzige Vorteil: sie erlauben DATAFLOW-Programmierung über ihre ErrorIO-Anschlüsse…