GAIO CLUB

2004年07月02日

 MATLAB/Simulink モデルとマイコンシミュレータを連動仮想メカモデルをマイコンシミュレータで制御する

GAIO CLUB 特集
GAIO CLUB【2004/7月号】
MATLAB/Simulink モデルとマイコンシミュレータを連動
仮想メカモデルをマイコンシミュレータで制御する
~ MATLABモデル資産を利用して機械制御ソフトを検証する ~

MATLAB/Simulinkとは

MATLAB/SimulinkはMathWorks社のツール製品で、科学技術計算のための数値計算、データ解析、ビジュアライゼーション、そしてプログラミング機能を統合した環境です。組み込みの分野では、制御系設計にこのツールが使用されており、例えば、自動車のABSシステムのコントローラ設計や、航空機のフライトコントロールソフトウェアのアルゴリズム開発など利用されています。

MATLABは、制御対象となるハードウエアを、論理ブロック、数値演算ブロックを用いてモデル化が可能なツールで、これを制御するコントローラも含めて、制御系モデル全体の動作検証を仮想的に行うことができます。試作の難しい大型ハードウエアに対しては、特に有効な開発手段です。

機械系の仮想モデルとして組み込みソフト開発に利用

メカ制御系のコントローラのアルゴリズム設計についても、MATLAB上で行うことが可能です。しかしながら、これは、アルゴリズムをモデリングしたに過ぎず、実際のMPUで実行可能なソフトウエアの実装ではありません。
ガイオのシミュレータソリューションの1つである「MATLAB/Simulink連動システムシミュレータ」は、MATLABで作成された制御系モデルのコントローラ部分に、実際のMPUを適用してシステム動作検証が可能な検証環境です。

ガイオマイコンシミュレータとMATLAB/Simulinkを接続

ガイオは、MATLAB上で動作するシステムシミュレータとのインタフェースブロックを提供しています。このブロックをMATLABのハードウエアモデルとコントローラ(マイコンシミュレータ)との接続部に挟むことで、Windows上で別プロセスとして動作するマイコンシミュレータと接続することができます。

MATLAB/Simulink とマイコンシミュレータの連動のための情報共有は、プロセス間通信を使用しています。以下のブロックライブラリが提供されています。

CONNECTOR
マイコンシミュレータとの接続を行う

GET_MEM_DATA
マイコンシミュレータ(ターゲットCPU)のメモリマップ上にある任意のアドレスが指す内容を取得する

PUT_MEM_DATA
マイコンシミュレータ(ターゲットCPU)のメモリマップ上にある任意のアドレスが指す内容を変更する

INTERRUPT_OUT
マイコンシミュレータ(ターゲットCPU)に対して、指定された割込みタイプの割込みイベントを通知する

下図は、MALTABブロックがマイコンシミュレータのメモリモデルからデータを読み取るためのインタフェースです。
  • では、このソースコードのelse部分が無い場合はどうでしょう。C0カバレッジの要件である「全てのコードの実行」を行うには、if文にTRUEを設定した場合(→A→B→)だけ試せば良いことになります。C0の基準では、このif文を実行せず、下に通過してしまう実行経路(→B→)はテストの対象から外れることになります。このように、コード全体を試した上で、考えられる全ての実行経路を試すものが、C1カバレッジに当たります。

GET_MEM_DATA インタフェース仕様

1. hostinfo : ホスト情報ホストマシンの情報を設定します
現在のバージョンでは、必ずDEFAULTと設定して下さい。

2. sample_time :サンプル時間
マイコンシミュレータからデータを読み出す時間間隔を指定します。
デフォルト値(’-1’)の場合、本ブロック接続先のサンプル時間が使用されます。

3. address : アドレス
データを読み出すメモリアドレスを、マイコンシミュレータ(ターゲットCPU)の絶対アドレスで指定します。
(例)MEM::1000H → メモリアドレスの1000番地からデータを読み出します

4. access_size : アクセスサイズ
メモリにアクセスするときのサイズをロケーションサイズで指定します。
指定可能な値は、1、2、4、8のいずれかです。

5. data_type : データタイプ
データを読み出す際の型を指定します。
但し、4のアクセスサイズと一致する必要があります。

マイコンからのi/oポートによる制御は、このブロックを通じて行われます。これらのブロックライブラリにより、MATLABからマイコンシミュレータのメモリ空間へ、いつでもアクセスすることができます。

2つのプロセスの同期

マイコンシミュレータとMATLAB/Simulinkは、Windows上で別のプロセスとして動作します。MATLAB上のハードウエア動作とマイコンシミュレータ上のソフトウエア実行は、お互いに独立した時間を持って非同期に実行されており、これらを同じ時間軸に同期して連係動作させる必要があります。

これを行うために、MATLABにリンクして実行する同期のための関数ライブラリを提供しています。MATLABの動作モデルは、定期的に同期関数「XSP_Sysnc_Execute()」を呼び出し、マイコンシミュレータ側にMATLAB上での実行経過時間を通知するようにします。マイコンシミュレータは、通知されたMATLAB時間とマイコン側の時間を比較して、MATLAB側で経過した時間分のインストラクションを実行します。実行を終えると、MATLAB側に制御を戻します。

同期処理の時間精度は、XSP_Sysnc_Execute()関数を呼び出す時間間隔に依存しており、短時間にするほど、時間制度を上げることができます。ただし、同期回数が多くなると、そのトレードオフとして、シミュレーション実行スピードが不利になります。

パワーウインドウ制御モデルへの適用サンプル

下図は、MATLAB/Simulink で作成したパワーウインドウ機構モデルを、マイコンシミュレータで制御するサンプルです。このモデルでは、運転席側のup/downスイッチ(driver_switch)をマイコンのi/oポートに接続し、マイコンのソフトウエアによって制御した結果を、i/oポートを通じて、パワーウインドウの制御システム(power_window_control_system)に接続しています。

また、ウインドウを閉める際の挟み込み防止のトリガーとして、割り込みを「detector」ブロックからマイコンシミュレータへ通知しています。これらの動作は、MATLABファミリのシムメカニクスによって、アニメーション化しています。

人気のコラム

最新のコラム