2

Modelica.Mechanics.Translational.Components.MassWithStopAndFriction のハード ストップについて質問があります。私が理解できるように、質量は間隔(smin、smax)の外に移動するべきではありませんが、実際には、ここに含める私の例ではそうです:

model ActuatorMechanics 
  Modelica.Mechanics.Translational.Sources.Force force; 
  Modelica.Mechanics.Translational.Components.MassWithStopAndFriction mass(m=1,F_prop=0,F_Coulomb=10, smax=0.1, smin=0, L=0.01); 
  Modelica.Mechanics.Translational.Components.Spring spring(c=1000); 
  Modelica.Mechanics.Translational.Components.Fixed fixed; 
  Modelica.Mechanics.Translational.Sensors.PositionSensor sens_pos; 
equation 
  connect(force.flange, mass.flange_a); 
  connect(mass.flange_b, spring.flange_a); 
  connect(spring.flange_b, fixed.flange); 
  connect(sens_pos.flange, mass.flange_a); 
  force.f = 100; 
end ActuatorMechanics; 

simulate(ActuatorMechanics)
plot(mass.flange_a.s)

私は何か間違ったことをしていますか?

4

2 に答える 2

3

これはOpenModelicaのバグでした。r11060以降動作しており、回帰テストが追加されています。

于 2012-02-09T16:54:18.373 に答える
2

これは実際には OpenModelica 開発者に対する質問なので、そのうちの 1 人がここに来て答えてくれることを願っています。

モデルで何が起こっているかについて少し背景を説明すると、質量が停止すると、別の状態に切り替わり、質量がゼロの加速度 (速度ではない) に拘束され、必要な反力が計算されます。その制約を保持します。

この複雑さは、ほとんどの場合、OpenModelica (および、すべてではないにしてもほとんどの他の Modelica ツール) が可変インデックス DAE を処理するのが難しいという事実によるものです。ここでの秘訣は、質量がその機械的限界に達するポイントを検出し、reinit を使用して速度をゼロに設定してから、前述の加速なしの制約を適用することです。

これはすべて、状態である速度に依存します。このコンポーネントを使用して、速度がシステム上で規定される (したがって状態ではない) システムを定式化することができます。この場合、reinit は効果がありません。しかし、その時点で特異な方程式系が得られるのではないかと思います(機械的限界に達すると、質量の加速度に対して本質的に2つの方程式が得られるため)。ですから、あなたがそれらの限界を超えた動きを見ていることに驚いています。

別の可能性としては、質量が機械的限界の外で動き始め、どういうわけか別の (拘束された) 方程式への切り替えが行われない可能性があります。

繰り返しますが、これは OpenModelica 開発者にとって本当に重要な問題です。そのようなモデルで問題が発生する可能性があることについて、いくつかの洞察を提供しようとしています。そのような洞察があなたの質問に答えるのに特に役に立たないことは認めますが。

この質問が表示されない可能性があるため、OpenModelica 開発者にも連絡することをお勧めします (ここで StackOverflow に投稿することに加えて)。

幸運を。

于 2012-02-03T16:48:57.567 に答える