
千里の道も一歩より?ということで前回はOpenModelica付属のExampleの中から「等加速度直線運動」モデルを鑑賞。流石にお惚け老人もこれは分かるか。加速したらば減速するのが世の習い?とて、今回は「ブレーキ」をかけてみます。でも、ブレーキかける前にウインドウをドッキングしたいデス。どうしたら良いの?
※「ブロックを積みながら」投稿順 index はこちら
※動作確認にはWindows 11の パソコン(64bit)上にインストールした、The Open Source Modelica Consortium(OSMC)様の以下のバージョンを使用させていただいてます。(なお、ModelicaはModelica Association様の登録商標です。)
Openmodelica v.1.25.1 (Official Release版)
ウインドウ、フローティングとドッキング
訳もわからずOMEditを操作していたら、メッセージウインドウが「浮いて」しまってました。こんな感じ。
まあ、この状態にすると画面の任意の場所にウインドウを配置できるので、便利っちゃ便利ですが、OMEdit素人老人としては、別に意図して「フローティング」状態にしたわけじゃありません。元に戻して~
しばらく七転八倒したあげく、以下に気づきました。
-
- ドッキングしたいウインドウのタイトルバーをマウスボタンを押したままドラッグするとウインドウを動かすことができる
- OMEdit上の「ドッキング可能な部位」にくるとドッキング可能な「仮位置」とでもいうべき「枠」が表示される。手元バージョンの場合「水色」っぽい色だった。そこでマウスボタンを離せば、その位置にドッキングされる
- ドッキング済であろうと、なかろうと、該当ウインドウのタイトルバーを「掴んで」ドラックすればウインドウはフローティングになって動き始める。「仮位置」の表示ないところで「離せ」ばフローティングウインドウとなる
- なお、各種のウインドウの中でMessageウインドウの配置可能な場所は「ちょっと縛り」がキツいみたい。かなり下の方にドラッグしないと仮位置が現れない。画面からフローティング状態のウインドウがはみだすくらい下。
つまんないことだけれど、素人老人は戸惑うのであります。
ブレーキのExampleモデル
今回も並進運動の中であります。
2つの質量のそれぞれにブレーキがついていて制動できるみたい。そしてブレーキへの入力は「ステップ関数」波形で与えているみたい。シミュレーション開始後0.1秒後にキキッとブレーキ踏む感じみたいです。
なお、ブレーキのモデルは1次元ですが、クーロン摩擦的(純粋クーロン的よりちょい高等)によりブレーキがかかるようなモデルみたいです。忘却力の老人の理解したところが以下に。
-
- 摩擦力は垂直荷重に比例
- 動摩擦係数が滑り速度や場所に依存するような定義も可能、勿論一定も可
- 静止摩擦力は動摩擦力より大きい
標準ライブラリのHelpファイルをみると、2の動摩擦力(絶対速度vがノンゼロ)のときに適用される摩擦力は以下です。
frictional_force = cgeo * mu(v) * fn
ここで cgeo は形状定数(装置形状や摩擦分布を仮定して決める)、mu(v)は速度依存摩擦係数、fnは法線力です。
一方「3」の、絶対速度がゼロのときは、固着状態で絶対位置は変らず、摩擦力が閾値(最大静摩擦力)を超えると動くと。最大摩擦力の定義のために peak値と「倍率」みたいなものが定義されているみたい。
シミュレーション結果
0.1秒のところでステップ的にブレーキがかかる(青線)ので、緑線の速度はそこから等加速度的に低下、あるところで位置(赤線)停止してしまうと。
sとvは、初期値を変更できるので右側に入力欄がありますが、ブレーキに加える力のyはシミュレーションで計算される値で入力できないみたい。これを変更するためには、変更可能な、height、offset、startTimeを弄って再シミュレーションっと。確かに変更できたです。しかし、step関数で値2をブレーキの入力に突っ込んでいるのだけれど、ライブラリのドキュメントの以下の記述が引っかかります。以下引用です。
input signal f_normalized in a normalized form (0 ≤ f_normalized ≤ 1),
法線力fnは、fmax * f_normalized みたいに計算されるみたいなので、入力であるf_normalizedは0から1の間の値、と読めるのだけれど、上記のように2を入れても問題なく動作(特にエラーとかにはならないみたい。)勿論、0から1の値を入れ直してみても値を反映して動作OK。わざわざ f_normalizedとする意味は、fmaxと掛け算するから? 上のモデルでは fmax=1にしておいて、そのまま、f_normalizedに具体的な値を突っ込んでいる?ま、そんなもんだと思って計算するのは全然OKなんだが、なんだかなあ。




