(18.11.2015 14:51 )m.werle schrieb: Mit Sample-VI ist das VI gemeint, das die Daten durch DAQmx ausliest nehme ich an.
Ja.
Zitat: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.)
Es wird auch dann überschrieben, wenn es ausgelesen wurde. Ein Melder ist wie eine globale Variable: Es ist kein "Herauslesen", sondern ein "Lesen".
Zitat:An sicht, macht mein Notifier aber doch das selbe wie eine Queue, oder?
Ich stelle mir den Melder immer als Queue mit nur einem möglichen Eintrag vor. Daten aus einer Queue werden "herausgelesen", Daten im Melder nur "gelesen".
Zitat: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?
Ja.
Zitat:Von welcher Zyklusdauer redest du hier?
Viele meiner Programm sind "Dauerlaufprogramme". Da wird ein Prüfling ständig mit der selben Betätigung beaufschlagt. Eine Betätigung (was immer das auch ist) dauert z.B. 30 Sekunden. Von diesen Betätigungen werden dann z.B. 2 Mio gemacht. Die Zyklusdauer ist dann 30 Sekunden. Zu Beginn eines Zyklusses werden diverse Daten im Sample-VI resettet (z.B. Länge Array). Am Ende des Zyklusses wird das Array aus dem Melder gelesen ...
Zitat: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.
Eigentlich gefällt mir das nicht. Uneigentlich kannst du das aber auch so machen.
Ich selbst bevorzuge eine konstante, also Abtastraten-unabhängige Schleifendauer, z.B. 50ms. Innerhalb dieser Zeit werden sich einige Samples ansammeln. Wie viele es sind, ist dem Algorithmus eigentlich egal - dafür ist er ja ein Anzahl-unabhängiger Algorithmus geworden.
Zitat:Ich gehe jetzt einfach mal davon aus, dass ich das richtig verstanden habe.
Davon geht ich aus.
Zitat:Ich entwerfe ein FGV ...
Ja - das kannst du so mal probieren.
Zitat:Ist es sinnvoll die Funktionen des FGVs "Cluster ausgeben" und "Queue Ref ausgeben" zu einer Output-Funktion zu bündeln?
Für Ausgaben brauchst du keine explizite Funktion. Alles das, was die FGV ausgibt, kann sie in "Klar-Daten" (also nicht als Variant) ausgeben. Ausgaben stehen immer, also bei jeder Funktion, am Ausgang an. Entweder pro Datum ein Ausgang oder alle Daten gesammelt in einem Cluster und ein Ausgang. Würdest du nur ein Ausgang haben für alle Datentypen, müsstest du extern den Variant-Ausgang typisieren. Das ist aufwändig.
Zitat:Aufbau des Sample-VIs
Alles Ja.
Zitat: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.
Wie, was, wo: Eventstruktur? Im Sample-VI befindet sich keine Eventstruktur!
Ansonsten klingt das an sich ja richtig - naja, ist es ja auch. Aber:
Woher weis die Eventstructur, dass ein ValueChange eingetreten ist? Den ValueChange würde ich im Sample-VI feststellen und dann, z.B. mit einer Melder oder einer Queue oder im Sample-VI selbst speziell zu dem Zeitpunkt, an dem der Notfall eingetreten ist, reagieren.
Zitat:Ist es überhaupt möglich die Cluster myAVG, etc. dynamisch bei Aufruf des Sample-VIs zu erstellen,
Das Erstellen eines Cluster, also eines Types, zur Laufzeit ist normalerweise überhaupt nicht notwendig. Was man braucht, weis man zur Programmierzeit. Was aber notwendig ist, ist das initialisieren der Instanzen des Typs.
Zitat: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.
Sehe ich jetzt kein Problem ...
Zitat: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?
Ja.