LabVIEWForum.de - Einmaliges Cursor-Position lesen

LabVIEWForum.de

Normale Version: Einmaliges Cursor-Position lesen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Aloa!
Ich stehe etwas auf dem Schlauch.. es geht um ein VI, das anhand einer Messdatendatei einen Graphen erstellt (Massenspektrometermessung mit Magnetstrom als X-Achse). Nun soll mit einem Cursor eine X-Position ausgewählt werden, von der man die Masse weiß. Auf Knopfdruck (Boolean False->True) soll nun die X-Achse von diesem Punkt ausgehend umgerechnet werden und der entstandene Graph dargestellt werden. Wenn der Boolean wieder zu False geändert wird, soll der Ursprungsgraph dargestellt werden. Aktuell arbeite ich daher mit einer Case-Struktur, die je nach True/False des Schalters den einen oder den anderen Graphen darstellt. Funktioniert soweit recht gut...

Mein Problempunkt ist nun das Abfragen der aktuellen X-Cursors-Position. Abfragen kann ich sie, wenn ich dann damit allerdings die X-Achse umrechne, ändert sich widerum die X-Position des Cursors, womit erneut die X-Achse angepasst wird usw. ... was dann zu nichts verwertbarem führt. Ich will also beim Knopfdruck (Boolean False->True) einmalig die X-Position des Cursors abfragen und anhand dessen die Achse umrechnen; zumindest ist das aktuell mein Ansatz, bei dem ich allerdings nicht all zu weit komme.

Wenn ich den Schalter auf Latch stelle, sollte ich ja mit einer Case-Struktur die X-Cursor-Position beim Knopfdruck abfragen, dann habe och allerdings ein Problem mit der Case-Struktur des "normaler Graph/umgerechneter Graph" - es gibt also nicht zufällig eine mir bisher entgangene Möglichkeit, einen Schalter im Frontpanel an sich als "beim Drücken schalten" aber nebenbei auch als Latch im Blockdiagramm zu verbinden? Es wäre noch eine Möglichkeit mit zwei Schaltern zu arbeiten, aber das würde ich ungern machen..

Ich habe auch schon probiert, die X-Position einfach in ein Array zu schreiben und nur den ersten Wert auszulesen. Nur entweder überschreibt er dann den ersten Wert kontinuierlich oder wenn ich wieder in die Normaldarstellung wechsele und mit einer anderen Position/Masse umrechnen will führt er das Array weiter fort und ich lese die "alte" Position. Würde es also gehen wäre es auch eine Möglichkeit, einzubauen, das beim wechsel True->False das Array gelöscht wird, da bin ich allerdings auch nicht weiter gekommen.

Sollten meine Ansätze alle zu nichts zu gebrauchen sein freue ich mich natürlich sehr über Inspiration anderer Herangehensweisen *g*

Danke schonmal im Vorraus! Smile
1. Möglichkeit:
Event-Struktur verwenden! Du arbeitest nur etwas ab, wenn auch das Event "Knopf betätigt" erfasst wird.

2. Möglichkeit: Du erfasst den Status-Wechsel des Buttons, d.h. du schaust dauernd nach, ob sich der Zustand geändert hat. Und nur bei Änderung des Zustandes machst du was.

Ein fertiges VI dazu gibt es unter der Palette Signal-Processing -> Point by Point -> Other Functions PtbyPt

Gruß, Jens
Hallo,

hier mal eine schnell umgesetzte Konzeptidee, wobei ich mal die Y-Werte neu berechnet habe. Aber was man im entsprechenden Case gemacht wird, ist ja egal Wink Ach ja, und ne Reset Funktion ist auch dabei, falls doch mal neu berechnet werden soll Smile

[attachment=32873]

[attachment=32874]

Beste Grüße,
NWO
Danke für die schnellen Antworten Smile

Wenn ich die Abfrage des X-Cursor-Punktes in eine Event-Struktur packe funktioniert es zwar, aber ich müsste die Graphenskalierung automatisch lassen (was zoomen, wenn ich nicht was übersehen habe, bei einem wiederholt ausgeführtem VI nicht möglich macht); Atm nutze ich eine ausgeschaltete Auto-Skalierung und einen Latch-Button der mir auf Knopfdruck einmalig die Achsen wieder passend Skaliert.

Bei der Zustandsänderungsabfrage (ich wandle den Boolean in 0/1 um und Frage dort eine Zustandsänderung über beschriebene VI ab, steuere über ausgegebenen Boolean widerum eine Case-Struktur, welche bei True den aktuellen Cursor-Wert übergibt) habe ich das Problem, das ich auch bei False etwas übergeben muss, er also den bei True gesendeten Wert nicht "speichert".

Dein VI kann ich leider nicht öffnen, NWOmason, da mein Labview etwas zu alt ist :/
Und anhand des Screenshots werde ich mit meinem bisherigen Können noch nicht ganz schlau ^^

Aktuell habe ich es ersteinmal so gelöst, das man die aktuelle Cursor-Position angezeigt bekommt und einfach in ein Bedienelement per Hand übertragen muss, der Wert somit aber "fix" ist. Was jedoch keine "perfekte" Lösung ist.

Ich habe nun mal mein VI angehängt, vielleicht findet sich da ja auch ein prinzipieller Denkfehler von mir. Allerdings befürchte ich, das mein Programmierstil eher mau ist, da ich mich seit noch nicht zu langer Zeit rein per Ausprobieren "einarbeite".
Der Anfangskram ist nur dafür da, den Header nach gewissen Kriterien auseinander zu sägen, in bestimmten Feldern anzuzeigen und die Messdaten auszulesen und zu Formatieren (am Ende habe ich dann zwei 1d-Arrays aus Fließkommazahlen, welche in die Case-Struktur übergeben werden).
(22.03.2011 14:03 )GaK schrieb: [ -> ]Wenn ich die Abfrage des X-Cursor-Punktes in eine Event-Struktur packe funktioniert es zwar, aber ich müsste die Graphenskalierung automatisch lassen (was zoomen, wenn ich nicht was übersehen habe, bei einem wiederholt ausgeführtem VI nicht möglich macht)

Die wiederholte Ausführung benutzt man auch nur zu Debug-Zwecken oder Testen. Im Normalfall hat man _immer_ eine While-Schleife um die relevanten zu wiederholende Programmteile gezogen. Ich persönlich nutze den Button so gut wie niemals.

(22.03.2011 14:03 )GaK schrieb: [ -> ]Dein VI kann ich leider nicht öffnen, NWOmason, da mein Labview etwas zu alt ist :/
Und anhand des Screenshots werde ich mit meinem bisherigen Können noch nicht ganz schlau ^^

Sorry, da hatte ich mich verschaut, ich dachte deine Version wäre die 8.6. Ich habe es jetzt nochmal weiter runterkonvertiert. Nun sollte es zu öffnen sein.

[attachment=32879]

Dort ist die das Ganze mit einer Eventstruktur umgesetzt. Mit dem Button 'Umschalten' wird der Graph zwischen den ursprünglichen Werten und den neuen Werte umgeschalten. Wird der Button zum ersten mal betätigt, findet eine Neuberechung (im Beispiel der Y-Werte) statt. Dieses lässt sich auch wieder Quitieren und beim nächsten Umschalten des Buttons auf Ture findet eine erneute Neuberechung statt. Der 'Stop'-Botton beendet das Progamm Wink

Beste Grüße,
NWO
Referenz-URLs