LabVIEWForum.de - Hilfe bzgl. kontinuierlicher Datenerfassung gefragt

LabVIEWForum.de

Normale Version: Hilfe bzgl. kontinuierlicher Datenerfassung gefragt
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo wertes Forum,

mein Anliegen ist das beigefügte (sehr große VI) dahingehend zu modifizieren, dass die Datenerfassung (bzw. das Bilden von Mittelwerten) mit konstanter (oder zumindest nahezu konstanter) Rate erfolgt.

Konkret geht es um die Aufgabe acht analoge Kanäle mit einer zeitlichen Auflösung von 50Hz abzubilden. Dabei wird jeder Datenpunkt aus 200 Samples gemittelt. Die AI-Rate ist mit 10kHz/Kanal festgelegt bzw. darauf begrenzt um Crosstalk und Ghosting zu vermeiden.

Der Zeitbedarf für die (m.E.) relevanten Prozesse habe ich in dem (temporären) blauen Diagramm auf der rechten Seite dargestellt. Wie es scheint, varriert der Zeitbedarf für einen Schleifendurchlauf der Main-while-loop sehr stark. Dies führt (u.A.) dazu, dass die Datenaufzeichnung nicht kontinuierlich erfolgt, sondern quasi in Paketform (siehe Screenshot). Besonders wird dies deutlich, wenn man auf die Registerkarte "Live" wechselt. (Zumindest verhält es sich bei mir, mit simulieter USB-6216 Karte, so).

Dieses Verhalten möchte ich gerne eliminieren. Mein Wunsch ist, bei der Vorgabe von 50Hz, 8x50 (gemittelte) Datenpunkte/Sekunde mit einem gleichbleibenden Abstand von 20ms zu erhalten. (Sollte eine gewisse Variabilität zwingend notwendig sein würde ich gerne die Anzahl der Samples die für einen Datenpunkt gemittelt werden vorübergehend reduzieren. So, dass einige Datenpunkte z.B. dann nur aus 180 (anstatt 200) Samples berechnet werden.

Leider fehlt es mir an einer praktikablen Idee.Construction

Wie immer, für jeden konstruktiven Beitrag dankbar!

Grüße,
Philipp

File im Anhang ist geschrieben mit LV2019.

** Für diejenigen, die die Software kennen und sich schon mehrfach darüber ausgelassen haben, wie unübersichtlich doch alles ist und dass man doch alles neu machen müsse: Ich habe nach bestem Wissen aufgeräumt. Groß ist die Main jedoch immer noch. Wer sich so daran stört, möge meinen Post bitte ignorieren. danke **
Hallo Philipp,

Zitat:Wie immer, für jeden konstruktiven Beitrag dankbar!
VI aufräumen.
Lokale Variablen vermeiden. (Du scheinst es darauf anzulegen, wirklich alles mit lokalen Variablen statt ein paar Drähten zu erledigen - schon mal was von THINK DATAFLOW gehört?)
Bessere Datenverwaltung implementieren.
Rube-Goldbergs vermeiden.
Vernünftige Programmstruktur implementieren.

Zitat:Leider fehlt es mir an einer praktikablen Idee.
Wie wäre es mit einer Producer-Consumer-Struktur?
Dein DAQ-Producer wäre dann ausschließlich damit beschäftigt, deine 8 AI-Kanäle mit 10kHz Samplerate und 200 Samples pro Abfrage einzulesen…

Zitat:Für diejenigen, die die Software kennen und sich schon mehrfach darüber ausgelassen haben, wie unübersichtlich doch alles ist und dass man doch alles neu machen müsse: Ich habe nach bestem Wissen aufgeräumt.
Da ich wohl zu dieser Gruppe gehöre, muss ich leider diesen Kommentar abgeben: Wenn das dein "bestes Wissen" ist, dann solltest du die Links in meiner Signatur durchgehen…

Beispiel aus deiner Main-Loop:
[attachment=61207]
Ein Rube-Goldberg in der Case-Struktur. (Man könnte auch einfach den Vergleich zu ">0" ändern…)
Ein Rube-Goldberg nach der Case-Struktur. (Man kann IndexArray vergrößern, um mehrere Outputs zu bekommen. Und die Index-Konstanten benötigt man auch nicht, wenn man von 0 beginnend Elemente haben will.)
Und die "DO1"-Werte werden natürlich per lokaler Variable an eine andere Schleife weitergereicht - Race-Conditions lassen grüßen!
Diese Dinge ziehen sich durch den kompletten Code, da hast du noch wirklich viel zu tun…

Nachtrag:
Es ist jetzt schon fast ein Jahr her, seit ich dir diese Ratschläge gegeben habe. Irgendwie kann ich da leider kaum Fortschritte erkennen…

Noch ein Beispiel:
[attachment=61208]
Eines deiner subVIs, nur
- ohne Sequenzrahmen
- ohne lokale Variablen
- ohne While-Loop, dank FeedbackNode
- weniger Funktionen, da man nicht zweimal auf die gleiche Bedingung prüfen muss und deshalb nur eine (äußere) Case-Struktur benötigt
- nach Cleanup mit möglichst geraden Drähten…
Wie oben geschrieben: diese Probleme finden sich in allen deinen VIs…
(03.09.2020 14:38 )Philipp841 schrieb: [ -> ]** Für diejenigen, die die Software kennen und sich schon mehrfach darüber ausgelassen haben, wie unübersichtlich doch alles ist und dass man doch alles neu machen müsse: Ich habe nach bestem Wissen aufgeräumt. Groß ist die Main jedoch immer noch. Wer sich so daran stört, möge meinen Post bitte ignorieren. danke **

Nachdem ich zu dieser Gruppe gehöre, und Gerd schon so viel moniert (was ich auch schon mal moniert habe), sollte ich mir deinen Upload also lieber nicht anschauen...

Gerds Vorschlag mit dem DAQ-Service kann ich aus vollem Herzen zustimmen!

Gruß, Jens
Referenz-URLs