|
|
embedded matlab function & circshift |
|
kicksomeazz |
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 22.11.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 01.12.2010, 09:48
Titel: embedded matlab function & circshift
|
|
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
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.
|
|
|
|
|
Prinz William |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 01.12.2010, 19:31
Titel:
|
|
Biste sicher, dass das so geht?
Du hast eine Funktion geschrieben, die sich selbst aufruft...
Muesste es nicht so gehen?
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
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 22.11.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.12.2010, 14:37
Titel:
|
|
|
|
|
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:
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?
|
|
|
Prinz William |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.12.2010, 20:02
Titel: Komisch
|
|
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
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 22.11.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.12.2010, 09:46
Titel:
|
|
|
|
|
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?
|
|
|
Prinz William |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.12.2010, 19:43
Titel:
|
|
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
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 22.11.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.12.2010, 09:49
Titel:
|
|
|
|
|
Hi Will,
ist ja kein Problem 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 ich muss bloß noch in mich gehen und mir genauestens überlegen, ob das der physikalisch korrekten Abbildung dann noch entspricht.
|
|
|
|
|
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.
|
|