Einzeln durch DAQmx ausgelesene Datenpakete zu einem Array (Datenstream) zusammenfassen:
Zitat:Entweder wird diese Arbeit vom Sample-VI gemacht. Dann wird das komplette Array per Melder (nicht per Queue) verschickt.
Mit Sample-VI ist das VI gemeint, das die Daten durch DAQmx ausliest nehme ich an. Also nutze ich Notifier nur, wenn ich einzelne Datenpakete statt einer langen Schlange aus Datenpaketen übermitteln möchte. (Queue hat ja beliebig viele Elemente, beim Notifier wird das eine überschrieben, wenn es vorher noch nicht ausgelesen wurde.) An sicht, macht mein Notifier aber doch das selbe wie eine Queue, oder?
Zitat:Oder diese Arbeit wird vom Anzeige-VI erledigt. Dann werden die einzelnen, gelesenen DAQ-Daten per Queue (nicht per Melder) verschickt. Dieses Verfahren muss man anwenden, wenn die Zyklusdauer groß oder gar "unendlich" ist.
Hier habe ich die Möglichkeit viele Datenpakete vom Sample-VI hintereinander in die Queue einzureihen und in dem Anzeige-VI entsprechend darauf zurück zu greifen. Richtig? Von welcher Zyklusdauer redest du hier?
Ich habe einmal eine Updaterate meiner DAQmx, wie viele Datenpakete mit jeweils so und so vielen Samples ich erhalte. Danach richtet sich die Zyklusdauer der Whileschleife im Sample-VI.
Und ich habe eine wesentlich kleinere Updaterate meiner Anzeige. (Vermutlich ungefähr 4Hz, wie du vorgeschlagen hast.)
Ich gehe jetzt einfach mal davon aus, dass ich das richtig verstanden habe. Ich kann eine Queue benutzen, mein Sample-VI speichert immer wieder Werte in die Queue und mein AnzeigeVI ruft ab und zu diese angehäuften Datenpakete auf einmal ab und erneuert die Anzeige.
_____________________________
FGV
- Ich entwerfe ein FGV welches die Queue mit mehreren Datenpaketen für die Anzeige bereit hält. Diese Datenpakete wurden im Sample-VI um den Analogen Output (mein Steuersignal für den Generator) erweitert.
- Cluster mit folgenden Parametern und Stats: Updaterate des Anzeige-VIs sowie des Sample-VIs, Samplerate (Samples/Update für DAQmx), neuster berechneter AVG/RMS/Peak-Wert, Zeitfenster dt für AVG/RMS/Peak, aktueller Wert des AO-Signals)
Aufgaben des FGVs
[list]
[*] Queue Initialisieren
[*] Queue Referenz ausgeben
[*] Cluster einlesen
[*] Cluster ausgeben
Ist es sinnvoll die Funktionen des FGVs "Cluster ausgeben" und "Queue Ref ausgeben" zu einer Output-Funktion zu bündeln?
Aufbau des Sample-VIs
Außerhalb der Whileschleife
1.) Meine Queue in meinem FGV initialisieren,
2.) Parameter aus dem Cluster aus dem FGV auslesen und den DAQmx-Task starten.
3.) Mit den ausgelesenen Parametern auch die Cluster myAVG, myRMS und myPeak initialisieren
Innerhalb der Whileschleife
mit meiner Updaterate_DAQ Datenpakete über das DAQmx von meinem Gerät auslesen. Aus diesem Datenstream lese ich die notwendigen Werte für die RMS/AVG/Peak-Werte aus, außerdem den aktuellen AO-Signal-Wert. Die berechneten RMS/AVG/Peak-Werte werden vom FGV wieder eingelesen und der ausgelesene AO-Signal-Wert wird an den Datenstream aus meinem DAQmx angehängt und anschließend in die Queue gespeichert.
Die berechneten AVG/Peak/RMS-Werte werden in einer Eventstructure bei einem Valuechange mit ihrem Grenzwert verglichen, um zu testen, ob ein Alarm ausgelsöt werden muss und die Maschine gestoppt.
Ist es überhaupt möglich die Cluster myAVG, etc. dynamisch bei Aufruf des Sample-VIs zu erstellen, entsprechend der eingestellten Sampleanzahl/Updaterate/Größe des Zeitfensters. Ein ein dimensionales Array mit N Elementen zu initialisieren geht ja. Aber wenn ich verschiedene Daten zu einem Cluster zusammenfüge (Bundle), dann brauche ich doch ein Prototyp Cluster, dass bereits die richtige Form hat... mh.
Anmerkungen zu meinem Analogen Outputsignal
Das AO-Signal wird in einem Regelkreis (RK) berechnet. Es gibt verschiedene VIs mit unterschiedlichen RK, je nach Betriebszustand des Generators. Der RK entnimmt aus dem FGV die neusten Messwerte und berechnet das neue Analoge Ausgangssignal, speichert dieses im FGV ab und sendet es per DAQmx an meine Maschine.
Speicherung der Messwerte
Dies kann ich einfach im Anzeige-VI erledigen, da die Zykluszeit hier entsprechend hoch ist, und ich hier sowieso sämtliche Messdaten aus der Queue auslese, um diese anzuzeigen. Richtig?