Main Content

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

Inport ブロックと Outport ブロックの設定によるデータ インターフェイスの設計

モデルのデータ インターフェイスは、モデルが他の外部モデルまたはシステムとデータ (たとえば信号値) を交換する手段です。モデルのデータ インターフェイスをカスタマイズすることで、以下がもたらされます。

  • 生成されたコードと独自のコードの統合を有効化。

  • コードのトレーサビリティおよび可読性を向上。

モデルの最上位レベルでは、Inport ブロックと Outport ブロックは、モデルの入出力信号を表します。生成されたコードのデータ インターフェイスをカスタマイズするには、これらのブロックを設定します。設計プロセスの初期段階で、接続されていない Inport ブロックと Outport ブロックがモデルに含まれている場合、この手法を使用して内部アルゴリズムを開発する前にインターフェイスを指定します。

ストレージ クラスを Inport ブロックと Outport ブロックに適用する場合、各ブロックはグローバル構造体のフィールドとして、または生成されたアルゴリズムが直接参照する別個のグローバル変数として生成されたコードに表示されます。Embedded Coder をお持ちの方は、データを仮パラメーターとしてモデルの関数 step の入出力に渡すために、ストレージ クラスではなく関数プロトタイプ コントロールを使用できます。Configure C Code Generation for Model Entry-Point Functions (Embedded Coder)を参照してください。

データのインターフェイスの設計

モデル例 rtwdemo_basicsc を開きます。

open_system('rtwdemo_basicsc')

生成されたブロック名を表示するようにモデルを構成します。

set_param('rtwdemo_basicsc','HideAutomaticNames','off')

[モデル化] タブで [モデル データ エディター] をクリックします。

モデル データ エディターで、[入力端子/出力端子] タブを選択します。テーブルの各行は Outport ブロックまたは Inport ブロックから出る信号を表します。

Outport ブロック Out1 が表す信号データに名前を付けます。[信号名]output_sig に設定します。

Inport ブロックから出る各信号について、[データ型]single または別のデータ型に設定します。モデル内の他のブロックが既定で使用するデータ型の継承設定のため、モデルの残りの部分のダウンストリーム信号は同じまたは似たデータ型を使用します。

オプションで、[Min] および [Max] (最小および最大値) などのその他の設計属性を設定します。

[ビューの変更] ドロップダウン リストを Code に設定します。

Outport ブロックおよび Inport ブロックについて、[ストレージ クラス]ExportedGlobal に設定します。複数のブロックを 1 ステップで設定するには、表内の複数の行を選択します。

ブロックおよび信号を設定するために、次のコマンドをコマンド プロンプトで使用できます。

portHandles = get_param('rtwdemo_basicsc/In1','portHandles');
outPortHandle = portHandles.Outport;
set_param(outPortHandle,'StorageClass','ExportedGlobal');

portHandles = get_param('rtwdemo_basicsc/In2','portHandles');
outPortHandle = portHandles.Outport;
set_param(outPortHandle,'StorageClass','ExportedGlobal');

portHandles = get_param('rtwdemo_basicsc/In3','portHandles');
outPortHandle = portHandles.Outport;
set_param(outPortHandle,'StorageClass','ExportedGlobal');

portHandles = get_param('rtwdemo_basicsc/In4','portHandles');
outPortHandle = portHandles.Outport;
set_param(outPortHandle,'StorageClass','ExportedGlobal');

set_param('rtwdemo_basicsc/Out1','SignalName','output_sig',...
    'StorageClass','ExportedGlobal')

モデルからコードを生成します。

rtwbuild('rtwdemo_basicsc');
### Starting build procedure for: rtwdemo_basicsc
### Successful completion of build procedure for: rtwdemo_basicsc

生成されたファイル rtwdemo_basicsc.c を表示します。ストレージ クラス ExportedGlobal を Inport ブロックと Outport ブロックに適用したため、コードでは入力および出力を表すグローバル変数がそれぞれ作成されます。

file = fullfile('rtwdemo_basicsc_grt_rtw','rtwdemo_basicsc.c');
rtwdemodbtype(file,'/* Exported block signals */','real32_T output_sig;',1,1)
/* Exported block signals */
real32_T input1;                       /* '<Root>/In1' */
real32_T input2;                       /* '<Root>/In2' */
real32_T input3;                       /* '<Root>/In3' */
real32_T input4;                       /* '<Root>/In4' */
real32_T output_sig;                   /* '<Root>/Out1' */

モデルの関数 step の生成されたアルゴリズムは、これらのグローバル変数を直接参照して出力信号値 output_sig を計算して格納します。

モデル データ エディターを使用してシステムのインターフェイスを設定する際に、システム入出力 (Inport ブロックと Outport ブロック) を高水準で表示するために、このインターフェイス表示の使用を検討してください。コンポーネントのデータ インターフェイスの構成を参照してください。

既定のストレージ クラスを設定することによるデータの手動入力の削減 (Embedded Coder)

Embedded Coder がある場合、Inport ブロックと Outport ブロックに既定のストレージ クラスを設定できます。これらのブロックをモデルに追加すると、指定したストレージ クラスが取得されます。

モデルで、[コンフィギュレーション パラメーター]、[コード生成]、[システム ターゲット ファイル]ert.tlc に設定します。

アプリ ギャラリーで [Embedded Coder] をクリックします。

ブロック線図の下の [コード マッピング]、[データの既定の設定] で、[入力端子] 行と [出力端子] 行の [ストレージ クラス]ExportedGlobal に設定します。

ブロック線図の下で、[モデル データ エディター] タブをクリックしてモデル データ エディターを開きます。

モデル データ エディターを使用して、Inport ブロックと Outport ブロックのストレージ クラスを Auto に設定します。この設定により、ブロックは [コード マッピング]、[Data Defaults] で指定した既定のストレージ クラスを取得します。

Auto により、Inport ブロックと Outport ブロックに対応するグローバル変数に、モデル コンフィギュレーション パラメーターで指定する命名規則が適用されます。既定では、命名規則によってモデルの名前が各変数の名前に追加されます。モデル名を削除するには、[コンフィギュレーション パラメーター]、[コード生成]、[識別子]、[グローバル変数] で値を $R$N$M から $N$M に変更します。トークン $R はモデル名を表します。

または、データの既定の設定とコンフィギュレーション パラメーターを設定し、コマンド プロンプトで以下のコマンドを使用します。

set_param('rtwdemo_basicsc','SystemTargetFile','ert.tlc')

coder.mapping.create('rtwdemo_basicsc')
coder.mapping.defaults.set('rtwdemo_basicsc','Inports',...
    'StorageClass','ExportedGlobal')
coder.mapping.defaults.set('rtwdemo_basicsc','Outports',...
    'StorageClass','ExportedGlobal')

portHandles = get_param('rtwdemo_basicsc/In1','portHandles');
outPortHandle = portHandles.Outport;
set_param(outPortHandle,'StorageClass','Auto');

portHandles = get_param('rtwdemo_basicsc/In2','portHandles');
outPortHandle = portHandles.Outport;
set_param(outPortHandle,'StorageClass','Auto');

portHandles = get_param('rtwdemo_basicsc/In3','portHandles');
outPortHandle = portHandles.Outport;
set_param(outPortHandle,'StorageClass','Auto');

portHandles = get_param('rtwdemo_basicsc/In4','portHandles');
outPortHandle = portHandles.Outport;
set_param(outPortHandle,'StorageClass','Auto');

set_param('rtwdemo_basicsc/Out1','SignalName','output_sig',...
    'StorageClass','Auto')

set_param('rtwdemo_basicsc','CustomSymbolStrGlobalVar','$N$M')

信号データを複数の出力に送信

1 つの信号を複数の Outport ブロックに送信して異なるストレージ クラスを各 Outport に適用できます。たとえば、この手法を使用して信号データをカスタム関数 (デバイス ドライバーなど) およびカスタム アルゴリズム コードが使用できるグローバル変数に送信します。

  1. ターゲットの信号線を各 Outport ブロックに分岐させます。

  2. コードをより効率的にするため、ターゲットの信号線のストレージ クラスを Auto (既定の設定) に設定します。次に、最適化により生成されたコードから信号線が除去されます。

  3. モデル データ エディターを使用して、ストレージ クラス GetSet を 1 つの Outport ブロックに、ExportToFile を他の Outport ブロックに適用します。各ブロックに信号名を適用します。

open_system('ex_route_sig')

制限

Outport ブロックへの入力が可変サイズではない場合、ストレージ クラスをこの Outport ブロックに適用することはできません。代わりに、ストレージ クラスを信号線に適用します。

関連するトピック