2017-09-21 5 views
1

Ich arbeite derzeit mit mechanischen Mehrkörpersystemen, die die in der Modelica-Standardverteilung enthaltene MultiBody-Bibliothek verwenden.Zwischen zwei Flanschen wechseln

Ich muss einen Schalter zwischen Flanschen implementieren, um Position oder Kraftsteuerung für ein bestimmtes Gelenk zu wählen.

model FlangeSwitch "Switch between flanges" 
    Modelica.Mechanics.Translational.Interfaces.Flange_a flange_a_1; 
    Modelica.Mechanics.Translational.Interfaces.Flange_b flange_b_1; 
    Modelica.Mechanics.Translational.Interfaces.Flange_a flange_a_2; 
    Modelica.Mechanics.Translational.Interfaces.Flange_b flange_b_2; 
    Modelica.Mechanics.Translational.Interfaces.Flange_a flange_a_exit; 
    Modelica.Mechanics.Translational.Interfaces.Flange_b flange_b_exit; 
    Modelica.Blocks.Interfaces.BooleanInput u; 
equation 
    if u then 
    flange_a_exit = flange_a_2; 
    flange_b_exit = flange_b_2; 
    else 
    flange_a_exit = flange_a_1; 
    flange_b_exit = flange_b_1; 
    end if; 
end FlangeSwitch; 

Aber dieser Ansatz funktioniert nicht, das System ist nicht ausgeglichen: 10 Gleichungen und 12 Variablen.

Gibt es eine Möglichkeit, dies zu tun?

Antwort

1

Ich glaube nicht, dass ein Modelica-Tool diese Operation zulässt (auch wenn Sie ein ausgeglichenes Modell haben), da dies möglicherweise zu einem variablen Struktursystem führen würde. Was Modelica im Moment nicht unterstützt. Hier finden Sie eine schöne Einführung hier: https://www.modelica.org/events/modelica2017/proceedings/html/submissions/ecp17132291_Stuber.pdf

Ohne die Anwendung vollständig zu wissen, Sie zwei Ansätze versuchen könnten:

  • ein Modell verwenden, das eine Drehkupplung emuliert, wie die Modelica.Mechanics.Translational.Components.Brake mit einem aktivierten Parameter useSupport. Auf diese Weise können Sie eine "steuerbare mechanische Verbindung" herstellen, um einen der Flansche mit dem support-Stecker zu verbinden. Wenn ich Ihren Code richtig gelesen habe, sollten Sie flange_a_2 an den Support und flange_a_exit entweder an flange_a oder flange_b anschließen. Bei Aktivierung der Bremse über die RealInput wird eine mechanische Verbindung hergestellt.

  • Die zweite Sache, die Sie versuchen können, ist entweder Position oder Kraft (die sowohl Sie durch einen Sensor Modelica.Mechanics.Translational.Sensors.PositionSensor anwenden möchten zu messen und dann gilt es die jeweilige Quelle verwendet wird, würde die in diesem Fall Modelica.Mechanics.Translational.Sources.Position sein. Das Umschalten zwischen den Quellen könnten dann durch Umschalten der realen Signalen anstelle der physikalischen Anschlüsse erfolgen. Kümmern also Sprünge in Positionen erzeugen könnten, wenn sie direkt Positionen anwenden.

1

der Link, den Sie an nicht-phyiscal Anschlüsse im Zusammenhang geschrieben, die sind Im Vergleich zu den physischen Verbindern ist das System weniger restriktiv, so dass der Vergleich der beiden Lösungen sehr sorgfältig durchgeführt werden sollte:

Das Umschalten von der Position als Eingabe zur Eingabe als Eingabe würde erfordern, dass das Gleichungssystem neu aufgebaut wird, wenn dieser Schalter ausgeführt wird. Dies ist mit Modelica der aktuellen Generation nicht möglich. Sie müssen eine Lösung finden, die auf der gleichen Eingabe für die gesamte Simulation basiert.

Wäre es ausreichend, die Position so zu initialisieren, dass das System die Simulation an dem Punkt startet, an den Sie es zuerst verschieben möchten (mithilfe der Positionsquelle)? Was Sie verlieren, ist die Bewegung des Systems in diese Position.

+0

Danke für die Antwort. Sie haben Recht, dass es für eine dynamische Änderung in den Differentialgleichungen erforderlich wäre, die das Modell während der Simulation definieren, und vielleicht ist dies in Modelica noch nicht möglich. Ich werde einen anderen Ansatz versuchen. –

Verwandte Themen