Tagebuch von Spargel

最近zennに移行しましたhttps://zenn.dev/spargel

simulinkとコマンドラインの連携

本ページの内容

 - simulinkで作成したモデルのパラメータをコマンドライン(他.mファイル,.mlxファイル)で変更する
 - simulinkコマンドラインから実行する
 - 実行結果をプロットする.

simulink周りの関数

matlabにはsimulinkを操作する関数があります.詳しくは公式ドキュメントを参照.
Simulink - MATLAB & Simulink - MathWorks 日本

また,コマンドラインからの実行方法もこちらに載っています.
jp.mathworks.com

というわけで,本記事ではパラメータ変更方法と実行結果の処理をメインに書いていきます.

simulinkモデルの作成から実行結果プロットまで

今回,下の図のようなモデルを対象にしてみます.正弦波のゲインを変えて出力する単純なモデルです.
f:id:Spargel:20180823172217p:plain

パラメータの変更

コマンドラインでパラメータを変更するには,ブロックのパラメータを変数名にしてコマンドラインで変数の値を指定するだけです.
正確には,ブロックがワークスペース上の変数を読み取るようです.
ではやってみます.
先程のモデルにおいてゲインブロックをダブルクリックし,Gainパラメータのところをlambdaと指定します.
f:id:Spargel:20180823172743p:plain
そしてコマンドライン上でlambdaの値を指定するだけです(今回はlambda = 2としました).
f:id:Spargel:20180823172938p:plain
これでブロックのゲインの値も2となります.(表示はlambdaのままですが,中身が2となっています.)

モデルの実行

モデルを保存します.今回はmodel_sin.slxとして保存しました.
コマンドライン上で
sim('model_sin')
を実行すればsimulinkモデルが実行されます.このときのシミュレーション時間は,simulinkで指定されている時間となります.

実行結果をプロットする.

それでは結果をプロットしていきます.パラメータの変更からモデル実行までをコマンドラインで行えるメリットは,パラメータを少しずつ変更しながらシミュレーション実行を自動化できることです.
結果を見るだけならSCOPEブロックでもいいのですが,それだと上のメリットがなくなります.

今回,実行結果の取得にはData Inspector を使用します.
Data Inspector については後日記事を書こうと思いますが,過去の実行結果を保持して比較できるので結構便利です.

それでは使っていきます.
先程のブロックにたいし,線の上で右クリックし,`` Log Selected Signals''をクリックします.
f:id:Spargel:20180823174219p:plain
すると,選択した信号の上にWi-Fiマークのようなものが表示されます.
これで,この線の信号を取得出来ます.

試しに実行してみます.実行後にWi-Fiマークをダブルクリックすると,実行結果がプロットされます.
lambda = 3として再度実行し,再度マークをクリックしてみてください.
そうすると,先程のプロットに追加で今実行した結果がプロットできます.
また,右の枠でプロットする信号を選択することも出来ます.便利です.
f:id:Spargel:20180823174740p:plain

そしてこの実行結果はワークスペース上に``logsout''として存在します.
この結果をプロットするには,``plot(logsout{1}.Values)''とすればできます.logsout{1}.Valuesは,ワークスペース上のlogsoutをダブルクリックして開き,画像のようにダブルクリックして行けばたどり着けます.
f:id:Spargel:20180823180042p:plain

では,for文を用いてパラメータを変えながら実行してみましょう.
今回はlambdaの値を1~3まで1ずつ変えながら実行します.
f:id:Spargel:20180823180414p:plain
実行結果は以下のようになります.
f:id:Spargel:20180823180336p:plain

以上.