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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.