|
KaiS |
Forum-Century
|
|
Beiträge: 102
|
|
|
|
Anmeldedatum: 19.04.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.08.2011, 14:16
Titel: Variable in Simulink
|
|
|
|
|
Hallo zusammen,
ich habe ein Modell in Simulink erstellt, welches mir einen bestimmten Druck berechnen soll. Dieser Druck soll aber unabhängig von seiner Berechnung bei einer bestimmten Maximalgrenze limitiert werden, sodass ich dafür ein Saturation-Bauteil gewählt habe.
Jetzt habe ich das Problem, dass sich meine Maximalgrenze abhängig von den Eingaben am Anfang der Simulation verschieben kann, sodass ich in das Saturation-Bauteil im "Upper Limit" eig eine Variable reinschreiben müsste.
Diese Variable kann ich aber im Voraus nicht initialisieren, weil alles während einer Simulation erst durchgerechnet wird.
Der Eingang meines Modells ist ein Sprung. Meine Maximalgrenze errechnet sich aus dem Maximalwert des Sprungs geteilt durch denUmgebungsdruck, welches vorher schon als Konstante initialisiert ist.
Weiß vllt jmd, wie ich den Eingangssprung als Variable so zu fassen kriege, dass es noch während der Simulation zur Grenzenberechnung benutzt werden kann?
Ich hatte es mit dem Fcn-Bauteil versucht und
p_max = (u(1)/p_amb)*1e5
gerechnet, allerdings ist die Variablenzuweisung im Fcn-Bauteil leider nicht möglich, sodass ich nun nach einem anderen Ausweg suche.
Vielen Dank!
LG
Kai
|
|
|
|
|
KaiS |
Themenstarter
Forum-Century
|
|
Beiträge: 102
|
|
|
|
Anmeldedatum: 19.04.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.08.2011, 07:50
Titel:
|
|
Hat nmd eine Idee? Hab ich mich vllt ein bisl unklar ausgedrückt, was mein Anliegen ist?
Danke!
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 15.08.2011, 09:16
Titel:
|
|
Kannst du mal deinen Code der Embedded Function posten...
hier musst dann ja folgender Funktionskopf stehen:
|
|
|
Verschoben: 15.08.2011, 11:52 Uhr von denny Von Programmierung nach Simulink |
KaiS |
Themenstarter
Forum-Century
|
|
Beiträge: 102
|
|
|
|
Anmeldedatum: 19.04.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.08.2011, 12:41
Titel:
|
|
Hi,
ich hab mal einen Screenshot angehängt.
In meinen fcn-Bauteil steht dabei folgendes:
p_cath_act ist dabei der variable Endwert der Berechnungen, die im vorderen Teil des Modells ablaufen und p_amb habe ich am Anfang der Simulation schon initialisiert.
Nun suche ich einen Weg, das p_cath_act in einer Variablen gefasst zu kriegen, damit ich damit eben rechnen kann.
Im Saturation-Bauteil ist dann als Upper Limit p_max angegeben.
Mehr Code habe ich eigentlich gar nicht.
Danke!
Beschreibung: |
|
Download |
Dateiname: |
Pressure calculation.jpg |
Dateigröße: |
141.31 KB |
Heruntergeladen: |
700 mal |
|
|
|
BlackDread |
Forum-Century
|
|
Beiträge: 212
|
|
|
|
Anmeldedatum: 11.05.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2015a
|
|
|
|
|
|
Verfasst am: 15.08.2011, 13:42
Titel:
|
|
Irgendwie leicht verwirrend...
du berechnest in der fcn an sich ein p_max, nennst es aber danach p_cath_act.
Wo soll p_cath_act in der fcn herkommen? p_amb ist ja schon gegeben, wenn ichs richtig versteh.
Was sind die Übergabeparameter der Funktion?
So? weil dein fcn-Block hat nur einen Eingang....
Gruß Chris
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 15.08.2011, 14:23
Titel:
|
|
Ich verstehe hier grad dein Anliegen/Gedanke nicht. Ich habe bisher angenommen, dass du die y-Werte deines Signals begrenzen willst. Mit dem Saturation-Block gab es das Problem, dass man die Grenze vor der Simulation festlegen muss, diese sich in deinem Fall aber ändern kann. Um es variabel zu machen, kommt die Embedded Fct ins Spiel. Was soll dann dort noch der Saturation-Block in dem Bild?
Wie heißen denn nun die Werte, aus denen Upper-Limit gebildet wird und das Signal, welches begrenzt werden soll. Diese müssen doch als Eingang der Embedded Fct definiert sein. Dann brauchst du doch wohl eine Abfrage, ob der y-Wert des Signals > Upper-Limit ist.
|
|
|
KaiS |
Themenstarter
Forum-Century
|
|
Beiträge: 102
|
|
|
|
Anmeldedatum: 19.04.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.08.2011, 07:35
Titel:
|
|
|
|
|
Sry, da ist mir ein kleiner Fehler unterlaufen. Wie BlackDread schon richtig feststellt, berechne ich ein p_cath_act. Das ist mein aktueller Druck, den die Simulation berechnet.
Der Druck, den ich in die Formel eingebe, ist p_req, d.h. der Solldruck.
Das sind auch die beiden Werte (p_req und p_amb), aus denen das Upper Limit gebildet werden soll. p_cath_act hingegen ist der y-Wert, den meine Simulation zum Schluss berechnet und ausgibt.
Das Endziel will ich mal an einem Beispiel erläutern:
Fall 1: Die Simulation berechnet eig p_cath_act = 2. Nun habe ich zuvor für p_max berechnet, dass p_max unter den initialisiertem p_amb (p_req soll bei beiden Fällen gleich bleiben) gleich 1.8 ist. D.h. die Simulation gibt am Ende 1.8 aus, weil die Grenze niedriger als das tatsächlich berechnete ist.
Fall 2: Die Simulation berechnet eig p_cath_act = 2. p_max ist nun aber 2.2. Also gibt mir die Simulation am Schluss 2 für p_cath_act raus.
Dass ich für diese Angelegenheit versucht habe, einen Saturation- und Fcn-Block einzubinden, lag nur daran, dass ich iwie versucht habe das Ganze zum Laufen zu bringen. Das kann also gut und gerne falsch sein. Dementsprechend könnt ihr mir gerne auch eine komplett andere Lösung vorschlagen, bin da völlig offen
Meint ihr denn mit Embedded Fcn meinen Fcn-Block oder ist das was anderes?
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 16.08.2011, 09:14
Titel:
|
|
Also war mein Verständnis von deinem Anliegen doch richtig. Ich meine das hier...
http://www.mathworks.com/help/toolb.....slref/matlabfunction.html
Du hast aber einen anderen Block benutzt. In dem Block würde dann wohl folgendes drin stehen...
Evtl. musst du noch eine Bedingung einbauen, was passieren soll, wenn p_reg und p_amb noch nicht auf den Endwerten sind.
Man könnte das aber auch genauso mit einem if Block bilden...siehe Anhang.
Beschreibung: |
|
Download |
Dateiname: |
saturation_block.mdl |
Dateigröße: |
23.89 KB |
Heruntergeladen: |
521 mal |
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 16.08.2011, 11:42
Titel:
|
|
Wie ich in diesem Thread erfahren habe, ist das Addieren der Signale am Ende des Subsystems fehleranfällig.
http://www.gomatlab.de/viewtopic,p,73581.html#73581
Diese Lösung sollte das Problem beheben:
Beschreibung: |
|
Download |
Dateiname: |
saturation_block.mdl |
Dateigröße: |
23.89 KB |
Heruntergeladen: |
507 mal |
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 16.08.2011, 14:05
Titel:
|
|
noch eine Vereinfachung...Erklärung, siehe oberen Link.
Beschreibung: |
|
Download |
Dateiname: |
saturation_block.mdl |
Dateigröße: |
20.17 KB |
Heruntergeladen: |
537 mal |
|
|
|
KaiS |
Themenstarter
Forum-Century
|
|
Beiträge: 102
|
|
|
|
Anmeldedatum: 19.04.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.08.2011, 15:47
Titel:
|
|
Hi DSP,
super, vielen Dank für die Mühe!
Das letzte Modell sieht in der Tat um einiges einfacher als das erste aus
Nun funktioniert alles
LG
Kai
|
|
|
KaiS |
Themenstarter
Forum-Century
|
|
Beiträge: 102
|
|
|
|
Anmeldedatum: 19.04.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.08.2011, 17:05
Titel:
|
|
Sry für Doppelpost, aber eine Frage hätte ich dann doch noch:
Wie genau funktioniert denn der Multiport Switch?
Wenn mein Relational Operator 1 durchgibt, dann lässt der Switch den dritten Eingang durch und wenn 0 auf Input 1 kommt, wird Input 2 durchgegeben. Stimmt das?
LG
Kai
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 16.08.2011, 17:08
Titel:
|
|
Ja...so ist es.
Man kann das auch noch umstellen, dass der Index der Eingänge mit 1 beginnt.
|
|
|
KaiS |
Themenstarter
Forum-Century
|
|
Beiträge: 102
|
|
|
|
Anmeldedatum: 19.04.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.08.2011, 17:55
Titel:
|
|
Okay danke
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
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.
|
|