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

embedded matlab function & circshift

 

kicksomeazz
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 22.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2010, 09:48     Titel: embedded matlab function & circshift
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein kleines Problem: In meinem Simulink Modell möchte ich eine im Modell berechnete Größe, die auch im Modell weiterhin Anwendung findet, mit circshift modifizieren. Es handelt sich folglich um einen Vektor, dessen Werte verschoben werden sollen. Dazu habe ich an der gewünschten Stelle eine embedded matlab function mit dem Text

Code:


eingefügt. Dann kommt die Fehlermeldung "errors occurred during parsing of "Embedded Matlab Function" (#51)"

Nun habe ich gelesen, dass nicht alle Matlab Funktionen zwingend in den Embedded Functions verfügbar sind. Könnte das der Grund für mein Problem sein? Oder liegt es vielleicht daran, dass der zu verändernde Vektor nicht vollständig berechnet, sondern immer nur schrittweitenweise in die Funktion eingeht und somit der circshift Befehl nicht richtig arbeitet?

Ich danke euch schonmal für eure Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen


Prinz William

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2010, 19:31     Titel:
  Antworten mit Zitat      
Biste sicher, dass das so geht?
Du hast eine Funktion geschrieben, die sich selbst aufruft...
Muesste es nicht so gehen?
Code:

function y=emlcircshift(u)
y = circsift(u,3);
 

Ob die Funktion "embedded" werden kann, hängt stark von den verwendeten Funktionen in der circshift funktion ab. Schau mal in die Hilfe, da müsste genaueres drinne stehen.

Will
 
kicksomeazz
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 22.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2010, 14:37     Titel:
  Antworten mit Zitat      
Hi Will,

vielen Dank für die Antwort. Leider ist das nicht die Lösung des Problems. Ich habe nun Folgendes probiert in der embedded function:

Code:


function y = verschiebung(u)

u(end:-1:10) = u(end-9:-1:1);

y = u;

 


das heißt, die Werte des Eingangsvektor der Funktion sollen um 10 Zeilen versetzt werden. Korrekt programmiert ist dieses Funktiönchen, mit Dummyvektoren funktioniert das. Im Simulink Modell in der embedded function allerdings passiert mit diesem Quellcode rein gar nichts. Ich vermute also, dass Simulink zeilenweise von den originalen Eingangsvektoren (die, die an das komplette Simulinkmodell übergeben werden) einliest, mit diesem einen Wert die Simulation durchrechnet und das in den finalen Ausgabevektor schreibt. Das würde auch erklären, warum obiger Code keine Veränderung bewirkt, da ja an dieser Stelle im Programm ich mich mitten in der Simulation befinde und dort nur der jeweilige Wert gerade aktuellen Zeile durchgejagt wird.

Ist meine Annahme soweit richtig? Wenn ja, habt ihr irgendeine Idee wie ich diese Verschiebung sonst realisieren könnte?
Private Nachricht senden Benutzer-Profile anzeigen
 
Prinz William

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2010, 20:02     Titel: Komisch
  Antworten mit Zitat      
Also bei mir funktionierts. Ich deinen Code einmal als Matlab-Funktion und mal als eml eingebunden. Beide male kommt was raus.
Der Eingang war u=1:20.

Will
 
kicksomeazz
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 22.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2010, 09:46     Titel:
  Antworten mit Zitat      
Hi Will, prinzipiell funktioniert der Code auch. Wenn ich das bei mir "nackt" durchlaufen lasse, macht er die Verschiebung ohne Probleme. Das Problem ist die Implementierung im Simulink Modell bzw. die besondere Arbeitsweise des Modells (glaube ich).

Ich hole mal kurz etwas weiter aus: Das Simulink Modell befasst sich mit der Druckverlaufsanalyse eines Verbrennungsmotors. Als Eingangsgröße dient ein gemessener Druckverlauf im Zylinder sowie ein paar geometrische Kenngrößen wie die Volumenfunktion des Brennraums. Im Modell selbst ist hinterlegt, nach welchen chemischen Gleichungen unter den gegebenen Eingangsgrößen die Verbrennung stattfindet und gibt dann Größen aus wie den Heiz- oder Brennverlauf. Jedenfalls durchläuft der als Eingangsgröße dienende Druckverlauf mehrere Berechnungsstationen innerhalb des Modells. Nun will ich in an einer bestimmten Stelle zwischen zwei Berechnungsstationen im Simulink Modell diesen verschieben und ihn dann verschobenerweise weiter verarbeiten lassen. Ich fürchte aber, dass der Eingangsvektor nicht als solcher von Simulink verarbeitet wird, sondern nur zeilenweile. Also wird erst der erste Wert im Druckvektor Zeile 1 ausgelesen, durch das Modell geschickt und dann die sich daraus ergebenden Ergebnisse in die Ausgangsvektoren Zeile 1 geschrieben. Dann das Ganze mit Zeile 2 und so weiter. Das heißt, innerhalb des Modells wird nicht mit kompletten Vektoren, sondern nur zeilenweise aus den Eingangsvektoren gerechnet. Kommt das hin?
Private Nachricht senden Benutzer-Profile anzeigen
 
Prinz William

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2010, 19:43     Titel:
  Antworten mit Zitat      
Sorry. Ich habe nur Abends nach der Arbeit Zeit zu antworten.

Aha Brennverlaufsanalyse. Kenn ich. Ein- oder Zweizonenmodell? Diesel oder Benziner?

Ich glaube, jetzt hab ichs verstanden... Glaub ich... Ich versuches mal mit meinen Worten deine Ausführungen zu wiederholen...
Der (zeitliche) Druckverlauf ist der Eingangswert für deine Simulation, aus der Du dann die Chemie usw. rechnest. Wahrscheinlich nimmst Du auch den zeitlichen Gradienten dp/dt in die Rechnungen mit auf, oder? Du rechnest also mit p(t) irgendwas aus und shiftest dann die berechneten Werte, was für mich heißt, dass Du irgendwie den zeitlichen Verlauf verschiebtst. Richtig? Das geht soweit ich weiß nicht. Wofür brauchst Du denn das genau? Könntest Du nicht evtl. die Simulation zweimal laufen lassen um dann beim zweiten Mal die geschifteten Werte zu verwenden?

Beste grüße Will
 
kicksomeazz
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 22.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2010, 09:49     Titel:
  Antworten mit Zitat      
Hi Will,

ist ja kein Problem Wink bin froh über jede Antwort. Schön, dass dir das Thema DVA etwas sagt. Ich muss dazu sagen, dass ich das ganze Modell nicht selbst erstellt habe (dann hätte ich etwas bessere Simulink Kenntnisse und müsste hier nicht so viel fragen), sondern erweitere es um ein paar Funktionen. Grundsätzlich ist das Modell sowohl für Benziner und Diesel geeignet, wird aber vorrangig für Dieselmotoren von mir verwendet. Es rechnet einzonig.

Du hast es richtig verstanden, genau so ist es. Grund ist, dass ich eine Möglichkeit implementieren möchte, den thermodynamischen Verlustwinkel justieren zu können. Der Peak des Schleppdruckverlaufs sollte bei dem Betriebszustand des Motors bei ca. 0,7°KW v. OT liegen, tut er aber nicht. Und um jene Differenz will ich nun den berechneten Schleppdruckverlauf verschieben, bevor das Modell sich weitere Größen, die sich darauf beziehen, berechnet. Daher der Shift innerhalb des Modells bzw. während der Laufzeit.

Je mehr ich darüber nachdenke, desto mehr wird mir leider auch klar, dass das aufgrund der Funktionsweise von Simulink es so, wie ich mir das vorstelle, nicht gehen wird. Vielleicht hast du noch eine Idee, ansonsten käme mir die Idee in den Sinn, das Modell aufzuteilen. Und zwar an der Stelle, wo ich die Verschiebung vornehmen möchte. Dann lasse ich die erste Hälfte bis dahin rechnen, lasse die Ergebnisse ausgeben, verschiebe sie, starte die zweite Hälfte mit dem Verschobenen und dem Rest als Eingangsgrößen und zack! - fertig Wink ich muss bloß noch in mich gehen und mir genauestens überlegen, ob das der physikalisch korrekten Abbildung dann noch entspricht.
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.