Forum: Analoge Elektronik und Schaltungstechnik Ich brauche nochmal Hilfe mit Simulink.


von X. A. (wilhem)


Angehängte Dateien:

Lesenswert?

Hallo Jungs,
zuerst: frohe Ostern

Ich habe das folgende Problem, das ich mit Simulink nicht hinbekomme.
Wie kann ich in Simulink einen Block erstellen, der eine von mir 
vordefinierte Funktion/Matrix berechnen wird????
In dem Fall habe ich die folgende mega Matrix:
1
>> M =
2
 
3
[ -(sin(phi)*sin(psi) + cos(phi)*cos(psi)*sin(theta))/m, -(d*zeta*(cos(phi)*sin(psi) - cos(psi)*sin(phi)*sin(theta)))/(Jxx*m), -(d*((zeta*sin(phi)*(cos(psi)*sin(phi) - cos(phi)*sin(psi)*sin(theta)))/(m*cos(theta)) + (zeta*cos(phi)^2*cos(psi)*cos(theta))/m + (zeta*sin(phi)*tan(theta)*(cos(phi)*sin(psi) - cos(psi)*sin(phi)*sin(theta)))/m))/Jyy, -((zeta*cos(phi)*(cos(psi)*sin(phi) - cos(phi)*sin(psi)*sin(theta)))/(m*cos(theta)) + (zeta*cos(phi)*tan(theta)*(cos(phi)*sin(psi) - cos(psi)*sin(phi)*sin(theta)))/m - (zeta*cos(phi)*cos(psi)*cos(theta)*sin(phi))/m)/Jzz]
4
[  (cos(psi)*sin(phi) - cos(phi)*sin(psi)*sin(theta))/m,  (d*zeta*(cos(phi)*cos(psi) + sin(phi)*sin(psi)*sin(theta)))/(Jxx*m), -(d*((zeta*sin(phi)*(sin(phi)*sin(psi) + cos(phi)*cos(psi)*sin(theta)))/(m*cos(theta)) + (zeta*cos(phi)^2*cos(theta)*sin(psi))/m - (zeta*sin(phi)*tan(theta)*(cos(phi)*cos(psi) + sin(phi)*sin(psi)*sin(theta)))/m))/Jyy,  ((zeta*cos(phi)*tan(theta)*(cos(phi)*cos(psi) + sin(phi)*sin(psi)*sin(theta)))/m - (zeta*cos(phi)*(sin(phi)*sin(psi) + cos(phi)*cos(psi)*sin(theta)))/(m*cos(theta)) + (zeta*cos(phi)*cos(theta)*sin(phi)*sin(psi))/m)/Jzz]
5
[                              -(cos(phi)*cos(theta))/m,                                 (d*zeta*cos(theta)*sin(phi))/(Jxx*m),                                                                                                                                     (d*((zeta*cos(phi)^2*sin(theta))/m + (zeta*cos(theta)*sin(phi)^2*tan(theta))/m))/Jyy,                                                                                                                             -((zeta*cos(phi)*sin(phi)*sin(theta))/m - (zeta*cos(phi)*cos(theta)*sin(phi)*tan(theta))/m)/Jzz]
6
[                                                     0,                                                                    0,                                                                                                                                                                                            (d*sin(phi))/(Jyy*cos(theta)),                                                                                                                                                                                                   cos(phi)/(Jzz*cos(theta))]

deren Parameter durch entsprechenden Eingänge in Simulink zugeführt 
werden müssen (Bild 1).
Also muss der Block in einem übergeordnete Struktur zugeführt werden 
und, anhand der Parameter, die Matrix bei jedem Loop berechnen.
Im Moment interessiert mich wie ich die Eingänge definiere kann. 
Selbstverständlich brauche ich einen Wert am Ausgang. Deren Auswertung 
aber anhand eines noch nicht definierten Vektor bestimmt. Ich wollte 
erstmal alles so einfach wie möglich gestalten.

Gruß!

: Bearbeitet durch User
von TestX (Gast)


Lesenswert?

Such in der Simulink Lib nach M.Function block. Damit kannst du eine 
beliebige m funktion aufrufen. Der block wird entsprechend der 
parameter/rückgabewerte der funktion automatisch generiert.

von X. A. (wilhem)


Angehängte Dateien:

Lesenswert?

Super Danke!
Dank deiner Hilfe habe ich es gefunden.

Für die Neugierige habe ich ein Bild hochgeladen

von X. A. (wilhem)


Lesenswert?

Jungs,
ich habe noch eine Frage.
Der obige Block funktioniert hervorragend, dennoch habe ich ein kleines 
Problem:

In einem größeren Projekt werden bestimme Variablen in dem Workspace 
von Matlab deklariert und initialisiert. Zum Beispiel:
1
% Erdbeschleunigung
2
g  = 9.81;

Nun, wenn ich versuche, die Variable g in dem Block zu benutzen, dann 
meldet er eine Fehlermeldung. Lösung: alle schon in dem Workspace 
deklarierten Variablen müssen nochmal in dem Block deklariert und 
initialisiert werden.

Zur besseren Modularisierung und Portabilität des Codes möchte ich alle 
Variablen in dem Workspace einmal deklarieren und ihnen einen Wert 
zuweisen.

Wie kriege ich es hin?

Ciao

von Jan K. (jan_k)


Angehängte Dateien:

Lesenswert?

Das liegt daran, dass g im Base Workspace von Matlab liegt.
Um in Function Blocks Variablen daraus zu verwenden hast du 4 
Möglichkeiten.

1) Im Editor neue Eingabeparameter wählen (siehe Bild)
2) Mit "interner_parameter = evalin('base', 'externer_parameter;');" 
laden
3) Im Constant Block einfach "g" reinschreiben, die können vom matlab 
workspace laden
4) "From Workspace" Block benutzen

Die letzten beiden machen für Parameter eher weniger Sinn, würden aber 
funktionieren. 2) ist unter Umständen unübersichtlich. Würde zu 1) raten 
;-)

: Bearbeitet durch User
von X. A. (wilhem)


Lesenswert?

Die erste Möglichkeit funktioniert super!!!!!!!

Danke!!!!!!!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.