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!
für ein Datenkonversionstool, das ich mit LabVIEW realisieren will möchte ich auf Eventhandling zurückgreifen. Das Problem sieht folgendermassen aus:
Die Oberfläche enthält ein File-Control sowie diverse Schalter um irgendwelche Parameter der Auswertung zu verändern, sowie ein XY Graph um das Ergebnis der Auswertung anzuzeigen. Wenn ein Change Value-Event am Filecontrol auftritt soll die dort eingetragene Datei eingelesen werden und als Input für die Auswertung zur Verfügung stehen. Dann soll man aber weiterhin irgendwelche Parameter verändern können und das Ergebnis am XY Graph ausgegeben werden. Für die Auswertung und Anzeige verwende ich nun eine Endlosschleife und möchte das Eventhandling für den Filecontrol einbinden. Leider weiss ich aber nicht, wie ich den ausgelesenen File-Inhalt dauerhaft für die Auswertung zur Verfügung stellen kann, ohne ständig die Datei neu auszulesen. Über irgendwelche Variablen? Wie könnte man das am einfachsten realisieren.
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Event-Handling für File Control
Du musst einen "Rechtsklick" (nicht "Linksklick") auf die Whileschleife machen und das Schieberegister dann auch am besten vorinitialisieren.
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Vielen Dank für eure Antworten. Die Idee mit dem Schieberegister hatte ich auch schon - und zwar sollte also die Auswertung in einer Endlosschleife ablaufen, das Schiebereigster liefert einerseits die Daten zur Verarbeitung, schleift sie aber auch für die nächste Runde unverändert durch. Das Problem ist nun aber: wie kann ich es erreichen, dass das Event "Datei laden" die neuen Daten importiert und den Inhalt des Schieberegisters aktualisiert -> die Eventstructure hat ja keine Schieberegister. Und wenn die Event-Struktur sich ausserhalb der Endlosschleife befindet wird sie ja nie abgearbeitet...
Tut mir leid falls die Frage doof ist, ich fange erst gerade an mich überhaupt mit Events zu beschäfigen. Wenn ihr mir ausserdem noch einen Tipp geben könnt, wo die Verwendung von Events gut und ausführlich erklärt ist, würde ich mich auch freuen - die NI Dokumentation dazu finde ich, naja, etwas dürftig...
Vielen Dank und viele Grüße
Oli
21.02.2007, 17:58 (Dieser Beitrag wurde zuletzt bearbeitet: 21.02.2007 18:00 von Kvasir.)
Also ein Schieberegister liefert dir ja auf der linken Seite das, was du in der vorhergegangenen Runde rechts reinverbindest.
Ziehst du jetzt einfach einen Draht von links nach rechts durch, so hast du ständig die Daten gleich.
Bei deinem Event verbindest du dann einfach die neuen Daten mit dem Register.
Aber was versuch ich da irgendwas zu erklären, sieh dir einfach das Bild an, dann weißt du was ich meine (frei nach Luckis Signatur über Vis und Worte)
Gruß
edit: In dem Screenshot fehlt natürlich noch eine Timeoutkonstante, aber das Prinzip sollte erklärt sein.
A few weeks of developement and testing can save a WHOLE afternoon in the library!
' schrieb:In dem Screenshot fehlt natürlich noch eine Timeoutkonstante, aber das Prinzip sollte erklärt sein.
Vielen Dank, jetzt ist mir das doch einiges klarer.
Aber vielleicht doch noch eine doofe Frage fürs Verständnis: Wenn ich jetzt also Event-Handling verwende und quasi z.B. alle 20ms ein TimeOut Event auslöse (um den Inhalt des Schieberegisters auf der linken Seite in das Register rechts durchzuschleifen.), verursache ich dann wirklich weniger CPU Last als wenn ich sowieso das ganz normale Polling in einer Endlosschleife mit einem 20ms Delay benutze?
' schrieb:Vielen Dank für eure Antworten. Die Idee mit dem Schieberegister hatte ich auch schon - und zwar sollte also die Auswertung in einer Endlosschleife ablaufen, das Schiebereigster liefert einerseits die Daten zur Verarbeitung, schleift sie aber auch für die nächste Runde unverändert durch. Das Problem ist nun aber: wie kann ich es erreichen, dass das Event "Datei laden" die neuen Daten importiert und den Inhalt des Schieberegisters aktualisiert -> die Eventstructure hat ja keine Schieberegister. Und wenn die Event-Struktur sich ausserhalb der Endlosschleife befindet wird sie ja nie abgearbeitet...
Tut mir leid falls die Frage doof ist, ich fange erst gerade an mich überhaupt mit Events zu beschäfigen. Wenn ihr mir ausserdem noch einen Tipp geben könnt, wo die Verwendung von Events gut und ausführlich erklärt ist, würde ich mich auch freuen - die NI Dokumentation dazu finde ich, naja, etwas dürftig...
Vielen Dank und viele Grüße
Oli
Ok, ich habe glaube ich dein Problem verstanden. Du kannst aber einen unsauberen Trick versuchen:
mach die Eventstruktur innerhalb deiner While-Schleife, wie Kvasir vorgeschlagen hat, aber mit einem kleinen Timeout, und platziere deinen completten While-Schleifen-Inhalt in das Timeout-Event.
Ich würde es aber irgendwie anders lösen, es gibt ja viel zu viele Möglichkeiten dafür. Aber die Lösung ist halt am einfachsten und am dreckigsten.
Andere Möglichkeit wäre gar keine Event-Struktur zu benutzen, sondern alte Methode = Case-Struktur. Vergiss aber nicht deinem Button die Eigenschaft "latch" zuzuweisen.
@ Eugen:
Warum ist diese Methode dreckig? Ich mach das eigentlich immer so. Bzw. verwende ich eine StateMaschine (also Case Struktur) und pack vor die Case Struktur noch das Event. Dadurch kann ich dann im Event die Cases schalten.
Sehe da nicht, warum man das anders lösen sollte.
@Oli:
Weniger CPU Last verursacht das nicht. Aber du kannst nun halt auf Events zugreifen. Wie Eugen aber schon schrieb, eine Case Struktur tut es in deinem Fall vermutlich auch.
A few weeks of developement and testing can save a WHOLE afternoon in the library!
' schrieb:@ Eugen:
Warum ist diese Methode dreckig? Ich mach das eigentlich immer so. Bzw. verwende ich eine StateMaschine (also Case Struktur) und pack vor die Case Struktur noch das Event. Dadurch kann ich dann im Event die Cases schalten.
Sehe da nicht, warum man das anders lösen sollte.
@Oli:
Weniger CPU Last verursacht das nicht. Aber du kannst nun halt auf Events zugreifen. Wie Eugen aber schon schrieb, eine Case Struktur tut es in deinem Fall vermutlich auch.