データ インターフェイスの構成
Embedded Coder® では、モデルでのデータ要素および関数のカテゴリに既定の構成を指定して、データと関数インターフェイスの設定に必要な作業を減らすことができます。既定の構成を適用すると、大きいモデルや、マルチインスタンス コードの生成に使用するモデルの場合は特に、時間が節約でき、コードのエラーの発生リスクを抑えることができます。既定の構成を適用した後、選択的にデータ要素および関数の既定の設定をオーバーライドすることもできます。
次を実行するように関数 RollAxisAutopilot_step
を構成して、モデル RollAxisAutopilot
のデータ インターフェイスをカスタマイズします。
外部ファイル
roll_input_data.h
およびroll_input_data.c
で宣言および定義されているグローバル変数から入力データを読み込みます。コード ジェネレーターによって
output_data.h
で宣言され、output_data.c
で定義されているグローバル変数に出力データを書き込みます。
変更を行うには、これらの外部コード ファイルを現在の MATLAB® 作業フォルダーで使用します。
roll_input_data.c
roll_input_data.h
roll_heading_mode.c
roll_heading_mode.h
実行するデータ インターフェイス構成の変更は、コード生成やビルド プロセスでこれらのファイルにアクセス可能かどうかによって異なります。ビルド プロセスでは、これらのファイル内のコードで生成されたコードをコンパイルします。
データの既定のコード生成の設定
既定のコード生成の構成をモデルの入力端子と出力端子用に設定します。
[C コード] タブで、[コード インターフェイス] 、 [既定のコード マッピング] を選択します。
モデルのルート レベルの Inport ブロックを外部コードで定義された別個のグローバル変数として生成コードに表示するように設定します。コード マッピング エディターの [Inports and Outports] でカテゴリ [Inports] を選択します。既定のストレージ クラスを
[ImportFromFile]
に設定します。この設定を使用すると、生成コードで、入力端子データを表すグローバル変数が定義されません。代わりに、
#include
ステートメントには、入力変数を宣言するヘッダー ファイルが含まれます。プロパティ インスペクターでヘッダー ファイルの名前を指定します。アイコンをクリックして、[HeaderFile] を
roll_input_data.h
に設定します。外部ヘッダー ファイル
roll_input_data.h
のextern
宣言での入力変数の名前の付け方を確認するには、MATLAB コマンド ウィンドウで、現在の作業フォルダーにあるroll_input_data.h
を開きます。extern boolean_T AP_Eng; extern real32_T HDG_Ref; extern real32_T Rate_FB; extern real32_T Phi; extern real32_T Psi; extern real32_T TAS; extern real32_T Turn_Knob;
グローバル変数のコード生成命名規則を設定します。既定では、コード ジェネレーターは、接頭字
rt
を使用してグローバル変数に名前を付けます。コード ジェネレーターで、roll_input_data.h
の外部変数宣言と一致するコードを生成するには、それに合わせてグローバル変数用にコード生成の命名規則を設定します。[モデル コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。ツールストリップで、[C コード] タブの [設定] をクリックします。
[コード生成] 、 [識別子] ペインに移動します。
パラメーター [グローバル変数] を命名規則
$N$M
(rt
接頭字を削除します) に設定します。トークン$N
は、モデル内のデータ要素の名前 (たとえば、Inport ブロックまたは Outport ブロックの名前) を表します。トークン$M
は、コード内の他のグローバル シンボルとの名前の競合を回避するためにコード ジェネレーターで必要に応じて挿入される名前マングリング テキストを表します。変更を適用します。
モデルのルート レベルの Outport ブロックを別個のグローバル変数として生成コードに表示するように設定します。コード マッピング エディターの [Data Defaults] タブを使用して、カテゴリ [出力端子] の場合は、[ストレージ クラス] を
[ExportToFile]
に設定します。生成されたコードでは、プロパティ インスペクターを使用して指定したヘッダー ファイルと定義ファイルで出力端子変数が宣言および定義されます。
アイコンをクリックして、[HeaderFile] を
roll_output_data.h
に設定し、[DefinitionFile] をroll_output_data.c
に設定します。外部ソース ファイル
roll_input_data.c
およびroll_heading_mode.c
を含めて、モデルのコード生成を設定します。[コンフィギュレーション パラメーター] ダイアログ ボックスで、[コード生成] 、 [カスタム コード] 、 [コード情報] 、 [ソース ファイル] をroll_input_data.c roll_heading_mode.c
に設定します。次に、[適用] をクリックし、[OK] をクリックします。モデルを保存します。[ビルド] ボタンをクリックしてコードを再生成します。
コンパイラ エラーには、変数
HDG_Mode
が宣言されていないことが示されます。その変数は、入力端子の既定のヘッダー ファイルとして宣言したヘッダー ファイルroll_input_data.h
で宣言されていません。このエラーは、このチュートリアルの次のセクションで修正します。モデルは、コード生成が完了した後にコード生成レポートを開くよう設定されています。このチュートリアルの後半で調査するこのレポート ウィンドウを最小化します。
Inport ブロックは、外部ヘッダー ファイルを使用して入力変数を宣言および定義するよう設定しました。コード ビューで、生成されたコードにこの外部ヘッダー ファイルが含まれているか、
roll_input_data.h
を検索して確認します。ルート レベルの Inport ブロック名
HDG_Ref
を検索します。入力時に、緑色のV
アイコンを使用して検索の提案を選択します。この検索の提案では、生成されたコードで変数として使用されるHDG_Ref
のインスタンスが検索されます。HDG_Ref
が別個のグローバル変数として定義されているか確認します。モデル
RollAxisAutopilot
の Outport ブロックAil_Cmd
をクリックします。ブロックの上の省略記号メニューの上にカーソルを置き、[コードに移動] をクリックします。コード ビューで、ブロックに対応するRollAxisAutopilot.c
内のコードが強調表示されます。コードで、出力変数Ail_Cmd
にカーソルを合わせます。[トレーサビリティ] ダイアログ ボックスには、変数定義が表示されます。このダイアログ ボックスでは、Ail_Cmd
が別個のグローバル変数として定義されているか確認できます。定義コードをクリックすると、roll_output_data.c
に定義が表示されます。
個別データ要素の既定の設定のオーバーライド
[Data Defaults] でカテゴリに対して選択した設定は、モデルのそのカテゴリ内の要素に適用されます。個別のデータ要素の既定の設定をオーバーライドするには、コード マッピング エディターを使用します。
入力端子と出力端子の既定の設定を構成した後にコードを生成すると、コンパイラ エラーに HDG_Mode
が宣言されていないことが示されていました。このエラーは、Inport ブロック HDG_Mode
の既定の構成をオーバーライドして修正できます。
コード マッピング エディターの [Inports] タブで、ソース
HDG_Mode
を選択します。[ストレージ クラス] を
[ImportFromFile]
に設定します。アイコンをクリックし、[識別子] を
HDG_Mode
に設定し、[ヘッダー ファイル] をroll_heading_mode.h
に設定します。これらの設定に基づいて、コード ジェネレーターではヘッダー ファイル
roll_heading_mode.h
から外部変数HDG_Mode
の宣言がインポートされます。extern boolean_T HDG_Mode;
モデルを保存し、コードを再生成します。
このチュートリアルの後半で調査するコード生成レポート ウィンドウは最小化します。
コード ビューで、
roll_heading_mode.h
を検索し、それが既定の構成ファイルroll_input_data.h
で生成されたコードに含まれているか確認します。HDG_Mode
を検索し、それが別個のグローバル変数として定義されていることを確認します。
次に、モデル パラメーターが生成されたコードでグローバル変数になるよう設定します。グローバル変数として、パラメーター値を実行時に調整できます。