LabVIEWForum.de - Laufende For-Schleife in Case-Struktur verhindert Annahme weiterer Eingaben

LabVIEWForum.de

Normale Version: Laufende For-Schleife in Case-Struktur verhindert Annahme weiterer Eingaben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallihallo,

ich bin neu in diesem Forum als Mitglied, wobei mir, mittels Google, schon unzählige Forenbeiträge weitergeholfen haben!
Nun habe ich ein Problem, was, vielleicht ganz einfach ist, aber ich bin nicht mehr in der Lage über die Forensuche etwas dazu zu finden.
Ich habe ein Programm erstellt, welches zwei Schrittmotoren steuert und gleichzeitig Daten aus einem Spektrometer ausliest. Nun ist es so, dass ich möchte, dass das Spektrometer angesprochen wird, wenn die Motoren losfahren.

Ich habe das anhängende Programm zwar hier jetzt extrem abgespeckt, aber die relevanten Teile drin gelassen.
Wenn ich den Button "Motoren starten" drücke, bekomme ich (normalerweise) eine Antwort bei Motorstart und die Motoren laufen los. Beim Drücken von "Motoren stoppen" halten die Motoren an und ich bekomme eine Antwort bei Motorstop.
Nun kommt das Spektrometer in der For-Schleife hinzu. (For-Schleife wegen der bestimmten Anzahl der Durchläufe). Um einen zeitgleichen Start von Motor und Spektrometer zu ermöglichen, habe ich die For-Schleife in eine Case-Struktur gepackt und den Auswahlanschluss mit dem Schalter für den Motorstart verbunden. Die Schalter stehen auf "Latch beim Drücken"
Dann taucht mein Problem auf. Es funktioniert insofern, als das meine Motoren starten und die For-Schleife in gewünschter Anzahl durchlaufen wird. Allerdings kann ich in dieser Zeit die Motoren nicht mehr stoppen.
Kann mir jemand beantworten, wie ich das unterbinden kann? Bzw. mir einen anderen Vorschlag machen, wie ich die Synchronisation des Starts und die gewünschte Anzahl an Durchläufen hinbekomme.
Gern beantworte ich natürlich jede Frage, falls mein Pamphlet hier oder mein VI selbige aufwerfen ;-)

Vielen Dank!
Du könntest eine "Conditional For-Schleife" verwenden und die mit Deinem Motorstop-Button beenden.
Ich würde die Struktur aber an sich schon etwas anders machen.
Evtl. recht Dir eine State-Machine, ansonsten könntest Du auch ein "Producer-Consumer-Model" verwenden.

Gruß Markus
Hallo dat,

neben den (guten) Vorschlägen von Markus gibt es auch die Quick&Dirty-Lösung: parallele Schleifen unter Verwendung lokaler Variablen...

Du musst nur dein Button-Handling etwa ändern, da du dann nur "Switch"-MechanicalAction für die Buttons verwenden kannst.
Stimmt,

oder du nimmst funktional globale Variablen, dann kannst du das Schaltverhalten lassen.

Gruß
Tobias
Vielen Dank ersteinmal :-)

Ich habe nun zuersteinmal die Quick & Dirty Lösung aufgerufen. Leider hat das zwar im Wesentlich funktioniert, aber wieder einige andere Probleme aufgerufen.
Wenn der "Motor starten" Schalter nicht nur latched, kommt der Startbefehl eben mehrmals bei der Motorsteuerung an, was dazu führt, dass die nicht mehr ganz das macht, was sie soll.
Schade eigentlich :-(

Wenn ich die conditional for Schleife verwende, kann ich das zwar super unterbrechen, aber meinen zeitgleichen Start der Motoren kriege ich dann nicht hin bzw. wenn ich alles so lasse und zusätzlich die conditional for Schleife verwende, habe ich das gleiche Problem wie vorher, dass ich warten muss, bis die Schleife durch ist und dann wieder erst Eingaben (wie auch den Stopp-Button) angenommen werden.

Das mit dem Producer-Consumer-Modell und die State Machine übersteigen noch mein derzeitiges LV-Wissen. Bin ja noch ein Neuling ;-) Erstmal schauen, was ich dazu noch finde.
Was meintest Du denn mit der Struktur generell anders?

Grüße

Edit schrieb:Ich probier das jetzt dann doch nochmal Quick & Dirty mit den funktional globalen Variablen :-)
Hallo dat,

deshalb habe ich geschrieben:
Zitat:Du musst nur dein Button-Handling etwa ändern, da du dann nur "Switch"-MechanicalAction für die Buttons verwenden kannst.
(24.07.2012 15:27 )GerdW schrieb: [ -> ]Hallo dat,

deshalb habe ich geschrieben:
Zitat:Du musst nur dein Button-Handling etwa ändern, da du dann nur "Switch"-MechanicalAction für die Buttons verwenden kannst.

Hab ich ja auch gemacht - um festzustellen, dass meine Motoren dann eben leider nicht mehr vernünftig laufen. Gäbe es noch eine Möglichkeit, diese Case-Struktur "Motoren starten" nur einmal auszuführen?
Hallo dat,

mit dem Satz meinte ich: Du musst den Button auch programmatisch wieder zurücksetzen!
Bei Latched-Operationen geschieht dies automatisch, bei Switched eben nicht...
(24.07.2012 16:46 )GerdW schrieb: [ -> ]Hallo dat,

mit dem Satz meinte ich: Du musst den Button auch programmatisch wieder zurücksetzen!
Bei Latched-Operationen geschieht dies automatisch, bei Switched eben nicht...
Nun wirds klarer ;-)
Leider hab ich das nicht hinbekommen :-(
Wie kann ich einen Button programmatisch wieder zurücksetzen, ohne ihn auf Latch umzustellen? In eine Sequenz verpacken und dann als Methode nen ReInit?

Daaanke
Hallo dat,

eine lokale Variable statt einer Methode tut's auch...
Seiten: 1 2
Referenz-URLs