Queued State Machine - DAQ in Unterprogramm ständig auswerten und darauf reagiern
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!
Queued State Machine - DAQ in Unterprogramm ständig auswerten und darauf reagiern
Hallo Zusammen,
ich stehe gerade ziemlich auf dem Schlauch und bin um jeden Tipp dankbar!
Beschreibung des Systems:
Es handelt sich um einen Messtisch, dessen Achsen in X, Y und Z verfahren werden können. Die Steuerung und die LabView-Treiber sind von der Firma ISEL. Der Messtaster registriert Berührungen über Dehnmessstreifen. Zum Erfassen und Verstärken der Signale dient das NI Brückenmodul 3236.
Beschreibung der Software:
Ich habe am LabView Core 3 teilgenommen und habe meinen Code dementsprechend aufgebaut (bzw. versucht). In Abbildung 1 ist das Hauptprogramm abgebildet. Zu erkennen sind die vier Programmteile
1. Event Handling Loop (EHL)
2. Message Handling Loop (MHL)
3. ISEL Controller.vi (CTRL) (Detail in Abbildung 3)
4. Antastregistrierung.vi (ARG) (Detail in Abbildung 2)
Zu 4.
Ich habe ein LabView-Beispielprogramm genommen und ein bisschen erweitert, um den Messtaster auszuwerten (Abbildung 2). Bisher erfolgt das Antasten nach dem Schema von Abbildung 4. Der Grund, warum es die Zustände „Taster aktiv“ und „Taster inaktiv“ gibt ist, dass wenn die Maschine im
Eilgang fährt ein Antasten registriert wird, ohne die Probe zu berühren.
Problem:
Bei dem Schema erkennt man, dass die Schleife im Antastregistrierungs.vi nur läuft, wenn ich „Taster aktiv“ oder „Taster inaktiv“ schicke. Somit werden auch nur die in dieser Zeit aufgenommenen Werte in den entsprechenden Graphen dargestellt.
Ziel:
Ich will die Messwerte immer aufzeichnen.
Wenn die While-Schleife aber immer läuft wird ein „Stop durch Antasten“ auch bei starken Beschleunigungen gesendet, was falsch wäre. Deshalb will ich in der Message Handling Loop entscheide, ob auf das gesendete „Stop durch Antasten“ reagiert werden soll, weil gerade Angetastet wird oder ob ich es verwerfe, weil ich mich im Eilgang befinde.
Auf Abbildung 5 ist dargestellt, wie die Schleife ständig läuft und bei einer Schwellwertüberschreitung „Stop durch Antasten“ sendet.
Zum einen weiß ich nicht, wie ich in der Message Handling Loop jetzt entscheiden soll, ob ich auf diese Nachricht eingehe oder nicht.
Darüber hinaus kann ich die Schleife aus dem Hauptprogramm nicht mehr stoppen, weil mir der entsprechende Case fehlt.
Hat irgendjemand eine Idee, wie ich meinem Ziel näher kommen könnte?
RE: Queued State Machine - DAQ in Unterprogramm ständig auswerten und darauf reagiern
Kurzer Nachtrag
Lösung für ständiges Messen:
- Eine boolsche Anzeige (Taster AKTIV) im Event Handling Loop wird auf TRUE gesetzt, wenn der Button TASTEN gedrückt wird. (Bild 1)
- In der Message Handling Loop wird ein neuer Case eingefügt: ENTSCHEIDUNG und darin eine Lokale Variable der boolschen Anzeige erstellt (Bild 1)
- Wenn das Antastregistrierung.vi ein Antasten registriert sendet es die Nachricht ENTSCHEIDUNG (mit Priorität) an die Message Handling Loop
- ENTSCHEIDUNG sendet ein STOP DURCH ANTASTEN (mit Priorität in der Queue), wenn die boolsche Anzeige auf TRUE steht
ansonsten wird einfach der Fehler druchgeschliffen und es werden die anschließenden Befehle, welche in der Queue stehen abgearbeitet, da ENTSCHEIDUNG
mit Priorität gesendet wurde.
- Im Case STOP DURCH ANTASTEN wird die Lokale Variable der boolschen Anzeige dann wieder auf FALSE gesetzt (Bild 2)
Das Antastregistrierung.vi werde ich über einen Notifier beenden.
Ist das sauber gelöst oder gibt es andere Vorschläge?