LabVIEWForum.de
Empfangene Daten aus VISA filtern (Tiefpass) - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Instrument IO & VISA (/Forum-Instrument-IO-VISA)
+---- Thema: Empfangene Daten aus VISA filtern (Tiefpass) (/Thread-Empfangene-Daten-aus-VISA-filtern-Tiefpass)



Empfangene Daten aus VISA filtern (Tiefpass) - bboygro - 16.05.2017 10:58

Hallo zusammen!

Im Rahmen meiner Bachelorarbeit bin ich aktuell dran einen Prüfstand zur Untersuchung des Wirkungsgrades von Winkelgetrieben zu optimieren.

Dazu lese ich die Daten des An- und Abtriebs des Getriebes (Drehzahl und Drehmoment) per VISA aus. Den Tiefpass-Filter der Drehmomentmessung, welcher über Parameter der Sensoren intern realisiert werden kann, möchte ich auslagern (Software -> LV), da ich auch die Rohdaten der Sensoren benötige. Dieser sollte als Bessel-Tiefpass-Filter (6. Ordnung) realisiert werden.

Die rohen Daten werden einwandfrei ausgelesen und können auch weiter verwertet werden. Lediglich die gefilterten Daten wollen nicht so recht. Dabei gibt es enorme Probleme mit den verschiedenen Datentypen. Scheinbar müsse ein Zeitstempel auf die Werte aufgetragen werden, damit der Filter was damit anfangen kann. Nur leider komme ich seit über einer Woche einfach nicht auf die Lösung.

Bisher habe ich verschiedene Filter verwendet, unter anderem auch die Express-VI Filter. Leider erfolglos. Mit einem Filter (Ich weiß aktuell nicht mehr welcher es war) habe ich lediglich Werte raus bekommen, die um einen sehr großen Faktor kleiner waren als die Rohdaten und trotz Filter NICHT gefiltert wurden.

Auch mit "Signalverlauf erstellen" habe ich versucht die Zeit auf das Signal aufzutragen, doch das hat auch nicht funktioniert. Fragezeichen

Über eure Hilfe würde ich mich sehr freuen.

Liebe Grüße
Fabi


RE: Empfangene Daten aus VISA filtern (Tiefpass) - GerdW - 16.05.2017 11:16

Hallo Fabi,

herzlich willkommen im Forum!

Bevor wir zu deiner eigentlichen Frage kommen:
Bitte überarbeite erst einmal dein VI!
- Entferne soviele lokale Variablen wie nur möglich und ersetze sie durch Drähte! (Stichwort "Race conditions"!)
- Warum muss man eine serielle Schnittstelle in JEDER Iteration erneut öffnen, initialisieren und hinterher wieder schließen?
- Wozu leere Sequenzrahmen?
- Versuche ExpressVIs wie JoinSignal zu vermeiden! Die Kontexthilfe deiner Charts zeigt dir, welche Datentypen erwartet werden - und für Arrays gibt es jede Menge Arrayfunktionen!
- Bitte NIE das Label von Controls/Indicators im Blockdiagramm unsichtbar machen!

Was willst du hier erreichen:
[attachment=57823]
Du baust ein Array, welches genau ein Sample enthält - und wunderst dich über "fragwürdige" Filterergebnisse?
Wenn du einen Signalverlauf filtern willst, dann musst du auch einen Verlauf erstellen und dazu Samples ansammeln!
Dieser Filter erwartet ein Array mit deinen Samples - so wie es in der Hilfe zur Funktion auch gezeigt wird!
Woher weißt du die Samplefrequenz von 2000Hz? Ich bezweifle, dass du die Daten derart schnell (und taktgenau) einliest…

Zitat:Scheinbar müsse ein Zeitstempel auf die Werte aufgetragen werden, damit der Filter was damit anfangen kann. Nur leider komme ich seit über einer Woche einfach nicht auf die Lösung.
LabVIEW kommt mit sehr vielen BeispielVIs. Du hast es innerhalb einer Woche nicht geschafft, mal ein Beispiel zu den Filterfunktionen anzuschauen?
Und was willst du damit erreichen, wenn du einen Cluster aus Timestamp und Sample erstellst und diesen Cluster dann in eine Array mit zwei Werten umwandelst? Warum nicht gleich BuildArray? (Nicht, dass das richtiger wäre…)


RE: Empfangene Daten aus VISA filtern (Tiefpass) - bboygro - 16.05.2017 14:17

Hallo Gerd,

danke für die schnelle Antwort!

-> Die lokalen Variablen und die leeren Sequenzrahmen (wurden ursprünglich von einem anderen Programm übernommen) wurden entfernt.

-> Du meinst ich soll die serielle Schnittstelle als SubVI erstellen und die Daten quasi dauerhaft an mein HauptVI senden bzw. die Daten dort auslesen?

-> Was meinst du mit "JoinSignal"? Die Funktion "Signale zusammenfassen"? Ich dachte immer, dass dies nur eine normale Funktion sei und kein ExpressVI. Ist es besser die Signale mit "Array erstellen" zusammenzufassen?

Das mit den Samples ist mir schon klar (zumindest meine ich das Big Grin), aber wie "sammle" ich die Samples denn an? Mit der Funktion "Signalverlauf erstellen" komme ich auch nicht zum Ergebnis...
Die Samplefrequenz habe ich mittels der Parameter im Sensor deklariert. Dieser sendet nun 2kS/s. Oder ist mit der "Samplefrequenz" am Filter die Abtastrate gemeint, welche größer der Samplefrequenz meines Sensors sein sollte?

Die Beispiele habe ich mir angeschaut, nur schlau geworden bin ich auch daraus nicht. Mein Hauptproblem liegt meiner Meinung nach darin die einzelnen Samples in einen Signalverlauf umzuwandeln.

Was ich nicht ganz verstehe, wieso kann ich die einzelnen Samples die von der seriellen Schnittstelle ausgegeben werden so einfach in einem Graph über die Zeit darstellen aber diese nicht Filtern? Im Graph verbindet Labview die einzelnen Werte doch auch automatisch mit der zeitlichen Komponente. Wieso nicht auch im Filter? (Hört sich jetzt ein bisschen nach dem "faulen Studenten" an Big Grin)

Danke für deine Mühe!
LG Fabi


RE: Empfangene Daten aus VISA filtern (Tiefpass) - GerdW - 16.05.2017 18:55

Hallo Fabi,

Zitat:Du meinst ich soll die serielle Schnittstelle als SubVI erstellen und die Daten quasi dauerhaft an mein HauptVI senden bzw. die Daten dort auslesen?
Nein.
Du sollst die Schnittstelle(n) einmal vor der Schleife initialisieren und einmal nach der Schleife - wie man das üblicherweise macht…

Zitat:Was meinst du mit "JoinSignal"? Die Funktion "Signale zusammenfassen"? Ich dachte immer, dass dies nur eine normale Funktion sei und kein ExpressVI.
Da kommt ein DDT-Draht raus. Typisch ExpressVI…

Zitat:Ist es besser die Signale mit "Array erstellen" zusammenzufassen?
Vor allem viel übersichtlicher.
Bei einem DDT-Draht sieht man auch nicht, welche Daten da überhaupt drin sind…


RE: Empfangene Daten aus VISA filtern (Tiefpass) - bboygro - 17.05.2017 10:40

Hallo Gerd,

Die Schnittstelle initialisiere ich nun vor der Schleife.

Die Signale fasse ich jetzt auch mit "Array erstellen" zusammen. Doch leider fasst er diese wortwörtlich zusammen und gibt zwei Signale als eines aus. Wie kann ich das wieder umgehen, dass ich wieder zwei oder drei Signale in einem Diagramm anzeigen lassen kann?

Mit dem Filter bin ich leider noch nicht zur Lösung gekommen. Ich habe mal verschiedene Ansätze probiert, das einzige was ich aus dem Filter raus bekomme, ist der selbe Wert den ich vorne rein gebe um einen Faktor X verkleinert. Nicht einmal gefiltert wurde dieser...

Vielleicht könntest du nochmal über mein VI drüber gehen und mir ein paar Tipps geben Angel_not

LG Fabi


RE: Empfangene Daten aus VISA filtern (Tiefpass) - Freddy - 17.05.2017 11:14

Hallo Fabi,
die Seriellen Schnittstellen sollten erst nach Beendigung der While Schleife geschlossen werden.
So wie Du es gemacht hast, wird genau einmal auf den Schnittstellen (COM7 und COM8) geschrieben und gelesen.

Gruß
Freddy
Warum werden Rechenoperationen Durchgeführt, die keine weitere Anwendungen haben.
Sie Pfeile auf dem Bild
Gruß
Freddy


RE: Empfangene Daten aus VISA filtern (Tiefpass) - bboygro - 17.05.2017 12:13

Hallo Freddy,

die serielle Schnittstelle läuft soweit, ich erhalte kontinuierlich Werte. Deshalb habe ich daran auch nichts mehr geändert.
Das komplette System läuft eigentlich auch wie es soll, es hängt nur noch am Filter...

Die Rechenoperationen sind im VI drin, da ich diese eventuell später noch benötige. Über diese kann die Winkelposition und noch ein anderer Wert (weiß gerade nicht mehr was es noch war) ermittelt werden.

Im Allgemeinen läuft das Programm und tut - wie schon gesagt - auch was es soll. Lediglich die Rohdaten sollen noch gefiltert werden, was eben auch das Problem darstellt.

LG Fabi


RE: Empfangene Daten aus VISA filtern (Tiefpass) - Freddy - 17.05.2017 14:37

Zitat: Lediglich die Rohdaten sollen noch gefiltert werden, was eben auch das Problem darstellt.
Du hast auch keine Datenblöcke. In Deinem Programm sind es immer Arrays mit einem Wert.
Dieser Wert wird immer neu geschrieben aber nicht in ein gemeinsames Array.
Wenn Du die Daten sammeln willst, benötigst Du ein Schieberegister oder Rückkopplungsknoten.
Am besten Du gibst die Daten aus der While Schleife über einen Tunnel (Indizieren) als Array auf den Filter, der dann außerhalb der Schleife liegt.

Verfolge Dein Programm mal mit der Highlight-Funktion oder eine Sonde, dann siehst Du welche Daten in Dein Filter geschoben werden.

Schau mal in die Hilfe (rechte Maustaste auf dem VI und Hilfe auswählen) dort gibt es Beispiele die beschreiben die Funktion der Filter.

Gruß
Freddy


RE: Empfangene Daten aus VISA filtern (Tiefpass) - jg - 17.05.2017 16:07

Alternative: Pt-By-Pt Filter VIs:
[attachment=57837]
Gruß, Jens