Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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

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

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

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

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

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

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

モデル例 ConfigurationRapidPrototypingInterface を開きます。

open_system('ConfigurationRapidPrototypingInterface')

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

set_param('ConfigurationRapidPrototypingInterface','HideAutomaticNames','off')

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

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

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

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

既定のストレージ クラスの構成

Inport ブロックおよび Outport ブロックについての既定のストレージ クラスを構成し、次に、指定された既定のものを使用するブロックを選択します。

  1. Simulink Coder アプリを開きます。

  2. [C コード] タブで、[コード インターフェイス]、[既定のコード マッピング] を選択します。

  3. コード マッピング エディターの [Inports and Outports] の下で、[入力端子] および [出力端子] の両方について、既定のストレージ クラスを ExportedGlobal に設定します。

  4. 次に、[入力端子] タブで、その既定のストレージ クラスを使用する必要のあるデータ項目を選択します。Ctrl を押しながら、それぞれの Inport をクリックします。

  5. 選択された Inport について、ストレージ クラスを Model default: ExportedGlobal に設定します。

  6. 同様に、[出力端子] タブで、Outport のストレージ クラスを Model default: ExportedGlobal に設定します。

または、コマンド プロンプトでデータの既定の設定を構成するため、次のコマンドを使用します。

cm = coder.mapping.api.get('ConfigurationRapidPrototypingInterface');
setDataDefault(cm,'Inports','StorageClass','ExportedGlobal');
setDataDefault(cm,'Outports','StorageClass','ExportedGlobal');

setInport(cm,'In1','StorageClass','Model default');
setInport(cm,'In2','StorageClass','Model default');
setInport(cm,'In3','StorageClass','Model default');
setInport(cm,'In4','StorageClass','Model default');

setOutport(cm,'Out1','StorageClass','Model default','Identifier','output_sig');

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

slbuild('ConfigurationRapidPrototypingInterface');
### Starting build procedure for: ConfigurationRapidPrototypingInterface
### Successful completion of code generation for: ConfigurationRapidPrototypingInterface

Build Summary

Top model targets built:

Model                                   Action           Rebuild Reason                                    
===========================================================================================================
ConfigurationRapidPrototypingInterface  Code generated.  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 11.281s

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

file = fullfile('ConfigurationRapidPrototypingInterface_grt_rtw','ConfigurationRapidPrototypingInterface.c');
coder.example.extractLines(file,'/* Data with Exported storage */','real_T output_sig;',1,1)
/* Data with Exported storage */
real_T input1;                         /* '<Root>/In1' */
real_T input2;                         /* '<Root>/In2' */
real_T input3;                         /* '<Root>/In3' */
real_T input4;                         /* '<Root>/In4' */
real_T output_sig;                     /* '<Root>/Out1' */

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

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

Inport および Outport に対して既定のストレージ クラスを構成したら、この既定の値をオーバーライドして一部のデータ要素に対して個別にストレージ クラスを設定するよう選択できます。たとえば、1 つの信号を複数の Outport ブロックに送信して異なるストレージ クラスを各 Outport に適用できます。たとえば、この手法を使用して信号データをカスタム関数 (デバイス ドライバーなど) およびカスタム アルゴリズム コードが使用できるグローバル変数に送信します。

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

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

  3. コード マッピング エディターの [出力端子] タブで、ストレージ クラス GetSet を 1 つの Outport ブロックに、ExportToFile を別の Outport ブロックに適用します。

  4. プロパティ インスペクターで、適用されたそれぞれのストレージ クラスに関連付けられたプロパティを構成します。

open_system('ex_route_sig')

制限

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

関連するトピック

参考

|