Co-Simulation

Hallo,
im Rahmen einer Studienarbeit ist es meine Aufgabe ein System (z.B.
Mehrmassenschwinger)
softwaremäßig zu simulieren.
Schwierig und interessant wird die Sache aber, da dies in Form einer
Co-Simulation erfolgen soll.
Hierzu soll ein Teil in Matlab/Simulink (Master) und ein anderer als
eigenständiges C-Programm (Slave)
umgesetzt werden.
Um aber überhaupt bis zur Stelle der programmiertechnischen Umsetzung zu
gelangen ist es natürlich notwendig,
die Prinzipien einer solchen "getrennten" Simulation zu verstehen.
Und da hapert es bei mir.
(In der zum Thema zu findenden Literatur ist nur zu lesen, dass es
Co-Simulation gibt und wie sie zwischen käuflichen
Systemen (Matlab, Adams, ...) in äußerst komplexen Systemen angewendet
wird.)
###########
Als Denkbeispiel habe ich bisher einen, an beiden Enden eingespannten,
gedämpften Zwei-Massen-Schwinger angenommen.
=====Feder1 (c1)=============Feder3 (c3)=============Feder2 (c2)=======
Wand============Masse1 (m1)============Masse2 (m2)============Wand
=====Dämpfer1 (d1)===========Dämpfer3 (d3)===========Dämpfer2 (d2)=====
-Masse m1 wird um den Weg x1 ausgelenkt, Masse m2 um x2.
Anschließend trenne ich dieses System auf.
=====Feder1 (c1)=================== ==================Feder2
(c2)=======
Wand============Masse1 (m1)=Kraft (F) Kraft (-F)=Masse2
(m2)============Wand
=====Dämpfer1 (d1)================= ==================Dämpfer2
(d2)=====
(MASTER)
(SLAVE)
Die hierzu entstehenden Differentialgleichungen sind
m1*x1°° + d1*x1° + c1*x1 = F m2*x2°° + d2*x2°
+ c2*
x2 = -F
Übrig bleibt dann noch:
========Feder3 (c3)=========
Kraft (-F)============Kraft (F)
========Dämpfer3 (d3)=======
-mit F = c3*(x2-x1) + d3*(x2°-x1°)
=> Aber was bringt mir das bezüglich der Co-Simulation?
###########
Es würde mich sehr freuen, wenn ihr mir mit Erklärungen, Erläuterungen,
Links und/oder Literaturtips helfen könntet.
Vielen Dank
Daniel
Reply to
Daniel Bauer
Loading thread data ...
Hallo Daniel,
normalerweise nimmt man zur Simulation ein und dasselbe Werkzeug, denn das spart den fuer Co-Simulationen notwendigen Aufwand zur Definition von eindeutigen Schnittstellen zwischen den Simuations- modellen und Simulationstools und eine evtl. notwendige Einarbeitung in zwei oder noch mehr unterschiedliche Tools. Es kommt aber vor, dass unterschiedliche Teile eines zu simulierenden Systems bereits mit unterschiedlichen Tools modelliert sind und dann bietet es sich an diese Teilsysteme in einer Co-Simulation zu simulieren, da man sich dadurch den dann doppelten Modellierungsaufwand erspart. Als Beispiel soll der Automobilbereich dienen: Dort gibt es oft sehr detaillierte Mehr- koerpermodelle eines Fahrzeugs (z.B. auch inkl. Elastizitaeten der einzelnen Teile) in Adams - daher macht es wenig Sinn dies alles nochmals in Matlab zu modellieren. Hat man aber eine neu entwickelte Komponente (z.B. verstellbaerer Daempfer, aktives Fahrwerk, usw.) als Modell in Matlab vorliegen, oder will man beispielsweise die Fahrdynamik des Fahrzeugs mit Hilfe eines Reglers beeinflussen, so kann der Regler beispielsweise in Matlab bzw. Matlab-Simulink schnell und einfach fuer erste Test entworfen werden. Kombiniert man nun das Fahrzeugmodell aus Adams (mit seiner hohen Genauigkeit) mit der neuen Komponente oder dem Fahrdynamik-Regler in Matlab in einer Simulation, so spricht man von Co-Simulation. Die Co-Simulation spart dann Zeit, da man auf bereits verfuegbaeres zurueckgreifen kann.
Deinem Beispiel entnehme ich, dass es bei Deiner Studienarbeit primaer um die Methode der Co-Simulation geht (ohne Regler- entwurf fuer Dein System "Massenschwinger"). Daher solltest Du nach einer Schnittstelle zw. den Dgls. suchen die moeglichst einfach ist und den einen Teil der Dgls. in Matlab implementieren und den anderen in C-Code. (Das kann bei Deinem System eigentlich nur darauf hinauslaufen die Dgl. fuer die Masse 1 in Matlab und die Dgl. fuer die Masse 2 in C - oder umgekehrt - zu implementieren). Am einfachsten bindest Du Deinen C-Code dann in Form einer Matlab-S-Function in die Simulationsumgebung unter Matlab- Simulink ein.
Viel Spass & Erfolg bei der Studienarbeit...
Gruss Urs
-- Urs Bauer
"Daniel Bauer" schrieb im Newsbeitrag news:bs9jdr$t9b$05$ snipped-for-privacy@news.t-online.com...
Reply to
Urs Bauer
Hallo,
vielen Dank für die Antwort Urs. Nachträglich frohe Weihnachten ;o)
Zwischen meiner Fragestellung und deiner Antwort hatte ich Zeit mich mit der Aufgabe zu beschäftigen. Ergebnis ist bisher, dass sich deine Ausführungen größtenteils mit meinen gewonnenen Informationen decken.
Einige Fragen habe ich dennoch.
Wenn das insgesamt zu simulierende Modell mit Hilfe von mehreren DGL beschrieben werden konnte, erfolgt die Berechnung der Zustände des Modells über der Zeit dann wechselseitig zwischen den einzelnen Modulen, in denen die DGLs implementiert wurden? z.B. 1) Matlab erste DGL eines 2-Massen-Schwingers und C-Prog zweite DGL des Systems 2) Matlab beginnt die Simulation und übergibt die Parameter der eigenen DGL time, x1, x1_p, x1_pp an C-Prog 3) C-Prog rechnet mit diesen Parametern und übergibt anschließend seine Werte time, x2, x2_p, und x2_pp 4) GOTO 1
Wie können einer S-Funktion mehrere Parameter übergeben werden und wie kann eine S-Funktion mehr als einen Parameter ausgeben?
Daniel
"Urs Bauer" schrieb im Newsbeitrag news:bsmids$e57cr$ snipped-for-privacy@ID-213741.news.uni-berlin.de...
Reply to
Daniel Bauer
Hallo,
ja die Berechnung erfolgt wechselweise, alles in der noetigen Reihenfolge. Der von dir schon erwaehnte MASTER steuert das. Bei einer SFunction musst du dir mal die Doku ansehen, ist dort ganz gut beschrieben...
Fuer mehrere SFunction-Eingaenge/Ausgaenge am einfachsten Vektoren verwenden. Dazu in Function "mdlInitializeSizes" z.B.
/* Number of Inputs */ ssSetInputPortWidth(S, 0, 8); --> Vektor mit 8 Signalen
/* Number of Outputs */ ssSetOutputPortWidth(S, 0, 4); --> Vektor mit 4 Signalen
Fuer die Simulation in der SFunction gibt es theoretisch zwei Moeglichkeiten: 1. Implementierung der Dgl. in der Form xdot = f(x,u) in der Function "mdlStates" (Name ?) --> Nutzung des Matlab- Integrators 2. Implementierung der Dgl. mit eigenem Integrationverfahren als stand-alone-Funktion und Aufruf der stand-alone-Funktion aus Function "mdlOutputs"
Um naeher an eine "autarke" zweite Simulation zu kommen, wuerde ich Option 2 empfehlen - ist aber etwas mehr Aufwand...
Gruss Urs
"Daniel Bauer" schrieb im Newsbeitrag news:bspdk5$ki0$03$ snipped-for-privacy@news.t-online.com...
Reply to
Urs Bauer

Site Timeline

PolyTech Forum website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.