Verfasst am: 31.07.2017, 20:26
Titel: while Schleife im Matlab Function Block wird nicht ausgefüh
Hallo zusammen,
ich habe gerade ein Problem mit einer while-Schleife in einem Matlab Function Block. Ich hoffe ihr könnt mir dabei behilflich sein, da ich schon den ganzen Tag nach dem Fehler suche. Ich bin noch nicht sonderlich fit in Matlab und Simulink, daher entschuldige ich mich jetzt schon dafür.
Mein Problem (siehe auch Code):
Ich möchte in einem Matlab Function Block den Austrittsdruck p_He_aus iterativ berechnen. Dazu habe ich eine while Schleife verwendet, die als Bedingung die relative Abweichung (rel_Abweichung) des Austrittsdrucks von p_He_aus beinhaltet. Wenn ich die Simulation starte, dann kommt die Fehlermeldung "Variable 'y_O2' is not fully defined on some execution paths". Die while Schleife wird also nicht durchlaufen und somit wird y_O2 nicht berechnet. Da ich aber vor der while Schleife rel_Abweichung = 1 setze und die while-Bedingung rel_Abweichung > 0.1 lautet, müsste eigentlich die while-Schleife ausgeführt werden . Ich habe zum Spaß mal die while Schleife einmal durch eine if-Bedingung und einmal durch eine for-Schleife ersetzt. Komischerweise ist dann das Programm ohne Probleme gelaufen .
Meine Frage an euch: Warum wird die while Schleife nicht ausgeführt?
Der gesamte Code im Matlab Function Block lautet (eigentlich ist nur die while Schleife relevant ):
rel_Abweichung = abs(((p_He_aus_neu - p_He_aus)/p_He_aus)*100);
p_He_aus = p_He_aus_neu; % neuer Partialdruck He Austritt für weiteren Iterationsschritt definieren
p_H2O_aus = p_H2O_aus_neu; % neuer Partialdruck H2O Austritt für weiteren Iterationsschritt definieren end
y_O2 ist doch immer gleich. Warum überschreibst du das?
Selbst wenn du das aus welchen Gründen auch immer in der Schleife haben möchtest, kannst du das vor der Schleife noch hinkopieren, um die Fehlermeldung zu beheben.
Da hast du recht, y_O2 bleibt immer konstant. Ich habe y_O2 (und alle anderen Konstanten) auch schon vor die Schleife geschrieben, allerdings kommt dann die identische Fehlermeldung "Variable 'hmf_He_Taus' is not fully defined on some execution paths". Die Variable 'hmf_He_Taus' ist keine Konstante, sondern soll durch die while Schleife immer geändert werden.
Der Fehler taucht dann an einer Stelle auf, wo als erstes eine unbekannte Variable auftaucht und das ist dann 'hmf_He_Taus'. D.h. die while-Schleife wurde nicht durchlaufen und 'hmf_He_Taus' nicht definiert. Aber wieso wird die while-Schleife nicht durchlaufen ?
Der vollständigkeitshalber nochmal der komplette Code:
rel_Abweichung = abs(((p_He_aus_neu - p_He_aus)/p_He_aus)*100);
p_He_aus = p_He_aus_neu; % neuer Partialdruck He Austritt für weiteren Iterationsschritt definieren
p_H2O_aus = p_H2O_aus_neu; % neuer Partialdruck H2O Austritt für weiteren Iterationsschritt definieren end
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.