モデルベース開発概観
まず始めに、モデルベース開発の全体像について、大まかにご説明します。
MATLAB/Simulinkによるモデルベース開発というと、「アルゴリズム開発」「仕様書作成」「実装」「HILS」の4つが思い浮かびます。これらは各ツールベンダーがさかんにアピールしているので、展示会に行けば関連ツールが見られると思います。
アルゴリズム開発(ラピッドプロトタイピング)
こちらは主に車両メーカーさん側の話になると思います。制御アルゴリズムをどうしたら良いのか?を決める際、計算だけでどうにかなるわけではありません。やはり制御対象を実際に動かしてみて、初めて分かる部分もあります。
ではどうやって実際に動かすか?ですが、ECUを使うという方法も考えられます。ECUに、C言語で書いた制御アルゴリズムを載せて制御対象と接続します。そうして動かしてみて、動作が気に入らなければC言語のコードを修正します。この方法のメリットは、C言語で書いてあるため省リソース性(メモリ容量などなど)が高いという点です。
一方、リアルタイムシミュレータを使うという方法もあります。リアルタイムシミュレータとは、Simulinkモデルをリアルタイムに動かすための装置です。大概は、PCか、ちょっと大きめの組み込み用マイコンに各種I/Oを付けます。かなり贅沢なリソースなので、このままECU化する事は出来ません。その代わりのメリットとして、制御アルゴリズムの実装が比較的楽に行えます。また、Simulinkモデルの動作状態を楽にモニタできます。たとえば、特定の変数をリアルタイムにグラフ表示して、何が起きているかを観測する、といった事が行えます。
さて、ECUを使う場合とリアルタイムシミュレータを使う場合、どちらも一長一短あります。ですが、「アルゴリズム開発」という目的に限って言えば、圧倒的にリアルタイムシミュレータの方が有利です。そもそも制御アルゴリズムの開発だけが目的なので、それをどういうマイコンでどう動かすか、どうやって省リソース化(=低コスト化)を達成するかは、部品メーカーさんにお願いする仕事です。
そういったわけで、制御アルゴリズム開発にはリアルタイムシミュレータを使用する場合が多々あります。
仕様書作成、実装
ECUは、車両メーカーさんで仕様を決めて、それをうけた部品メーカーさんで実装を行います。その際、「システムはこう動いてほしい」と記述する必要があります。
これをする方法の1つは、日本語で仕様を記述する事です。日本語ドキュメントや、スプレッドシートなどを利用してECUの振る舞いを記述します。この方法ですと仕様を書く側は比較的楽なのですが、どうしても曖昧性が残ります。その結果、頻繁に仕様の確認を行う必要があります。
もう1つの方法が、SimulinkモデルでECUの振る舞いを書いてしまう事です。要するに、仕様書を書く代わりに、Simulinkを使って実装してしまえ、というようなイメージです。当然、これを作るのは結構大変です。その代わり出来てしまえば、色々とメリットがあります。まず、Simulinkモデルは実行できますので、「本当にこの仕様でお願いしていいのか?」を事前に検証できます。さらに、日本語とくらべて曖昧性が減るため、無用な誤解を減らす事ができます。
さて、Simulinkによる仕様書が完成したとします。ではこれを自動コード生成(Simuilnkモデルから自動的にC言語に変換すること)すれば、部品メーカーさんの仕事は終わりなのか?というと、決してそうではありません。このモデルはあくまで「振る舞い」を記述したものにすぎません。ECU側のハードウェアから来る制約を考慮して作られたものではないのです。そのため、この「振る舞い」を満たし、なおかつハードウェア的な制約を満たすようなソフトウェアを作成する必要があります。
仕様モデルから、C言語を使って実装を行う場合もあるようです。また、仕様モデルとは別に「実装モデル」を作成し、そのモデルをハードウェアの制約にあうよう作りこんでいく場合もあるようです。「実装モデル」が完成したら、自動コード生成を行います。自動コード生成によって、Simulinkモデルから自動的にC言語コードが生成されます。(現在、自動コード生成を行ってくれるツールは2種類あります。)
HILS
HILSについては、次回以降詳しく取り上げていく予定です。