ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

モデルの理解

この例では動作と構造の観点からモデルを説明します。例ではコード生成のためのモデルの構成方法およびコード生成の方法も説明します。

所要時間: 30 分

目的

  • モデルの機能的な動作を理解する

  • モデルの検証方法を理解する

  • モデル チェック ツールに精通する

  • コード生成に影響するコンフィギュレーション オプションに精通する

  • モデルからコードを生成する方法を学習する

モデルの機能設計の理解

この例では、スロットル コントローラーの単純であっても機能としては完全なモデルを使用します。このモデルは冗長性を特徴としていますが、安全を最重要視するドライブ バイ ワイヤ アプリケーションには一般的です。このモデルでは、アルゴリズム設計の標準的なモデル構造と基本ブロックのセットが強調されています。

現在の設定では、このモデルはコードを生成します。しかし、このコードは量産ターゲット システム用には設定されていません。この例では、ターゲット構成の変更に必要な手順を学習し、生成したコードの形式が各タスクの完了と共に変化していく様子を説明します。

最上位モデルの表示

タスク: モデルを開きます。タスク: モデルを開きます。

最上位モデルの構成は以下のとおりです。

  • 4 つのサブシステム (PI_ctrl_1PI_ctrl_2Define_Throt_ParamPos_Command_Arbitration)

  • 最上位入力 (pos_rqstfbk_1fbk_2)

  • 最上位出力 (pos_cmd_onepos_cmd_twoThrotComm)

  • 信号の経路指定

  • 変形させないブロック (Sum ブロックや Integrator ブロックのように信号の値を変化させるブロック)

レイアウトは基本モデルの構成スタイルを示します。

  • 信号の経路指定操作から計算を分離 (ラインとバス)

  • サブシステムへ分割

このスタイルを、すべてのタイプのモデルに適用することができます。

サブシステムの表示

2 つのサブシステムは、PI コントローラーの PI_ctrl_1PI_ctrl_2 を表しています。このサブシステムは同一のもので、この段階では同じデータを使用しています。後でこのサブシステムを使用して Simulink Coder™ が再利用可能な関数を作成するプロセスを学習します。

PI コントローラーは、関連するブロックまたはモデルの再利用を目的とするグループである、"ライブラリ" からモデルに追加されます。モデルの追加と再利用には 2 つの方法がありますが、ライブラリはそのうちの 1 つを提供します。もう 1 つの方法であるモデル参照については後で説明します。モデルのコンテキスト内でライブラリからモデルに追加したブロックは編集できません。ブロックの編集はライブラリ内で行います。これにより、異なるモデル間でもブロックのインスタンスが同一になることが保証されます。

タスク: サブシステム PI_ctrl_1 を開きます。タスク: サブシステム PI_ctrl_1 を開きます。

Stateflow ダイアグラムは 2 つのコマンド信号の基本エラー チェックを行います。コマンド信号が離れすぎている場合、Stateflow ダイアグラムは出力を fail_safe 位置に設定します。

タスク: Pos_Command_Arbitration を開きますタスク: Pos_Command_Arbitration を開きます

コード生成のための設定オプションの表示

コード生成のためのモデルを準備する最初のステップとして、モデル コンフィギュレーション パラメーターを設定します。コンフィギュレーション パラメーターは Simulink Coder™ がコードと結果の形式を生成するために使用する手法を決定します。

コード生成の目的関数

オプションで、モデル コンフィギュレーション パラメーターを手動で設定することができます。また定義済みの目的関数のセットもあり、これを使用すればモデル コンフィギュレーション パラメーターを自動設定することができます。

次の 6 つの高度なコード生成目的関数は、モデル コンフィギュレーション パラメーターを自動設定するために使用できます。

  • 実行効率性

  • ROM 効率性

  • RAM 効率性

  • トレーサビリティ

  • 安全対策

  • デバッグ

各コード生成目的関数は、モデル コンフィギュレーション パラメーターを目的関数の推奨値を基準にしてチェックします。各目的関数に含まれるコード生成アドバイザー チェックを使用して、モデル コンフィギュレーション パラメーターが目的関数に一致するコードを生成するように設定されていることを検証できます。

コード生成目的関数は、コンフィギュレーション パラメーターの推奨値とコード生成アドバイザー チェックのセットに関して相互に排他的な場合もあります。目的関数が競合する場合は、選択の順序が目的関数の優先度を決定します。優先度の高い目的関数を確実に満たしてから、優先度の低いものを満たして、競合を解決するメカニズムがあります。

以下の例の優先順位は、[実行効率性]、[ROM 効率性]、[RAM 効率性] です。ダイアログ ボックスを開くには [コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[コード生成] ペインを選択し、[目的の設定] をクリックします。

コード生成アドバイザーを実行するよう選択して、指定した目的関数に基づいてモデルをチェックすることができます。コード生成アドバイザーを起動するには [コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成] ペインの [モデルのチェック] をクリックします。

コード生成アドバイザーのチェック リストは、選択した目的関数に基づいて動的に作成されます。最初のチェックでコンフィギュレーション パラメーターの現在値がレビューされ、目的関数に基づいて代替値が提案されます。チェックにより、コンフィギュレーション パラメーターが自動的に推奨値に設定されます。

手動設定オプション

以下の節では、次のモデル コンフィギュレーション オプションの節を学習します。

  • ソルバー

  • 最適化

  • ハードウェア実行

  • Simulink Coder™

ソルバー

タスク: [ソルバー] ペインを開きます。タスク: [ソルバー] ペインを開きます。

Simulink Coder™ でモデルのコードを生成するには固定ステップ ソルバーを使用するようにモデルを構成しなければなりません。開始時刻と終了時刻は生成されるコードに影響を与えません。

Parameter                               Required Setting                           Effect on Code
Start time                              Any                                        No effect
Stop time                               Any                                        No effect
Type                                    Fixed-step                                 Code is not generated unless fixed step
Solver                                  Any                                        Controls selected integration algorithms
Sample time                             Lowest common multiple of rates in system  Sets base rate of system
Tasking mode for periodic sample times  SingleTasking or MultiTasking              MultiTasking generates entry point function for each rate in system

最適化

タスク: [最適化] ペインを開きます。タスク: [最適化] ペインを開きます。

[最適化] ペインは 5 つのサブセクションで構成されます。

  • [シミュレーションとコード生成] - 使用されていない分岐をコードから削除し、一時変数の作成を制御する

  • [信号] - 複数回の演算を一度の演算に縮約し、一時変数を再利用して、作成される一時変数の数を減らす

  • [データの初期化] - 明示的な初期化コードをもつ信号を制御する

  • [整数と固定小数点] - オーバーフローとゼロ除算の保護コードを有効または無効にする

  • [Stateflow] - Stateflow のビット情報の保存方法を制御する

ハードウェア実行

タスク: [ハードウェア実行] ペインを開きます。タスク: [ハードウェア実行] ペインを開きます。

ハードウェア実行パラメーターを使用して、ターゲット ハードウェアのワード サイズとバイト順を指定します。この例では、一般的な 32 ビット プロセッサをターゲットにします。

Simulink Coder™

タスク: [コード生成] ペインを開きます。タスク: [コード生成] ペインを開きます。

[コード生成] ペインはシステム ターゲット ファイル (STF) を指定した場所にあります。この例では、Embedded Coder STF (ert.tlc) を使用します。この STF を拡張して、カスタマイズした設定を作成することができます。[コード生成] ペインから到達できる基本設定オプションの中には次のものがあります。

1. Selection of the code generator target
  • ert.tlc - "Base" Embedded Coder

  • grt.tlc - "Base" Generic Real-Time Target

  • ハードウェア固有のターゲット

2. Selected make file
3. Code formatting options
  • 行の長さ

  • かっこの使用

  • ヘッダー ファイル情報

  • 変数命名規則

4. Inclusion of custom code
  • C ファイル

  • H ファイル

  • オブジェクト ファイル

  • ディレクトリ パス

5. Generation of ASAP2 files

MATLAB 関数としてコンフィギュレーション パラメーターを保存

コンフィギュレーション パラメーターの値はコマンド ラインから MATLAB 関数として保存できます。

  1. hCs = getActiveConfigSet('rtwdemo_PCG_Eval_P1');

  2. hCs.saveAs('ConfiguredData');

保存された MATLAB 関数は、コンフィギュレーション パラメーター オブジェクトのテキスト表現です。アーカイブや、従来の差分ツールを使用して異なるバージョンのファイルを比較するときに使用できます。テキスト形式のため、視覚的な判断が容易になります。

保存された MATLAB 関数を実行すると、他のモデルのコンフィギュレーション パラメーターが設定されます。

  1. hCs2 = ConfiguredData;

  2. attachConfigSet('myModel', hCs2, true);

  3. setActiveConfigSet('myModel', hCs2.Name);

シミュレーション テスト環境の理解

「テスト ハーネス」という名前の別のモデルでスロットル コントローラーのモデルをテストします。テスト ハーネスは制御アルゴリズムを評価するモデルです。テスト ハーネスには次のような利点があります。

  • テスト データを制御アルゴリズムから切り離す

  • プラント モデルまたはフィードバック モデルを制御アルゴリズムから切り離す

  • 制御アルゴリズム用の複数のバージョンで再利用可能な環境を提供する

タスク: テスト ハーネスを開きます。タスク: テスト ハーネスを開きます。

一般的なシミュレーション テスト環境は次の部分で構成されます。

  • テスト対象のユニット

  • テスト ベクトル ソース

  • 評価とログ

  • プラントまたはフィードバック システム

  • 入力と出力のスケーリング

タスク: テスト対象のユニットを強調表示します。タスク: テスト対象のユニットを強調表示します。

制御アルゴリズムは "テスト対象のユニット" です。モデル参照ブロックを使用して、制御アルゴリズムをテスト ハーネス内で参照します。モデル参照ブロックは、コンポーネントを再利用するためのもう 1 つの方法です。参照モデルは [モデル参照コンフィギュレーション パラメーター] ダイアログ ボックス内で選択します。

モデル参照ブロックを使用すると、"コンパイルされた関数" で他のモデルを最上位のモデルからインクルードすることができます。既定の設定では、Simulink は参照モデルが変更された場合にモデルをコンパイルします。コンパイルされた関数はライブラリに比べていくつかの利点があります。

  • 大きなモデルの場合にシミュレーション時間が速くなる。

  • コンパイルされた関数を直接シミュレーションできる。

  • シミュレーションに必要なメモリーが小さい。コンパイルされたモデルのコピーがメモリーにあれば、そのモデルが参照されている場合でも、繰り返し使用できる。

タスク: テスト ベクトル ソースを強調表示します。タスク: テスト ベクトル ソースを強調表示します。

このモデルはテスト ベクトル ソースに対して Simulink Signal Builder ブロックを使用します。そのブロックには、シミュレーション (pos_rqst) と検証サブシステムで使用する予想される結果を駆動するデータがあります。モデルでは 1 セットのテスト データだけを使用します。一般的には、システムを十分に評価するためのテスト セットを作成することもできます。

タスク: 検証を強調表示します。タスク: 検証を強調表示します。

テスト ハーネスはシミュレーション結果を "ゴールデン データ" と比較します。ゴールデン データとは、エキスパートによりモデルに望ましい動作として認証されているテスト結果です。このモデルでは、V&V Assertion ブロックがプラントのスロットル位置のシミュレーション結果をテスト ハーネスが提供するゴールデン値と比較します。2 つの信号の差が 5% 以上の場合、テストは失敗であり、Assertion ブロックはシミュレーションを中止します。

別の方法として、シミュレーションの実行が終了した後でシミュレーション データを評価することもできます。この評価には、MATLAB ファイル スクリプトまたはサードパーティのツールを使用することができます。実行後の評価はデータの解析において大きな柔軟性があります。ただし、実行が終了するのを待つ必要があります。これら 2 つの方法を組み合わせれば、非常に柔軟で効率のよいテスト環境を得ることができます。

タスク: プラント/フィードバック システムを強調表示します。タスク: プラント/フィードバック システムを強調表示します。

スロットルのダイナミックスは正準形式に分類される伝達関数でモデル化されます。プラント モデルは忠実度 (現実への近さ) を任意レベルでモデル化できるよう作成できます。異なるプラント モデルを異なる段階のテストに使用することは珍しいことではありません。

タスク: スケーリングされた入力と出力を強調表示します。タスク: スケーリングされた入力と出力を強調表示します。

入力と出力をスケーリングするサブシステムは 3 つの基本関数を実行します。

  • テスト対象のユニットとプラントに送る信号を選択する

  • エンジニアリング ユニットとテスト対象のユニットに必要な単位との間で信号の再スケーリングを行う

  • プラントとテスト対象のユニットの間においてレート変換を行う

シミュレーション テストの実行

[開始] または次のタスク リンクをクリックして、テスト ハーネス モデル シミュレーションを実行します。

タスク: テスト ハーネスを実行します。タスク: テスト ハーネスを実行します。

はじめてテスト ハーネスを実行する場合は、その参照モデルがコンパイルされていなければなりません。MATLAB のコマンド ウィンドウでコンパイルの進行状況を監視できます。

モデルのシミュレーションが終了すると、Simulink はプロット ウィンドウに結果を表示します。

右下のプロット図は期待される (ゴールデン) スロットルの位置とプラントで計算されたスロットルの位置の差を示しています。両者の差が +/- 0.05 以上なら、シミュレーションは停止したはずです。

モデルのコード生成

次の方法のいずれか、または以下のタスク リンクを使用して、モデルのコードを生成します。

  • モデル内で Ctrl+B を押す。

  • [コンフィギュレーション パラメーター]、[コード生成]、[コード生成] を選択する。

  • [コード]、[C/C++ コード]、[モデルのビルド] を選択する。

タスク: モデルのコードを生成します。タスク: モデルのコードを生成します。

Simulink Coder™ はいくつかのファイルを生成します。結果コードは計算面では効率的ですが、量産環境に統合できるほどにはまとまっていません。

生成したコードの検査

コード生成プロセスでは複数のファイルが作成されますが、それらはモデル エクスプローラーで表示できます。標準の C ファイルと H ファイルの他に、HTML ファイルも生成されます。HTML ファイルはコードとモデル間のアクティブなリンクになります。

メモ: ファイルを表示する前にコードを生成しなければなりません。

タスク: モデル エクスプローラーで HTML コード ブラウザーを開きます。タスク: モデル エクスプローラーで HTML コード ブラウザーを開きます。

生成したコードでは次のことに注意してください。

  • すべてのコントローラー コードは ModelName_step という名前の関数に含まれており、ファイル rtwdemo_PCG_Eval_P1.c 内にあります。

  • 複数ブロックの操作は 1 つの方程式に縮約されています。

  • 変数は関数 ModelName_initialize 内で初期化されます。

  • すべてのデータは Simulink Coder™ データ構造 (たとえば rtwdemo_PCG_Eval_P1_U.pos_rqst) を使用して定義します。

より高度な学習トピック

この情報は役に立ちましたか?