LabVIEWForum.de - Digitalsignal filtern

LabVIEWForum.de

Normale Version: Digitalsignal filtern
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

hab hier ein kleines technisches Problem. Wir betreiben hier eine Messanwendung bei der ein Druck aufgezeichnet wird, das ganze wird über 2 Digitalsignale gestartet und wieder beendet. Nun ist es leider so dass aufgrund einer etwas ungünstigen elektrischen Installation es hin und wieder zu induktiven Einstreuungen aus einer 230V-Heizung kommt und diese dann als Signal gewertet werden. Wenn die Messung unbemerkt startet, nicht weiter schlimm, Datenmüll löschen und weitermachen. Wohingegen Messung einfach so abgewürgt ohne dass man es wollte eher schon blöd ist.

Ich hab hier schon verschiedene Sachen durchsucht, letztendlich bin ich darauf gestossen, dass sich hier über einen Digitalfilter bestimmen lässt, dass das Signal eine bestimmte Zeit ( z. B. 500 ms) anstehen muss, um wirklich als Signal gewertet zu werden, aber ich find das bei mir nicht. Wenn ich einen "DAQmx - Kanal Eigenschaftsknoten" öffne, dann kann ich für Digitale Erfassung genau "Leitung invertieren", "Anzahl Leitungen" und "Tristate" auswählen. Den Filter "Impulsbreite" kann ich nur bei Zählergestützte Erfassung finden und das bekomm ich irgendwie nicht zum laufen.

Liegt das evtl. an der LV-Version/Hardware? Ich hab hier das LV 2010 SP1 Base und ein USB-6210. Geht dass damit überhaupt oder muss ich mir hier etwas anderes überlegen und wenn ja, hat jemand eine Idee wie das sonst gehen könnte? Wäre toll wenn mir da jemand helfen könnte. Ich hatte auch schon daran gedacht, den gleichen Kanal mit einer Verzögerung von 500 ms zweimal auszulesen und dann den Status zu vergleichen, irgendwie fehlt mir aber hier komplett die Idee wie ich das lösen soll.

Ich bedank mich schon mal im voraus für bissle Hilfe.

Gruss
Michael

Lv10
Kann es sein, dass die VIs bei der Base-Version nicht dabei sind? Unsure

Offtopic2 : Bitte Profil_ergaenzen. Da steht noch LabVIEW 2009, Du hast aber anscheinend schon die 2010er-Version.

Gruß Markus
Hallo mfader,

Zitat:den gleichen Kanal mit einer Verzögerung von 500 ms zweimal auszulesen und dann den Status zu vergleichen
Du solltest den Kanal nicht nur zweimal, sondern dauernd einlesen - und zwar in einer Schleife. Dann einfach die Schleife mit 500ms takten und den aktuellen Messwert mit dem vorherigen (Schieberegister!) vergleichen...
Das hatten wir kürzlich einmal, dafür brauchst du eine aktuelle DAQmx-Version, da kann man Eigenschaften von DI-Kanälen und Impulsen einstellen.

Gruß, Jens

EDIT: Hier der Link zum Thread
Finde jetzt das VI nicht, was ich dafür mal gemacht hatte.
Das Signal wird dauernd eingelesen. Ein "gültiges" hi oder lo liegt dann vor, wenn n mal (z.B n=5) hi oder lo hintereinander ankommt.
Man kann das mit einem Mehrfach-Schieberegister realisieren, eleganter (weil skalierbar) geht es aber mit einem Zähler.
Der Zähler wird bei jedem Pegelwechsel auf n initialisiert. Findet kein Pegelwechsel statt, wird er um 1 dekrementiert.
Wenn er Null erreicht, ist der Flankenwechsel, also von hi auf lo oder umgekehrt, gültig.
Reicht das oder muss ich weiter nach dem VI suchen?
@Gerd: das meinte ich, bissle ungünstig formuliert, klar kontinuierlich lesen und wenn dann innerhalb von 500 ms 2 high-Signale kommen, dann erst als "gültiges" Signal auswerten.

@Jens: ich hab gerade die Aktualisierung auf DAQmx 9.7.5 laufen lassen, ich kann das aber immer noch nicht einstellen, wie in dem von dir angeführten Thread. Drum hab ich bissle die Befürchtung das Markus Recht hat und die VIs in der Base-Version gar nicht drin sind.

@Lucki: du musst natürlich nicht suchen, aber es wär lieb wenn du mal kuckst ob du das findest.

Danke an alle schon mal :-)
Hallo zusammen,

für alle, die ein ähnliches Problem wie das oben geschilderte haben und leider nur die Basisversion von LabView gibt es auch eine Lösung:

Man wandelt die Boolschen Werte in 0/1 und schreibt diese in ein Array. In dieses schreibt man bei jedem Schleifendurchlauf jeweils an den Anfang den neuen Wert und schmeisst hinten den letzten raus. Wenn man nun die Summe des Arrays bildet diese mit der Anzahl der Elemente vergleicht, dann muss der gleiche Wert herauskommen, wenn durchgängig ein "high-Signal" anstand. Dies wird dann als gültiges "high-Signal" interpretiert und weiter gegeben.

[attachment=46796]

Über die Wartezeit der Schleife und die Anzahl der Array-Elemente ergibt sich dann die Zeit, die ein Signal angestanden haben muss, um als "gültiges high" interpretiert zu werden.

Gruss
Michael
Danke für die Info.

Gruß Markus

PS: Deine Whileschleife im Screenshot läuft ewig. Blink
Da würde ich denn doch sagen, dass die Variante mit einem Zähler einfacher und schneller ist.
[attachment=46797]
@Markus: ich weiss, aber das war auch nur zum Ausprobieren, im eigentlichen VI ist das dann auch anderst verdrahtet

@Lucki: Stimmt, die Lösung gefällt mir noch besser, als das was wir hier gebastelt haben. Vielen Dank :-)
Referenz-URLs