前回から Scilab/XCOSを練習してます。XCOSはブロック線図などを描いてシミュレーションできる強力なツールです。しかし操作はちょいとクセ強です。とくにブロック間の配線、慣れないと思うような線にならないので、短気で怒りっぽくなっている老人はイライラします。上手くできない自分が悪いんだけれども。
※「ブロックを積みながら」投稿順 index はこちら
※動作確認にはWindows 11のパソコン(64bit)上にインストールしたScilabの以下バージョンを使用しています。
Scilab 2024.0.0
※何年か前からXCOS使わせていただいておりますが、たまに使うだけなので、毎回配線のやりかたに戸惑います。以下は勝手に会得した自己流の描き方です。もしかするともっと良い方法があるのかも。
ブロック間の接続、1対1は簡単
ブロックをおいて、入出力の「ポート」を接続するのは1対1であれば簡単です。
-
- 出力ポート上でマウスの左ボタンを押し、押したまま相手先の入力ポートまでドラッグしていって離す。
上記の手順で「直線」でポート間を接続することができます。ただポート位置が水平あるいは垂直に対面しているのでない場合は、途中の障害物など無視した斜め線となります。まあ、これでもシミュレーションできるっちゃできるハズですが、込み入ってくると何処と何処が接続されているのか分かりずらいです。そしてブロック線図であれば
縦横キッチリした線で接続したい
という気持ちが湧いてきます。サガだな。その場合も1対1であれば比較的容易です。
-
- 出力ポート上でマウスの左ボタンを押し、押したままドラッグし、線を折り曲げたい場所まで水平(もしくは垂直)線を伸ばす、折り曲げたい位置で左ボタンを一端離すと「角」を作れるので、その後は「角」の位置毎にクリックしながら行先の入力ポートまで接続していき、最後入力ポートをクリックすれば完成。
1対1はね、直観的に操作できるし、なんも面倒なこともないっす。
ブロック間の接続、複数行先になるとなかなか上手くいかん
しかし、ブロック線図を描いていたら、同じ信号を複数個所に接続したくなることが多いです。上記のように描いた1対1の接続から配線を引き出して第2、第3などの入力ポートに接続することが出来るのですが、そのやり方、縦横の線で接続しようとするととてもクセが強いです。以下はその手順の概略。
-
- 出力ポートをクリック。まずは1対1接続のためにドラッグ。
- 第1の入力ポートまでドラッグしてボタンを離します。
- 1対1接続が完成
- 完成した1対1接続の配線上で再度ボタンを押すと接続線を引き出すことができます。ただし、どこを押そうと接続線はターゲット配線の「中央部」付近から出てくるみたい(そのクセを理解して最初の配線の配置もシンプルにしておくのが小技っす。形を整えるのは後回し。)マウスをドラッグしている間、マウスに追従して斜め線が現れるのでともかく接続先の第2のポートに接続してしまいます。この際「綺麗にカクカクと接続したく」なりますが、そうすると失敗して元も子もなくなることが多いです(個人の感想です。)まずは斜めでもなんでもポート間を接続してしまうっと。
- 斜め線で接続できた様子です。
- 斜め線の途中をダブルクリックするとそこに「角」を作れます。
- 角を示す緑のマーカは、ドラッグ可能なので、所望の位置までずらします。当然線も追従してくるので、縦横所望の位置に設置可能。必要なだけダブルクリックして角を作り所望の位置にずらすという操作を繰り返します。
- 操作が終わった状態です。信号の分配点にはオレンジのマーカが現れます。
こんな感じで描いてます。
実践
以下の別シリーズで練習した微分方程式をXCOSでシミュレーションしてみます。
忘却の微分方程式(32) 常微分方程式を解く その1、MathematicaとMaxima
地球表面における自由落下とな。高さ y を微分すると落下速度 v 。落下速度 v を微分すると重力加速度 g (gを正にとった場合。)
上記を素直にXCOSで描いたものが以下です。なおコマケー話ですが Y(t) は上向き正にとり、重力加速度 g はマイナスの値としてます。赤丸つけてあるところが先ほどの「配線手順」で信号を分岐させたところです。
まずは小ネタ。重力加速度 g は文字変数で定義したかったので、メニューの「コンテキスト設定」から以下のように実際の値を定義してあります。
上記で定義してあるので、定数ブロックでは以下のように変数名で指定可能です。
V(t)のグラフが以下に。x軸の時間とともに速度は線形に下降。空気抵抗ないからね。
一方、自由落下する物体の高さY(t)は時間とともに2次関数で落ちる。ちなみに初期高さは634mとな。どこかで聞いた高さだな。
約11秒とちょっとで地面に激突。まあ、空気抵抗なしのときだけれども。