2017-09-20 2 views
1

Ich bin ziemlich neu in Modelica, erst vor ein paar Monaten aufgrund eines Projekts, an dem ich gearbeitet habe. Meistens arbeiten Sie mit mechanischen Mehrkörpersystemen unter Verwendung der MultiBody-Bibliothek, die in der Standard-Modelica-Distribution enthalten ist.Dynamische Änderung der Koordinaten für die Körperposition in Modelica MultiBody Bibliothek

Ich muss eine Körperposition nach den dynamisch berechneten Koordinaten während der Simulation ändern, aber ich kann keinen Weg finden, dies zu tun.

Dies ist der Vektor-Variable, die die Position des Massenmittelpunktes des gegebenen Systems berechnet:

Modelica.SIunits.Length CMG[2]; 

CMG[1] = ... + cos(part3rotation.angles[3]) ... + part3origin[1] ...; 
CMG[2] = ...; 

Ich möchte Stellung einen massless Körpers (FixedShape) an den Koordinaten (CMG [1], CMG [2]) als eine Möglichkeit, den Schwerpunkt und seine Bewegung während der Simulation anzuzeigen.

Gibt es eine Möglichkeit, dies zu tun?

Ich habe versucht, den Körper an eine feste Übersetzung Komponente anfügen, aber es erwartet einen Parameter (PARAM) anstelle einer Variablen (VAR) und dies verursacht einen Fehler.

Verwendete Software: Modelica 3.2.2 und Wolfram SystemModeler 5.0.

Antwort

0

Die Lösung war die FixedTranslation Klasse zu ändern, um ein neues Eingabe: did

frame_b.r_0 = frame_a.r_0 + xyz; 

Anschluss des CMG-Vektor mit dem xyz-Vektor der Klasse der:

input Modelica.SIunits.Position xyz[3]; 

und ändern Sie die Gleichungen Trick.

1

Ich möchte hinzufügen, einen Rahmen Modelica.Mechanics.MultiBody.Interfaces.Frame_b, um Ihren Körper, und fügen Sie dann die folgenden Gleichungen (aus FixedTranslation genommen):

frame_b.r_0 = your_three_d_vector; 
frame_b.R = frame_a.R; // or some other orientation 

/* Force and torque balance */ 
zeros(3) = frame_a.f + frame_b.f; // and maybe some other forces in your system 
zeros(3) = frame_a.t + frame_b.t + cross(r, frame_b.f); // and maybe some other torques and forces in your system 

Um einen zusätzlichen Anschluss in Modelica hinzufügen möchten, würden wir nicht nur berücksichtigen müssen die potentiellen Variablen (in diesem Fall die Position und Orientierung), aber auch die Strömungsvariablen (Kräfte und Drehmomente).

0

Ich nehme an, Sie berechnen die Position des Schwerpunkts des ganzen Systems relativ zum Inertialsystem. Dann können Sie frame_a in Ihrer Klasse vollständig weglassen und somit wäre es nicht notwendig, immer frame_a explizit zu world.frame_b zu verbinden, was offensichtlich veraltet ist.

Verwenden Sie nur Connections.root(frame_b.R) anstelle von Connections.branch(frame_a.R, frame_b.R), wie ursprünglich in FixedTranslation definiert.

Und noch ein Kommentar. Es ist ratsam, direkt mit Vektoren anstelle von Positionsvektorkomponenten zu arbeiten und für Vektortransformationen Funktionen aus Modelica.Mechanics.MultiBody.Frames zu verwenden.

Verwandte Themen