Simulink のシミュレーション結果の表示の仕方まとめ

#Simulinkでのシミュレーション結果の仕方
　制御設計や物理シミュレーションでよく使われているSimulink。新しいバージョンがリリースされるごとに新機能が実装されていますが、その機能自体に気づかないこともあります。
　というわけで、この記事では、Simulinkを使うからには必ず行うであろうシミュレーション結果の可視化方法について、Simulinkの標準機能に絞ってまとめて紹介していきます。
　使い方を忘れてしまった時の備忘録として利用してください。
![Simulink_Viewers.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/181500a4-7bf6-6ef9-7592-0519c19dcf38.png)


## 目次
この記事では下記の機能を紹介します。各項目の[使用方法]で基本的な操作方法を紹介しています。気になる機能があれば展開して読んでみてください。

- [シミュレーションデータインスペクター][1]
- [Scope ブロック][2]
- [XY Graph ブロック][3]
- [スコープビューワー / Floating Scope ブロック][4]
- [Display ブロック][5]
- [To Workspace ブロック][6]
- [Dashboard ブロック][7]
- [値ラベル][8]

[1]: https://qiita.com/KattsuA/items/f5a4b678613089d6e90d#%E3%82%B7%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%87%E3%83%BC%E3%82%BF%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%9A%E3%82%AF%E3%82%BF%E3%83%BC
[2]: https://qiita.com/KattsuA/items/f5a4b678613089d6e90d#scope-%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF
[3]: https://qiita.com/KattsuA/items/f5a4b678613089d6e90d#xy-graph-%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF
[4]: https://qiita.com/KattsuA/items/f5a4b678613089d6e90d#%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97%E3%83%93%E3%83%A5%E3%83%BC%E3%83%AF%E3%83%BC--floating-scope-%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF
[5]: https://qiita.com/KattsuA/items/f5a4b678613089d6e90d#display-%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF
[6]: https://qiita.com/KattsuA/items/f5a4b678613089d6e90d#to-workspace-%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF
[7]: https://qiita.com/KattsuA/items/f5a4b678613089d6e90d#dashboard-%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA
[8]: https://qiita.com/KattsuA/items/f5a4b678613089d6e90d#%E5%80%A4%E3%83%A9%E3%83%99%E3%83%AB

##シミュレーションデータインスペクター
![Simulink_SDI.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/20d74b17-9438-d2fb-46db-15e7816d1f4e.png)
　Simulink上の任意の信号の可視化を行います。表示レイアウトの変更やカーソルの表示、MATファイルなどへの結果のエクスポートがGUI上で簡単に行えます。また、シミュレーション実行ごとに結果をアーカイブしてくれるので、それらを簡単に比較してくれるユーティリティを提供します。バージョンを重ねるごとに機能改善が進んでどんどん便利になっている、Simulinkのシミュレーション結果可視化機能の主役の一つです。

<details><summary>[使用方法]</summary><div>
![SDI_addBadge.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/1606d7af-ac93-fb69-8e90-196f08c85fb0.png)
　まず、測定したい信号をマウスで選択し、アクティブな状態にします。すると、マーキー(青色で表示されるアクションリスト)が現れるので、[データログを有効化]ボタン(アンテナみたいなマーク)を選択します。
![SDI_Badge.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/ff7c2ef0-8e6d-98c7-8cfc-895cd3c280a1.png)
　これにより信号のソースとなるブロックの出力ポートにアンテナ形のバッジが付与されます。これで設定は完了です。なお、Simulinkエディタ上部のツールストリップで[シミュレーション]タブ⇒[準備]⇒[信号のログ]をクリックしても同様の効果を得られます。
　この後、いつも通りシミュレーションを開始します。
![SDI_icon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/49fe7fbf-5c64-37b5-280e-b7e55bcce0af.png)
　測定が上手く行われると、ツールストリップの[シミュレーション]タブ⇒[結果の確認]にあるデータインスペクターのアイコンが白から黄色に変わります。
![SDI_selectSignal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/598ac19f-c4d5-cc66-0d32-04d2255e5268.png)
　アイコンをクリックするとデータインスペクター本体が起動します。見たい信号のチェックボックスをONにすれば、信号がプロットウィンドウに表示されます。ちなみに、モデル上に表示されたバッジを直接クリックしてもデータインスペクターの起動と信号のチェックボックスのONが同時に行われます。
![SDI_compare.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/b1ca22fc-a0c4-0d93-3d6f-4701349797a2.png)
　このデータインスペクターはシミュレーション結果の比較機能も提供します。パラメータを色々振ったりして複数個のシミュレーション結果がある場合、そこから注目したいシミュレーション結果を選んで比較が行えます。データインスペクター左上の[比較]ボタン(虫メガネのアイコン)をクリックし、ベースラインと比較対象として比較したい結果をそれぞれ選びます。指定後に比較ボタンを押すと、各結果に含まれる信号データごとに一致判定の結果を表示してくれます。プロット上段が結果をそのままプロットしたもの、プロット下段が両結果の差を表します。GUIの上部で時間軸および値軸での許容誤差も指定できるので色々試してみてください。
![SDI_compareResult.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/4166f5c0-3d9e-f34e-be5a-26993d574c7b.png)
</div>
</details>


##Scope ブロック
![Simulink_Scope.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/4a8438ed-7f65-0806-25b6-9213e9ffa03d.png)
　シミュレーション結果を時系列波形としてその場で表示してくれるSinksライブラリブロックの一つです。オシロスコープのような外観の通り、ピーク値の検出や平均値・RMSの表示などを画面上で表示してくれます。直感的な使用方法で利用者も多い、Simulinkの最も基本的なライブラリの一つです。一方で、測定したい信号と直接結線する必要があるため、大規模なモデルになってくるとScopeブロックだらけになったり配線作業が煩雑になりがちです。そのため、モデルの規模が大きくなってくると、信号の結線無しで測定できるデータインスペクター等の機能が使われることも多いです。

<details><summary>[使用方法]</summary><div>
　上のスクリーンショットにあるように、Simulink上の信号線をScopeブロックに直接接続することで可視化対象を指定します。信号線は複数入力が可能で、単独の信号線およびMuxブロックで束ねられた信号も接続ができます。ただし、異なるサンプル時間の信号を接続しようとするとエラーとなるケースがあるので注意が必要です。
![Scope_Config.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/3cb952a5-b140-a12d-e5ed-50a47d2b95f7.png)
　ダブルクリックすると可視化用ダイアログが立ち上がり、シミュレーション結果を確認できます。画面左上の歯車ボタンは設定ボタンで、入力信号の数や画面レイアウト、測定結果のMATLABのワークスペースへの保存の有無を指定できます。
![Scope_Cursor.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/20dbbcf9-fc5d-7d90-a687-ee7f6a5beee6.png)
　また、前述した通りオシロスコープのようにピーク値の検出や平均値・RMSの表示などを画面上で表示してくれるのがScopeブロックの特徴です。ダイアログ右側の定規のアイコンから表示したい項目を選ぶことで表示を設定することができます。
</div></details>

##XY Graph ブロック
![Simulink_XYGraph.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/99014fc9-775f-bb13-ac80-51e0f489d15f.png)
　いわゆるリサージュ図形を表示してくれるブロックです。通常のScopeブロックは時間軸に対する各信号のプロットですが、このブロックは入力した2つの信号をそれぞれx軸・y軸に割り当ててプロットしてくれます。

<details><summary>[使用方法]</summary><div>
　上のスクリーンショットにあるように測定対象となる信号をブロックに直接結線します。
![XY_Graph_Dialog.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/5384fd6e-dc43-3910-5684-ec0109237c52.png)
　ブロックをダブルクリックすると各軸の設定ができますので想定される信号のレンジを指定してください。設定完了後、通常通りシミュレーションを実行すると専用のプロットウィンドウが立ち上がり、波形を表示してくれます。
</div></details>

##スコープビューワー / Floating Scope ブロック
![Simulink_FloatingScope.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/81cec6fc-37cd-29c4-46e0-ef3aa71a3814.png)
　信号を結線しなくてもScopeブロックやXY Graphブロックと同じプロットが行える機能です。ただし、Floating Scope ブロックについては通常のScopeブロックのプロットのみです。ここではスコープビューワーの機能を紹介しますが、Floating Scopeブロックも同じ手順で測定対象となる信号の選択が行えます。

<details><summary>[使用方法]</summary><div>
![Viewer_launchManager.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/35cbed53-4d3a-73c5-0ebb-1bd44500e5cf.png)
　ツールストリップの[シミュレーション]タブ⇒[準備]にあるビューアマネージャーをクリックします。
![Viewer_Manager.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/791df257-aa31-4ebc-3ce5-8b03911b9336.png)
　クリックするとSimulinkエディタ右側にビューアーマネージャーが表示されます。ビューアーマネージャーにあるビューアーの追加ボタンを押すと、追加可能なビューアー（スコープ）がリストされるので、表示したいアイテムを選択します。
![Viewer_SelectSignal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/81974edf-b4a9-364c-ace6-c3136b88ef5c.png)
![Viewer_connectedSignal1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/0a0a9520-92c5-44bf-b42d-f48bceea6811.png)
　選択したビューアーはマネージャー上にリストされるので、次にこのアイテムに対して測定したい信号を割り当てます。信号の接続を変更するための青いフォークマークのボタンをクリックすると、モデルの背景がグレーになり、表示したい信号をモデル上で選択できるようになります。信号を選択すると、接続を決定するためのチェックボックスが表示されるので、このチェックをオンにします。これで信号とビューアーとの接続は完了です。接続された信号はビューアーマネージャー下部の[接続された信号]リストに表示されます。
　初期設定では信号は一つしか接続できませんが、ビューアーのプロットのレイアウトを増やすことで接続できる信号数を増やすことができます。設定は下記ボタンでビューアー本体を開いたのち、コンフィギュレーションプロパティ（歯車マークのボタン）のレイアウトボタンで変更が可能です。
![Viewer_OpenViewer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/b4e77455-bbf0-3c57-e732-5f9620e4056d.png)
![Viewer_Option.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/25c64156-abfe-87c4-17db-55be1c459aba.png)
　これにより接続可能な表示項目を増え、前述した信号選択時にアサインできる表示先も選べるようになります。
![Viewer_connectedSignals2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/82c00632-ff1d-b7d1-3131-fdf70049e40f.png)
![Viewer_selectPlot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/e822ecba-fc4e-a900-8fd3-23253321979c.png)
</div></details>


##Display ブロック
![Simulink_Display.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/f4e030bb-a56d-60f3-990b-8af1a1edda0a.png)
　波形ではなく数値としてシミュレーション結果を表示してくれるブロックです。昔からある基本ライブラリの一つで、Scopeブロックに並んでよく使われています。スカラデータだけでなく2次元配列もその場で可視化してくれるので、配列データの計算結果をひとまずチェックしたいときに便利です。ただし、瞬時値のみを表示するため、変化の激しい信号に対しては視認すること自体が難しいため不向きです。

<details><summary>[使用方法]</summary><div>
![Display_Dialog.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/7764e916-49d7-ca5d-f7e1-1569b8e86bfc.png)
　Scopeブロックと同じく信号線を直接接続して利用します。ダイアログでは数字の表示形式を指定できるので、必要に応じて表示精度を設定します。測定したい信号がスカラではなく行列の場合には、デフォルトのDisplayブロックの形・サイズでは表示しきれないので、あらかじめブロックのサイズを大きめにしておくとよいです。また「フローティング表示」のチェックをアクティブにすると、シミュレーション中にモデル上でユーザーがクリックした信号の演算結果を表示することができます。この場合信号の結線は不要です。
</div></details>


##To Workspace ブロック
![Simulink_ToWorkspace.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/8c755721-9762-f8e3-cbab-e2e956445df9.png)
　シミュレーション結果を時系列データとして直接MATLABワークスペースに展開します。この機能単体では直接可視化は行いませんが、ダイレクトにワークスペースに結果を展開してくれるので、シミュレーション後にMATLABで何らかの処理をしたい場合に有効です。似たブロックにTo File ブロックがありますが、こちらはワークスペースではなくMATファイルとして作業フォルダに実体ファイルを保存してくれます。操作方法はここで紹介するTo Workspace ブロックとほぼ同じです。

<details><summary>[使用方法]</summary><div>
![ToWS_Dialog.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/73c9b246-2361-f898-c20e-d040a86cf7c1.png)
　Scopeブロック同様に信号線をブロックに直接接続していきます。このブロックは入力ポートを増やせないので、Muxブロックで信号を束ねて入力します。ブロックをダブルクリックすると、ダイアログ立ち上がるので、そこで保存する際のデータの変数名・点数制限・間引きを指定できます。
![ToWS_Variable.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/277a31c3-4ae4-3da3-9f47-0d663a9b8172.png)
　シミュレーションを実行するとワークスペースにSimulation OutputオブジェクトOutが生成されます。ダブルクリックして中身を眺めてみると、指定した変数名で保存された測定結果本体とそのメタデータが格納されていることが分かります。このデータを使って任意の可視化やデータ解析を行っていくことになります。
</div></details>


##Dashboard ライブラリ
![Simulink_Dashboard.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/d7bb9a7e-7542-e04a-f6b5-33d64504a1c2.png)
 Simulinkモデル上に直接計器類やスイッチなどのインスツルメントを配置できるのがDashboardライブラリです。タコメーターやゲージ・グラフ・数値表示用ブロックで信号の可視化を行うことができます。スイッチやスライダーバーなどの操作アイテムと組み合わせることで、シミュレーションをインタラクティブに操作できる簡易的なGUIを構築することもできます。ここで選択された信号はシミュレーションデータインスペクターにも測定対象として自動的に登録されます。

<details><summary>[使用方法]</summary><div>
![Dashboard_library.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/62ac2c85-690a-b239-e86f-9c22fa14e42d.png)
　様々な測定用インスツルメントがありますが基本的な使用方法は共通です。まずはじめにDashboardライブラリから好きな測定用インスツルメントをモデル上にドラッグ＆ドロップします。ゲインの調整などで使えるパラメータ調整用インスツルメントもあるので用途を間違えないようにしてください。インスツルメントをダブルクリックするとダイアログが表示されるので、ダイアログを開いたままモデル上で測定したい信号をクリックやドラッグで選択します。
![Dashboard_selectSignal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/e257a229-c710-806a-e9c8-ea426e167d88.png)
　選択された信号がダイアログに表示されるので、測定したい信号のラジオボタンをONにします。これで信号とインスツルメントの関連付けは完了です。同ダイアログ上で必要に応じて表示レンジなどを調整したら設定は完了です。シミュレーション実行中に結果を可視化してくれます。
</div></details>


##値ラベル
![Simulink_Label.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/3552f80e-5603-308c-0112-32762b97efdc.png)
　黄色い枠で値が表示されているのが値ラベルです。シミュレーション中の瞬時値を表示する機能で、Displayブロックのフローティング表示モードに近い機能です。大きな違いは、値の表示がブロック上で行われずにモデル上の各ブロックの出力ポートのすぐ近くで行われる点です。特別なブロックを配置することなく手軽に可視化できるため、測定対象となる信号が多くなった場合でもモデルのレイアウトを崩さずに気軽に測定できるメリットがあります。アルゴリズムのデバッグ等に有効です。

<details><summary>[使用方法]</summary><div>
![Output_EnableOutput.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/48215a44-1a9d-daf1-b67f-f6cc7c34e30e.png)
　まず測定したい信号を選択します。その後Simulinkエディタ上部のツールストリップの[デバッグ]タブ⇒[ツール]から出力値の表示ボタンを押します。これで設定はおしまいです。シミュレーションを開始すると黄色いボックスに値が出力されます。
![Output_outputOption.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/839963/3ab909d1-2943-e89e-b9f2-ab3eb94748ea.png)
　上記のタブからは、この機能に関するオプションにもアクセスができます。信号線をクリックする度に値ラベルの表示のON/OFFを切り替えられるようにしたり、描画の更新速度を設定することができます。
</div></details>

#おわりに
　どうだったでしょうか？みなさんはいくつの機能を知っていましたか？今回はエントリーユーザーを想定してSimulinkエディタ上部にあるツールストリップからの操作をメインに紹介しましたが、測定対象としたい信号線を右クリックすることで表示されるコンテクストメニューからもショートカットして操作できる機能も多いです。ショートカットの活用で作業効率があがるかもしれませんので、慣れてきたら色々探してみてください。