matlabが欲しい。でもお金がない。pythonで制御をやろう。でもプログラムベースだと全然わからん。そんな状況の改善に向けてScilabのシミュレーションブロックベースでの検証を考える。
しかし、scilabではmatlabと違って無料な分ちょっとわかりにくい操作方法がある。
ということで今回は、シミュレーションブロックを作るたびにパラメータ設定したり、グラフ描画の設定をいちいちいじるのは面倒なので、必要最低限のファイルをあらかじめ作っておこうと思う。
Plant Parameterの初期設定
まず、Scilabを導入したらコンソール画面が開くはず。
ここで、アプリケーションタブからSciNotesを選択して開く。
すると下の画像のように真っ白なウィンドウが出てくる。
ここに必要になるパラメータ設定、プラントや制御ゲイン等を定義して実行する。
パラメータを設定して実行すると下画像の右側に示すようにワークスペース上にパラメータが反映される。これで準備OK。
Xcosによるシミュレーションブロックの作成
同様に今度はアプリケーションタブからXcosを選択してシミュレーションブロック用のウィンドウを開く。
使い方は各自操作して覚えるしかないので、とりあえず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; //凡例フォントサイズ
というわけで、実際に描画したものがこちら↓
結構いい感じになっていると思います。0.1秒付近を拡大して表示するようにすれば目標値応答波形も拡大できますが、今回は外乱応答も含めてこんな感じに載せました。
上記ファイルを使えば今後も自由に描画が可能になるので良かったです。
今後必要に応じてここら辺の機能は拡張していきたい。
まとめ
今回はシミュレーションパラメータ設定からグラフ描画まで簡単に設定する方法をやってみました。
このほかにも例えば、
があるので、そういったものも一括でできるように改良を加えていきたい。
特に、制御の研究となると、安定性の解析、パラメータ変動等様々な比較検討を行う必要が出てくるのでそういった要素を作っておけるといいかなと思います。
次は実際に設計した制御系をまとめておきたいと思う。