Hallo
ich hätte da eine kleine Frage bezüglich der Iteration bei einer Matrix. Ich habe einen Volumenstrom, der in Abhängigkeit von einem Winkel und einem Vordruck ermittelt werden soll (Bild "Volumenstrom Matrix" zeigt das genauer).
Ich habe hierfür jeweils ein 1-D-Array für verschiedene Stützpunkte des Winkels und des Vordruckes. Die Werte der Stützpunkte für den Volumenstrom sind in einem 2-D-Array eingetragen.
Jetzt habe ich mit einem vorgefertigten Baustein ein Programm geschrieben, dass eigentlich einen Wert für den Volumenstrom ermitteln soll, wenn der Wert des Winkels oder des Vordrucks zwischen den in den Arrays vorgegebenen Stützstellen liegt (also eine Iteration/Näherungsfunktion ausführt).
Jedoch wird jedes mal der Wert 0 ausgegeben - woran könnte das liegen?
Habe mal meinen Programmcode als Screenshot mit angehängt.
Vielen Dank im Voraus
Hallo Sarah,
Zitat:Jedoch wird jedes mal der Wert 0 ausgegeben - woran könnte das liegen?
Das wird an deinem VI liegen. Oder an deinen Daten, die du im VI verwendest…
Zitat:Habe mal meinen Programmcode als Screenshot mit angehängt.
Toll. Ein Bild! Prima! Leider kann man in LabVIEW damit nichts anfangen…
Sollen wir deine ganzen Daten abtippen - oder stellst du uns einfach deinen Code als VI zur Verfügung?
Hallo,
die Daten sind an sich ein einfaches Array - hab die SubVIs mal in den Anhang getan. Das SubVI "Volumenstrom_Modell2" ist das Hauptprogramm.
Es wird nach der Durchführung der Fehlercode "-20145" ausgegeben. Laut LabVIEW ist eine mögliche Ursache "Analysis: Jede unabhängige Variable muss die gleiche Anzahl an Werten enthalten wie die abhängige Variable" - in der LabVIEW Hilfe für den Baustein steht, dass die Array Länge von X (Vordruck) gleich der Spaltenanzahl von Z (Volumenstrom) und die Array Länge von Y (Winkel) gleich der Zeilenanzahl von Z (Volumenstrom) sein muss. Das habe ich jedoch berücksichtigt daher kann es daran ja wohl nicht liegen.
Dankeschön
LG
Sarah
Hallo Sarah,
ich wiederhole mich ja nur ungern, aber ich muss:
Zitat:Oder an deinen Daten, die du im VI verwendest…
Lies dir doch einfach mal die Hilfe zur verwendeten Interpolationsfunktion durch. Die ausführliche Hilfe. Jeden Punkt darin. Insbesondere die Absätze zu den Daten, die du bereitstellen musst. Jeden Satz in diesen Absätzen!
Ich zitiere:
Zitat:If Y is not empty, the number of rows in Y must equal the number of rows in Z.
Ich mache das üblicherweise so:
- Ein (typdefiniertes!) Enum zum auswählen der Daten.
- Die Daten selbst liegen als String-Konstante im subVI: dann kann man die Daten GANZ EINFACH von Excel aus in die Stringkonstante kopieren.
- Dann werden die Daten, die übrigens auch die X- und Y-Achse enthalten, im subVI in die entsprechenden Arrays umgewandelt.
- Da das subVI als (quasi) FGV ausgelegt ist, muss diese Umwandlung nur einmal beim ersten Aufruf erfolgen.
- Da ich öfter mit solchen Kennfeldern arbeite, habe ich natürlich in meiner user.lib ein subVI, welches diese Umwandlung erledigt…
- Es gibt nur ein subVI mit den Daten: weniger Probleme beim Vorhalten/Abgleich der Daten und es es sichergestellt, dass das Problem wie bei dir NICHT auftreten kann…
- Für das bilineare Interpolieren habe ich mir auch ein eigenes subVI angelegt, da die von dir verwendete Funktion nicht die allerschnellste ist…
Ich habe das mit den Zeilen- /Spaltenzeilen bei Erstellen der Arrays beachtet - ich habe die Arrays über eine Excel Datei eingeladen und nicht alle Werte per Hand eingetragen.
Deshalb habe ich die tatsächlichen Größen nochmals überprüft und heraus gefunden, dass bei dem einen Array des Vordruckes die falschen Daten eingelesen wurden und somit diese Voraussetzung nicht erfüllt war - habe das jetzt korrigiert und jetzt läuft es einwandfrei :-)
LG Sarah