私は 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;
速度を単純に計算するためだけにいくつかの方法を試しました(コメント行からわかります)ので、正しい動作を確認するためにプロットできましたが、役に立ちませんでした。私はアルゴリズムまたは方程式のアプローチを使用しました-さまざまなアプローチでいくつかの異なる(ただし誤った動作も)達成しました。
任意のヒント?ここで基本的な何かが欠けているに違いありません.フレームコンポーネントは本質的に速度ベクトルを持っていないようですので、計算する必要がありますか??