scilabの紹介

Motor_MILS scilab

※ 2014年12月に執筆したものを転載

はじめに

今回はscilabの紹介をします。
こいつはオープンソースの数値計算システム。

紹介といっても、scilabの本来の数値解析の機能にはほぼ(全く?)触れません。
scilabの中にxcosというブロック線図を扱えるツールが入っており
こっちの話がメインとなります。

Matlabを知ってる人であれば、Simulink相当の機能といえば分かると思います。
ただ、Simulinkほど高機能ではないです。
片や無償、片や1ライセンス(年間?)数百万クラスのツールなので、同等であっては困るのですが。

尚、本サイトでは、Scilabに関連する記事を比較的多く書いています。

scilab
「scilab」の記事一覧です。

モーターモデリング例

積分、微分、伝達関数などのブロックがあるので、
それらを組み合わせて、モータープラントモデル&それのコントローラモデルなんてもの割と簡単に組めます。
とりあえず、昔こさえたモーターMILS & 動作波形↓

PIDコントローラ、モータプラント、Scilab、MILS、Model In the Loop System
シミュレーション結果、モーター、PID、制御モデル、プラントモデル、角速度、角移動量、指示電圧

指令器の指示値に追従してるのでいい感じです。
こんな感じシミュレーションできます。

SILSモデリング例

ここから少し特殊な使い方を書きます。

xcosのブロックの中にCBlockというものがあり、
ブロック線図の中にC言語コードを埋め込むことができます。
こいつを利用して、先ほどのPIDコントローラのC言語版を埋め込みます。
とりあえず、PIDコントローラのコードを作成。

Scilab、CBlock、PIDコントローラ、MILS

各定数はPIDコントローラの内部に埋め込んでいたのですが、
今回は外から入力に変えてます。

動作波形比較

シミュレーション結果、ブロック線図版、Cコード版、角速度、角移動量、指示電圧

こんな感じで、モデルとコードの振る舞いの比較なんかにも利用できます。

とはいえ、今回作成したコード。ちょっと問題有りなんですよね。
double型を使用してしまっているのです。
シミュレーション上はPCでやってるのでdoubleでも全然問題ないのですが、
このコードを実機に組み込む場合は大問題になります。
64bit-FPU搭載のCPUを使用しているならば大丈夫なのですが、
そんなハイスペックなCPUは望むべくも無く、
64bit-FPUが無い場合は超高負荷なsoft-float(64bit)ライブラリを呼ぶことになります。
そんなの呼ばれた日には、負荷問題一直線。

固定小数点化例

というわけで、
整数型ベースに書き直す必要があります。
今回は一律で1LSBを2^-10にしたものをやっつけ作成しました。

Scilab、PIDコントローラ、MILS、C言語、固定小数点化

そして、ちゃんと動きそうかをシミュレーション。

固定小数点化、ブロック線図版、Cコード版、角速度、角移動量、指示電圧

各定数、変数の精度が落ちたので、当然ながらやや振動しちゃってます。
とはいえ、制御としては問題なさそーです。
本来は各定数、変数の取りうる範囲、制御速度を考えて、LSBやら型のサイズやらを決定するのですが、
まぁ今回はこの感じで良いでしょう。

まとめ

  • ブロック線図ベースでコントローラ、プラント(制御対象)のモデルを作成してシミュレーション可能。
  • ブロック線図の一部をCコードに差し替えて、問題無いか確認する。
  • さらに実機搭載予定のCコードに差し替えて実機でも行けるの?ってのを確認する。

ってことができます。

Simulink様だと、コントローラモデルからコード生成なんてのもできるんで・・・。
やはり世の中金か。

コメント

タイトルとURLをコピーしました