Ich brauche nochmal Hilfe mit Simulink.

OP #4081317
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ß!
Angehängte Dateien:
OP #4093314
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
#4093332
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 
;-)
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren