制御工学博士の日常+備忘録

ようやく制御工学で博士を手に入れたので真っ当な人間になるべく研究以外の事とか色々と備忘録的にやっていく。そんな感じ

scilabでシミュレーションするための楽になる設定

matlabが欲しい。でもお金がない。pythonで制御をやろう。でもプログラムベースだと全然わからん。そんな状況の改善に向けてScilabのシミュレーションブロックベースでの検証を考える。

 

しかし、scilabではmatlabと違って無料な分ちょっとわかりにくい操作方法がある。
ということで今回は、シミュレーションブロックを作るたびにパラメータ設定したり、グラフ描画の設定をいちいちいじるのは面倒なので、必要最低限のファイルをあらかじめ作っておこうと思う。

 

Plant Parameterの初期設定

まず、Scilabを導入したらコンソール画面が開くはず。

ここで、アプリケーションタブからSciNotesを選択して開く。

f:id:kwaz6:20210710012246p:plain

 

すると下の画像のように真っ白なウィンドウが出てくる。

ここに必要になるパラメータ設定、プラントや制御ゲイン等を定義して実行する。

 

f:id:kwaz6:20210710012233p:plain

 

パラメータを設定して実行すると下画像の右側に示すようにワークスペース上にパラメータが反映される。これで準備OK。

f:id:kwaz6:20210710012539p:plain

 

Xcosによるシミュレーションブロックの作成

同様に今度はアプリケーションタブからXcosを選択してシミュレーションブロック用のウィンドウを開く。

 

f:id:kwaz6:20210710012249p:plain

 

使い方は各自操作して覚えるしかないので、とりあえずPI速度制御系を作成してみた。

そちらの完成図を下に示す。

f:id:kwaz6:20210710012222p:plain

PI速度制御系のシミュレーションブロック

 

ここで、スコープとは別に 「To Workspace」ブロックがあるが、これはグラフ描画で使用するので置いている。

 

シミュレーション波形の描画

ということでシミュレーション波形をスコープ上で自由に観測できるようになっているわけだが、グラフの編集が面倒である。

そこで、パラメータ設定と同様にグラフプロット用のsceファイルを作って一括でやってしまうことにする。

 

実際に作ったsceファイルがこちら。

 

// プロット関数
// Xcosでシミュレーションした情報をto workspaceブロック経由でグラフ描画するファイル
data1 = MotVel;  //ここに観測したいデータを入れる
data2 = MotVelCMD;  //ここに観測したいデータを入れる

fontsize = 5;   //フォントサイズ設定
linewidth = 3;  //線の太さ
axd = gca(); //axd = get("current_axes");でも可。gcaは省略形

plot(data1.time, data1.values,'g-', data2.time, data2.values, 'k--', 'thickness', linewidth);
hl=legend(['Response';'Command']);  //凡例の描画
hl.font_size = fontsize;    //凡例のフォントサイズ
xlabel("Time [s]", "fontsize", fontsize);   //X軸タイトル
ylabel("Motor-side velocity [rad/s]", "fontsize", fontsize); //Y軸タイトル

axd.font_size = fontsize;  //メモリフォントサイズ
axd.grid=[1,1]; //gridの設定と色指定。-1はグリッド無。1は黒

axd.labels_font_size = fontsize; //凡例フォントサイズ

 

というわけで、実際に描画したものがこちら↓

f:id:kwaz6:20210710012218p:plain

PI速度制御系の応答波形

 

結構いい感じになっていると思います。0.1秒付近を拡大して表示するようにすれば目標値応答波形も拡大できますが、今回は外乱応答も含めてこんな感じに載せました。

上記ファイルを使えば今後も自由に描画が可能になるので良かったです。

 

今後必要に応じてここら辺の機能は拡張していきたい。

 

まとめ

今回はシミュレーションパラメータ設定からグラフ描画まで簡単に設定する方法をやってみました。

このほかにも例えば、

  • シミュレーションファイルを実行するコマンド
  • sceファイルを利用したサブ関数(matlabmatlab functionのようなもの)
  • Bode diagram, Nyquist等々

があるので、そういったものも一括でできるように改良を加えていきたい。

特に、制御の研究となると、安定性の解析、パラメータ変動等様々な比較検討を行う必要が出てくるのでそういった要素を作っておけるといいかなと思います。

 

次は実際に設計した制御系をまとめておきたいと思う。