1

私は Modelica を学ぼうとしており、マルチボディ ライブラリを使用して非常に単純なモデルを構築しました。モデルは、ワールド オブジェクトとビームに接続されたボディ (質量) で構成され、ビームは 2 つの拡張 PartialOneFrame_a クラス (以下を参照) に接続され、1 つの軸に一定の力を作成するように変更しました。基本的に、このオブジェクトのグループが行うことはすべて、重力の下で落下し、体の中心からの縦方向のオフセットで作用する 2 つの力が原因で回転することです。

    model Constant_Force
      extends Modelica.Mechanics.MultiBody.Interfaces.PartialOneFrame_a;
      parameter Real force = 1.0;

    equation 
      frame_a.f = {0.0,0.0,force};
      frame_a.t = {0.0,0.0,0.0};
    end Constant_Force;

次に、回転する「アーム」の端に接続する非常に単純な空力コンポーネントを作成できるかどうかを確認したかった. 私の考えは、上記の Constant_force モデルの例に従い、最初の単純なカットでローカル フレーム速度に基づいて力を生成することでした。これは私の問題が発生した場所です-der(frame_a.r_0)を使用して速度を計算しようとしましたが、これをresolve2関数を使用してローカルフレームに変換しようとしましたが、der(...)行を追加するとモデルが正しく機能しませんでした- (OpenModelica を使用して) 「正常に」シミュレートされますが、v11b ベクトル (以下を参照) はすべてゼロになるため、プロット プロットに表示される der(frame_a.r_0) になります。それだけでなく、他のすべてのコンポーネントの動作も単純になりました。常にゼロ - (本体の frame_a.r_0、w_a など)。

    model Aerosurf
      extends Modelica.Mechanics.MultiBody.Interfaces.PartialOneFrame_a;
      import Modelica.Mechanics.MultiBody.Frames;
      import Modelica.SIunits;
      //Real[3] v11b;
      SIunits.Velocity v11b[3];
    //initial equation
    //  v11b={0.0,0.0,0.0};
    algorithm
      //v11b:=der(frame_a.r_0);
    equation 
      v11b=der(frame_a.r_0);
      frame_a.f = {0.0,0.0,0.0};
      frame_a.t = {0.0,0.0,0.0};
    end Aerosurf;

速度を単純に計算するためだけにいくつかの方法を試しました(コメント行からわかります)ので、正しい動作を確認するためにプロットできましたが、役に立ちませんでした。私はアルゴリズムまたは方程式のアプローチを使用しました-さまざまなアプローチでいくつかの異なる(ただし誤った動作も)達成しました。

任意のヒント?ここで基本的な何かが欠けているに違いありません.フレームコンポーネントは本質的に速度ベクトルを持っていないようですので、計算する必要がありますか??

4

1 に答える 1

2

最も簡単な方法はModelica.Mechanics.MultiBody.Sensors.AbsoluteVelocity、MSLのブロックを使用して、それをMBフレームに接続してから、方程式で出力コネクタの変数を使用することです。

于 2012-09-07T15:38:49.727 に答える