RE: Druckmessung über Multiplexer (NI9237 + NI9472)
Hallo Jürgen,
einige Dinge, die mir in deinem VI auffallen:
- eine gestapelte Sequenz mittendrin: damit erreicht man nur selten wirklich "schöne" Programme
- du verwendest die Sequenz, um DATAFLOW zu erreichen: warum nicht den ErrorCluster, wie er überall empfohlen wird?
- du fragst beim AI-Task "-1" Samples ab: das ist NIE hilfreich, wenn man irgendwie synchrone Messungen erreichen will…
- du erzeugst eine "Abtastrate" über eine Wartezeit. Abgesehen davon, dass diese Wartezeit nur Integerwerte unterstützt, ist sie auch extrem ungenau, da Windows für einen erheblichen Jitter sorgt. Warum nicht eine Abtastrate über DAQmx einstellen?
- nachdem du die "Abtastrate" per Wartezeit eingestellt hast, wartest du im nächsten Frame erneut 5ms (mitsamt Jitter). Ist das hilfreich?
- Du hast im AI-Task eine Samplerate von 10kHz eingestellt und fummelst am Parameter "Sample pro Kanal" rum. Hast du dir die Hilfe zur Funktion durchgelesen? Dann leerst du den Buffer in der Schleife mittels der Abfrage von "-1" Samples, um dann nur zwei Samples abzufragen. Dann braucht die Schleife wieder "ewig" (x ms und weitere 5ms), bevor wieder Samples gelesen werden. Da kann es schon zu einem BufferOverflow-Fehler kommen!
- Du hast RaceConditions in deinem VI, da du lieber lokale Variablen/ProeprtyNodes statt einfacher Drähte verwendest ("Schaltzyklen", "Kanäle")…
Was ich machen würde:
- Den AI-Task mit hoher Abtastrate (ca. 10fach höher als die Samplerate im DO-Task) in einer parallelen Schleife laufen lassen, die Messdaten in einem Buffer speichern
- den DO-Task parallel dazu schalten lassen und den aktuellen Schaltzustand ebenfalls im Buffer vermerken
- in einer dritten Schleife jeweils die zusammengehörigen Daten aus dem Buffer lesen und auswerten
Anderes Konzept:
Prüfen, ob deine Hardware mit (DAQmx-)Triggern arbeiten kann. Falls ja: über einen Trigger jeweils einen neuen Wert im DO ausgeben und die Messwertaufnahme mit endlicher Anzahl im AI starten. Messwerte lesen, auswerten, neuen Trigger setzen…
Tipps:
- Eine AND-Funktion mit je einem NOT an jedem Eingang und Ausgang ist hochgradig RubeGoldberg, dafür gibt es einmal die CompoundArithmetik und grundlegende boolsche Algebra sollte dir sagen, dass das eine OR-Funktion ergibt ( -(-x AND -y) == x OR y )…
|