WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Variable in Simulink

 

KaiS
Forum-Century

Forum-Century


Beiträge: 102
Anmeldedatum: 19.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2011, 14:16     Titel: Variable in Simulink
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen


KaiS
Themenstarter

Forum-Century

Forum-Century


Beiträge: 102
Anmeldedatum: 19.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.08.2011, 07:50     Titel:
  Antworten mit Zitat      
Hat nmd eine Idee? Hab ich mich vllt ein bisl unklar ausgedrückt, was mein Anliegen ist?

Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 15.08.2011, 09:16     Titel:
  Antworten mit Zitat      
Kannst du mal deinen Code der Embedded Function posten...

hier musst dann ja folgender Funktionskopf stehen:

Code:
function p_max = fcn(u,p_amp)
Private Nachricht senden Benutzer-Profile anzeigen
Verschoben: 15.08.2011, 11:52 Uhr von denny
Von Programmierung nach Simulink
 
KaiS
Themenstarter

Forum-Century

Forum-Century


Beiträge: 102
Anmeldedatum: 19.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.08.2011, 12:41     Titel:
  Antworten mit Zitat      
Hi,

ich hab mal einen Screenshot angehängt.

In meinen fcn-Bauteil steht dabei folgendes:

Code:
p_max = p_cath_act / p_amb


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!

Pressure calculation.jpg
 Beschreibung:

Download
 Dateiname:  Pressure calculation.jpg
 Dateigröße:  141.31 KB
 Heruntergeladen:  700 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDread
Forum-Century

Forum-Century


Beiträge: 212
Anmeldedatum: 11.05.11
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 15.08.2011, 13:42     Titel:
  Antworten mit Zitat      
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?

Code:
function [p_max] = fcn( p_cath_act,p_amb)


So? weil dein fcn-Block hat nur einen Eingang....

Gruß Chris
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 15.08.2011, 14:23     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
KaiS
Themenstarter

Forum-Century

Forum-Century


Beiträge: 102
Anmeldedatum: 19.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2011, 07:35     Titel:
  Antworten mit Zitat      
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.

Code:
p_max = p_req / p_amb


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 Smile

Meint ihr denn mit Embedded Fcn meinen Fcn-Block oder ist das was anderes?
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 16.08.2011, 09:14     Titel:
  Antworten mit Zitat      
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...

Code:
function [y] = fcn( p_cath_act,p_amb,p_reg)
p_max = p_req / p_amb;
% y-Wert ist größer Upper-Limit
if p_cath_act > p_max
   y = p_max; % y-Wert auf p_max begrenzen
else
   y = p_cath_act
end
 


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.

saturation_block.mdl
 Beschreibung:

Download
 Dateiname:  saturation_block.mdl
 Dateigröße:  23.89 KB
 Heruntergeladen:  521 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 16.08.2011, 11:42     Titel:
  Antworten mit Zitat      
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:

saturation_block.mdl
 Beschreibung:

Download
 Dateiname:  saturation_block.mdl
 Dateigröße:  23.89 KB
 Heruntergeladen:  507 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 16.08.2011, 14:05     Titel:
  Antworten mit Zitat      
noch eine Vereinfachung...Erklärung, siehe oberen Link.

saturation_block.mdl
 Beschreibung:

Download
 Dateiname:  saturation_block.mdl
 Dateigröße:  20.17 KB
 Heruntergeladen:  537 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
KaiS
Themenstarter

Forum-Century

Forum-Century


Beiträge: 102
Anmeldedatum: 19.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2011, 15:47     Titel:
  Antworten mit Zitat      
Hi DSP,

super, vielen Dank für die Mühe!

Das letzte Modell sieht in der Tat um einiges einfacher als das erste aus Smile

Nun funktioniert alles Smile

LG
Kai
Private Nachricht senden Benutzer-Profile anzeigen
 
KaiS
Themenstarter

Forum-Century

Forum-Century


Beiträge: 102
Anmeldedatum: 19.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2011, 17:05     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 16.08.2011, 17:08     Titel:
  Antworten mit Zitat      
Ja...so ist es.

Man kann das auch noch umstellen, dass der Index der Eingänge mit 1 beginnt.
Private Nachricht senden Benutzer-Profile anzeigen
 
KaiS
Themenstarter

Forum-Century

Forum-Century


Beiträge: 102
Anmeldedatum: 19.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2011, 17:55     Titel:
  Antworten mit Zitat      
Okay danke Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.