dSPACEとsimulinkとの連動

## 概要
本記事では、dSPACE ControlDesk用のSimulinkセッティングについて解説します．
MATLABのダウンロード，Simulinkのsdfファイルをビルドするところまでが対象です．
[前回のControlDeskインストール記事](https://qiita.com/3084LAB/items/0233e51fb36330a3245f)の続きです．
## 手順
### 1. MATLABインストール
使用するdSPACEのリリースにあったバージョンのMATLAB[1][2]をインストールしてください．
Release 2019-Bの場合はMATLAB R2018a ~ R2019bまでが互換性があります．
[1] dSPACE, "RCP and HIL Software Release 2019-B", https://www.dspace.com/ja/jpn/home/support/supvers/supverssfc/rls2019b.cfm
[2] dSPACE, "Information about dSPACE Releases", https://www.dspace.com/ja/jpn/home/support/supvers/rlsinfo.cfm#179_37496

インストール時に必要な製品は，以下の3つです．
- MATLAB
- Simulink
- Simulink Coder

### 2. MATLAB起動
**1. MATLAB初回起動**
MATLABを初回起動すると以下の画面が出現するので，MicroLabBoxの場合ds1202を選択してください．
他のdSPACEボードを使用しない場合はチェックボックスにチェックを入れると次のMATLAB起動からポップアップしなくなります．

※MATLABを起動してもdSPACE関連の情報が出てこない場合、以下を疑いましょう．
- そもそも関連ソフトウェアがインストールされていない
- dSPACE Installation ManagerでMATLABとの紐づけがされていない

[3] dSPACE, "既存のdSPACEインストレーションセットでアクティブなMATLABインストレーションを変更する"
https://www.dspace.com/shared/support/faqpdf/faq266jp.pdf

![11_simulink1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/fc3557fd-b36b-a275-900f-13dca604272c.png)

**2. 注意事項の確認
その後，次のウィンドウがポップアップします．
画面下までスクロールしてAcceptボタンを押してください．
<img width="50%" alt="12_simulink2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/afbdc087-7aa5-3433-f91a-420fef4d7d25.png">
さらに，次のウィンドウもポップアップしますがOKで大丈夫です．
<img width="50% alt="13_simulink3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/b3841c95-7315-e05e-8371-cab2645c64f7.png">
するとMATLABのコマンドウィンドウは以下のようなウィンドウになります．
※なお，Simulink CoderをMATLABインストール時にチェック入れ忘れたので，本画像ではWARNINGが出ています．（アドオンから後でインストールしました）
![13_simulink3_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/0c87579f-32c5-3c10-3185-b051e70abede.png)
↓問題ない場合
![27_simulink_check_path.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/c49f436a-28a5-b1d5-ddf0-5065dd2fb879.png)

### 3. Simulink

**1. Simulink起動**
ホームタブ -> Simulinkを押すと以下の画面が出現するので，マイテンプレートのRTI1202を選択してください．
※テンプレートの項目がないとき用の方法が2つほどあるので後日綴ります．
![14_simulink4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/e4266363-92b7-ed70-15e2-9cb45ca6d798.png)

**2. ライブラリ確認**
一度Simulinkモデルファイル(.slx)を保存してください．
ビルド後の生成ファイル名が大文字が小文字になるので，ファイル名は小文字と記号だけにしたほうがいいです．

新規フォルダ内を作成して保存するのがおすすめです．
Simulink起動後シミュレーションタブ -> ライブラリブラウザーをクリック．
すると下の方にdSPACEと名のついた項目があります．
ここから探していくのは大変なので，検索欄でDACやらADCやらencoder,digitalやらやら打てばそれっぽいブロックがヒットします．
<img width="50%" alt="15_simulink_browser.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/5fda5a61-9d42-3612-04fd-527142634136.png">

**2. ADCブロックの追加**
ライブラリブラウザでDACと検索すると以下のような画面になります．
主に使うのはADC_CLASS1_BL1というブロックです．これはMicroLabBoxのトップパネルのAI1 ch1~ch24までのポートに対応しています．
ADC_CLASS2_BL1は対応しているサンプリング周波数などが違うAI2 ch1~ch8を使う場合に対応しています．
<img width="50%" alt="22_simulink_browser3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/d8d21735-e71e-19d0-db5a-7bb873ad59c4.png">
ドラッグ＆ドロップしてモデルに追加後，ADCブロックをダブルクリックすると以下のようなチャンネルを選択できるウィンドウがポップアップします．対応するチャンネルを選択してOKで閉じてください．
<img width="50%" alt="23_simulink_adc_property.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/91fb867f-6024-8aff-59b9-5dd619f2c935.png">

**3. DACブロックの追加**
ADCブロックと同様にライブラリブラウザでDACと検索すると以下のような画面になります．
DACに関しては1種類のみでDAC_CLASS1_BL1というブロックを使います．
<img width="50%" alt="21_simulink_browser2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/fe3bdc4b-dcd0-d5af-1397-2c4263feb235.png">
DACブロックはチャンネル番号の他にチャンネルの個数を選択できる項目があります．
基本的には1のままで問題ありません．
<img width="50%" alt="24_simulink_dac_property.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/7b7a869d-4897-a410-78f2-a70a18e548b2.png">
1つのブロック内にDACを複数ポートまとめることができるので，
例えば，3自由度のロボットの3つのアクチュエータを制御する場合などはこのように省スペース化できます．
![25_simulink_DAC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/32d41dcc-e9e6-e7c8-eb78-cdb55a420705.png)

**4. モデル設定**
"モデル化"タブ -> "モデル設定"(歯車マーク)をクリックし，
左の項目のソルバー -> ソルバーの詳細を展開するとこのような画面になります．
この固定ステップサイズというのがサンプリング時間です．
デフォルトでは0.001[s]つまり1000[Hz]で設定されているので必要に応じて変更してください．
![26_simulink_configure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/be753165-25fc-f6c9-2088-3298ba5b7b4f.png)


**4. 信号の接続**
一度以下のようにDAC/ADCブロックに信号を接続してください．
ゲインの10倍,1/10倍はdSPACEのプラットフォーム内では電圧が1/10オーダーで扱われるので，それに対応させてために必須のブロックです．
![22_simulink_forgot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/4b857835-b11b-7103-7613-eda2fe63a0ff.png)


**5. モデルのビルド**
モデルが完成したら，`Ctrl+B`キーでビルドを行います．

しかし，ここでよくやるミスが3つあります．

- MATLABの作業パスの変更し忘れ
初回はMATLABを起動しテンプレートからモデルを生成しているので，MATLAB.exeのあるフォルダが作業パスになっています．
そのためパスを保存したフォルダに変更してからビルドしてください．

- dSPACEプラットフォームの電源を入れ忘れ
LANケーブルで接続し，電源を入れた後少し待ってからビルドしてください．

- ControlDeskをGo Online状態のままビルド
Go Offlineでオフライン状態にしてからビルドしましょう．

ビルドを開始すると画面左下に"ビルド中"という表記が出現し，下部中央にある"診断の表示"をクリックするとビルド状況が確認できます．
![28_simulink_build.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/a2351f65-7a9f-77dd-8cf9-1af006d6722b.png)

何もエラーが出現せずに終わればビルド成功なのでsimulinkの作業は完了です．
slxのあるフォルダに以下のようなファイルが生成されます．
![29_simulink_output_files.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/375a9a59-3c21-3610-983e-4bc7732bb85b.png)

※エラー集も後日まとめます．

## 注意点

- **ハードウェアの接続確認**
  - dSPACEハードウェアとPC、その他の周辺機器が正しく接続されていることを事前に確認してください．

- **ソフトウェアバージョンの整合性**
  - MATLAB、Simulink、dSPACEソフトウェア（ControlDeskなど）のバージョンが互換性を持っていることを確認してください．

- **リアルタイム設定の確認**
  - モデルのサンプリング時間やタスク設定がリアルタイム実行に適していることを確認してください．