Servus,
ich bin neu im Forum und bei LabView im Allgemeinen. Für meine Masterarbeit muss ich ein LabView-programm schreiben, das Signale von einem Versuchsstand einer Wasserkraftanlage erfasst und auf einen Waveformchart in Echtzeit anzeigt.
Mit einem Teil der Signale funktioniert das auch wunderbar, allerdings habe ich bei manchen Messgrößen ein Problem:
1. Am Versuchsstand sind einige Messinstrumente angebracht, deren Wert ich direkt auslese und ins Waveformchart übertrage. Zum Beispiel gibt es Pegelsonden im Oberwasser und im Unterwasser, die dort die Wassertiefen Ho und Hu messen und im Waveformchart angezeigt werden. So weit alles kein Problem!
2. Das Problem beginnt, wenn ich anfangen will eine Größe aus den Messwerten zu berechnen. Beispielsweise soll mir das Programm bei jedem Schleifendurchlauf die Fallhöhe berechnen (Fallhöhe =Ho-Hu) und zusätzlich einen Graph für die Fallhöhe im Chart erstellen.
Ich hab schon das Forum durchsucht, mich durch Tutorials und Beispiele gearbeitet aber ich find nicht das was ich suche...
Wäre nett, wenn mir einer von euch helfen könnte!
Hallo Kugel,
Zitat:2. Das Problem beginnt, wenn ich anfangen will eine Größe aus den Messwerten zu berechnen. Beispielsweise soll mir das Programm bei jedem Schleifendurchlauf die Fallhöhe berechnen (Fallhöhe =Ho-Hu) und zusätzlich einen Graph für die Fallhöhe im Chart erstellen.
- Du liest deine Werte als Signalform ein. Warum, wenn du jeweils nur ein einzelnes Sample pro Kanal abfragst?
- Entweder gleich ein Array (für deine "N Kanäle") mit Messwerten abfragen oder die Waveforms mit den Waveform-Funktionen auslesen. Dann hast du deine Einzelwerte zum Rechnen…
- man stellt nicht "zusätzlich einen Graph im Chart" dar, sondern einen
Plot! Ein Graph ist etwas anderes! (Bitte auf präzise Wortwahl achten!)
Du hast da einen Task "Wirkungsgrad" definiert, dessen Inhalt wir nicht sehen können. Im Error-Case definierst du einen anderen Task mit nur einem Messkanal. Warum fragst du dann aber DAQmxRead mit "N Kanälen" ab? Oder anders herum: warum definierst du nicht deinen Ersatz-Task mit mindestens zwei Kanälen?
Anmerkung zum Begriff "Signal": Selbstverständlich hast Du es bei Dir mit Signalen zu tun. Das Problem ist nur, dass in Labview die Begriff "Signal" für ein bestimmtes Signalformat reserviert ist. Die von Dir verwendete Signalform heißt in Labview "Waveform". Das solltest Du beachten, denn wenn nicht, dann weckst Du hier schlafende Hunde und die Diskusion wird von dem was Du eigentlich wissen willst abgelenkt.
Deine Waveforms haben als "Messreihe" Datenarrays mit jeweils nur einen Punkt. Das macht durchaus Sinn, aber nur dann, wenn die Daten einzeln anfallen und kein kontantes dt haben. Ist da bei Dir der Fall?
Nun zu Deiner Frage: Einfache Operationen, wie z.B eine Subtraktion, kannst Du direkt mit der Waveform vornehmen. Die entsprechenden Operatoren (hier die Subtraktionsfunktion) sind polymoph. Wenn das nicht mehr funktioniert (Nicht alle Funktionen sind polymorph), dann die Waveform aufschlüsseln und nach der Operation (bei Bedarf) wieder zusammensetzen.
[
attachment=50846]
Ok, das is gut zu wissen!
Meine Messdaten fallen einzeln an. Das heißt, ich rufe einmal pro Sekunde die Werte meiner Messinstrumente ab und möchte dass diese dann entsprechend verarbeitet werden. Das dt ist also schon konstant.
Ich versuch gerade mal, das nachzubasteln, was du gerade angehängt hast...
Ich hab neben der Fallhöhe (einfache Subtraktion) auch noch eine andere Funktion (Durchfluss aus Wasserspiegel und Wehrkrone; da is die Formel ein wenig komplizierter und länger)
Ich hab die Sache mal ein bißchen weiter verfolgt, scheitere aber daran, dass ich nicht weiß wie man aus den Messwerten einen bestimmten auswählt.
Zur Erläuterung: An meinem Eingang sind 6 Messgeräte angeschlossen, jedes an einem eigenen Kanal. Die Messgeräte sind in dem Task "Wirkungsgrad" erfasst. Aus meinen 6 Messwerten sollen jetzt zwei bestimmte ausgewählt werden, um daraus beispielsweise die Fallhöhe zu errechnen. Mir ist wichtig, dass der Plot "Fallhöhe" im gleichen Diagramm erscheint, und als eigene Spalte im .TDMS-file geschrieben wird.
Ich habe nur bislang keine Ahnung, wie ich dem Programm mitteilen kann dass ich zwei bestimmte Größen aus meinem Waveform Signal abzweigen und daraus eine dritte Größe erstellen möchte...
Ich hoffe das ist einigermaßen verständlich ausgedrückt...
Hallo Kugel,
du liest vom DAQmx ein Array of Waveforms ein (Modus "N Kanäle"). Nun darfst du raten, welche der Waveforms im Array zu welchem Kanal gehört!
Tipp: die Reihenfolge der Waveforms ist die selbe wie die Reihenfolge deiner Kanäle im Task!
Und wie kommt man an die Elemente eines Arrays? Ja, richtig: mit der IndexArray-Funktion!