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

Simulink.LookupTable クラス

パッケージ: Simulink
スーパークラス:

ルックアップ テーブルおよびブレークポイント データを格納および共有し、ASAP2 および AUTOSAR コードの生成用にデータを構成

説明

Simulink.LookupTable クラスのオブジェクトは、ルックアップ テーブルとブレークポイント データを格納します。このデータは、n-D Lookup Table ブロックなどのルックアップ テーブル ブロックで使用できます。このオブジェクトにより、テーブルおよびブレークポイント セットのデータ型とコード生成設定を指定できます。

すべてのテーブルおよびブレークポイント セットのデータを単一の Simulink.LookupTable オブジェクトに格納すると、生成されたコードですべてのデータが単一の構造体に表示されます。STD_AXIS コード生成をキャリブレーション用に構成するには、この手法を使用します。

たとえば COM_AXIS コードの生成など、複数のルックアップ テーブル間でブレークポイント セットを共有する場合、1 つ以上の Prelookup ブロックで Simulink.Breakpoint オブジェクトを使用します。Simulink.LookupTable オブジェクトを Interpolation Using Prelookup ブロックで使用します。次に、ルックアップ テーブル オブジェクトがブレークポイント オブジェクトを指すように構成します。詳細については、ルックアップ テーブルの共有ブレークポイントとテーブル データのパッケージ化を参照してください。

作成

LUTObj = Simulink.LookupTable は、既定のプロパティ値をもつ Simulink.LookupTable オブジェクト LUTObj を返します。

モデル エクスプローラーを使用して Simulink.LookupTable オブジェクトを作成するには、ツール バーのボタン を使用します。オブジェクトの既定の名前は Object です。

プロパティ ダイアログ ボックス

テーブルの次元数

ルックアップ テーブルの次元数。30 以下の整数値を指定します。たとえば、3 次元のルックアップ テーブルを表すには、整数 3 を指定します。

テーブル

テーブル データの情報。以下の特性を構成できます。

table データ。数値ベクトル、または最低 2 つの要素をもつ多次元配列を指定します。

式が数値ベクトルまたは多次元配列を返す場合、sin(1:0.5:30) などの算術演算子を含む式も使用できます。[適用] または [OK] をクリックすると、オブジェクトは式を実行し、その結果を使用してこのプロパティの値を設定します。

[データ型]auto に設定した場合、[値] を設定するためには single([1 2 3]) などの型付き式を使用するか、fi (Fixed-Point Designer) コンストラクターを使用して fi オブジェクトを組み込みます。

3 次元以上のテーブル データを指定する場合、[値] に表示されるデータは、関数 reshape への呼び出しを含む式になります。データの値を編集するには、reshape 呼び出しの最初の引数を変更します。この引数にはすべての値がシリアル化されたベクトルで含まれています。次元に沿って要素を追加または削除する場合、変更された次元の長さを表す引数も修正しなければなりません。

このデータは、より直感的なインターフェイスを使用して、ルックアップ テーブル ブロック内で編集できます。MATLAB からのルックアップ テーブル データのインポートを参照してください。

データ型

テーブル データのデータ型。既定の設定は [自動] で、テーブル データは [値] に指定された値からデータ型を取得することを意味します。[1 2 3] など型なし式を使用して [値] を設定する場合、テーブル データはデータ型として double を使用します。single([1 2 3]) など型付き式や fi オブジェクトを指定する場合、テーブル データはその表現またはオブジェクトによって指定されたデータ型を使用します。列挙データ型もサポートされます。

整数データ型、浮動小数点データ型、固定小数点データ型、またはデータ型の表現 (Simulink.AliasType オブジェクトの名前など) を明示的に指定できます。

Simulink® のデータ型の詳細については、Simulink でサポートされているデータ型を参照してください。Simulink.LookupTable オブジェクトおよび Simulink.Breakpoint オブジェクトのテーブルとブレークポイント データのデータ型を制御する方法を決定するには、ルックアップ テーブル オブジェクトのデータ型の制御 (Simulink Coder)を参照してください。

次元

ルックアップ テーブル データの次元の長さ。

シンボリック次元を使用するには、文字ベクトルを指定します。Implement Dimension Variants for Array Sizes in Generated Code (Embedded Coder)を参照してください。

最小値

table データの要素の最小値。既定値は空の [] です。数値の実数値を指定できます。

Simulink がこのプロパティを使用する方法の詳細については、ブロック パラメーターの最小値と最大値の指定を参照してください。

最大値

table データの要素の最大値。既定値は空の [] です。数値の実数値を指定できます。

Simulink がこのプロパティを使用する方法の詳細については、ブロック パラメーターの最小値と最大値の指定を参照してください。

格納された整数の最小値

固定小数点データ型をもつ Simulink.LookupTable オブジェクトに対する table データの要素の最小値。格納整数値として指定します。値は実際値の [最小値] から派生します。このプロパティは、プロパティ ダイアログ ボックスでのみ使用できます。

格納された整数の最大値

固定小数点データ型をもつ Simulink.LookupTable オブジェクトに対する table データの要素の最大値。格納整数値として指定します。値は実際値の [最大値] から派生します。このプロパティは、プロパティ ダイアログ ボックスでのみ使用できます。

単位

ルックアップ テーブルの要素の物理単位。degC などのテキストを指定できます。Simulink モデルでの単位の指定を参照してください。

フィールド名

生成コード内の構造体フィールドの名前。生成されたコードで構造体として表示されるように Simulink.LookupTable オブジェクトを構成した場合、このフィールドにはテーブル データが格納されます。既定値は Table です。フィールド名を変更するには、テキストを指定します。

説明

ルックアップ テーブルの説明。This lookup table describes the action of a pump などのテキストを指定できます。

ブレークポイント

ブレークポイント セットの情報。各行は 1 つのブレークポイント セットです。追加のブレークポイント セットを構成するには、[テーブルの次元数] ボックスに整数値を指定します。

ブレークポイント セットについては、次の特性を構成できます。

指定

ブレークポイント セットの情報ソースで、[Explicit values] (既定)、[Reference] または [Even spacing] として指定されます。

  • Simulink.LookupTable オブジェクトのすべての table およびブレークポイント セットのデータを格納するには、[指定][Explicit values] に設定します。

    Simulink.LookupTable オブジェクトは、生成コードに単一の構造体変数として表示されます。

  • テーブル データを Simulink.LookupTable オブジェクトに格納し、ブレークポイント セットのデータを Simulink.Breakpoint オブジェクトに格納するには、[指定][Reference] に設定します。

    Simulink.LookupTable オブジェクトは、生成コードにテーブル データを含む別個の配列変数として表示されます。各 Simulink.Breakpoint オブジェクトは、ブレークポイント セットのデータを含む独立した配列または構造体変数として表示されます。

  • テーブル データおよび等間隔のブレークポイントを Simulink.LookupTable オブジェクトに格納するには、[指定][Even spacing] に設定します。[最初の点] パラメーターと [間隔] パラメーターを使用して、等間隔のブレークポイントを生成します。

メモ

[指定][Explicit values] または [Even spacing] に設定すると、ルックアップ テーブル オブジェクトが生成した構造体の調整可能なサイズ、ブレークポイントおよびテーブル エントリの順番を変更できます。

調整可能なサイズをサポートする

生成コード内のテーブルの有効サイズの調整を可能にする指定。コード内で、オブジェクトに対応する構造体には、各ブレークポイント ベクトルについて 1 つの追加フィールドがあります。各追加フィールドには、対応するブレークポイント ベクトルの長さが格納されます。各フィールドの値を変更して、テーブルの有効サイズを調整できます。

このプロパティは、[指定][Explicit values] または [Even spacing] に設定しているときのみ表示されます。

メモ

[指定][参照] に設定してブレークポイントのデータを Simulink.Breakpoint オブジェクトに格納している場合、生成コードでテーブル サイズの調整を有効にするには、各 Simulink.Breakpoint オブジェクトの [調整可能なサイズをサポートする] プロパティを使用します。

ブレークポイント セットのデータ。最低 2 つの要素をもつ数値ベクトルを指定します。

また、sin(1:0.5:30) のように算術演算子を含む式も、その式が数値ベクトルを返す限り使用できます。[適用] または [OK] をクリックすると、オブジェクトは式を実行し、その結果を使用してこのプロパティの値を設定します。

[データ型]auto に設定した場合、[値] を設定するためには single([1 2 3]) などの型付き式を使用するか、fi (Fixed-Point Designer) コンストラクターを使用して fi オブジェクトを組み込みます。

このデータは、より直感的なインターフェイスを使用して、ルックアップ テーブル ブロック内で編集できます。MATLAB からのルックアップ テーブル データのインポートを参照してください。

データ型

ブレークポイント セットのデータ型。既定の設定は auto で、ブレークポイント セットが [値] に指定した値からデータ型を取得することを意味します。[1 2 3] など型なし式を使用して [値] を設定する場合、ブレークポイント データはデータ型 double を使用します。single([1 2 3]) など型付き式や fi オブジェクトを指定する場合、ブレークポイント データはその表現またはオブジェクトによって指定されたデータ型を使用します。

整数データ型、浮動小数点データ型、固定小数点データ型、またはデータ型の表現 (Simulink.AliasType オブジェクトの名前など) を明示的に指定できます。

Simulink のデータ型の詳細については、Simulink でサポートされているデータ型を参照してください。Simulink.LookupTable オブジェクトおよび Simulink.Breakpoint オブジェクトのテーブルとブレークポイント データのデータ型を制御する方法を決定するには、ルックアップ テーブル オブジェクトのデータ型の制御 (Simulink Coder)を参照してください。

次元

ブレークポイント セットの次元の長さ。

シンボリック次元を使用するには、文字ベクトルを指定します。Implement Dimension Variants for Array Sizes in Generated Code (Embedded Coder)を参照してください。

最小値

ブレークポイント セットの要素の最小値。既定値は空の [] です。数値の実数値を指定できます。

Simulink がこのプロパティを使用する方法の詳細については、ブロック パラメーターの最小値と最大値の指定を参照してください。

最大値

ブレークポイント セットの要素の最大値。既定値は空の [] です。数値の実数値を指定できます。

Simulink がこのプロパティを使用する方法の詳細については、ブロック パラメーターの最小値と最大値の指定を参照してください。

単位

ブレークポイント セットの要素の物理単位。degF などのテキストを指定できます。Simulink モデルでの単位の指定を参照してください。

フィールド名

生成コード内の構造体フィールドの名前。このフィールドには、ブレークポイント セットのデータが保存されます。既定値は、最初のブレークポイント セットについては BP1、2 番目のセットについては BP2 です。フィールド名を変更するには、テキストを指定します。

調整可能なサイズの名前

生成コード内の構造体フィールドの名前。このフィールドには、ブレークポイント セットの長さ (要素数) が格納されます。生成されたコード アルゴリズムはこれを使用してテーブルのサイズを判定します。コードの実行中にテーブルの有効なサイズを調整するには、メモリ内でこの構造体フィールドの値を変更します。既定の名前は、最初のブレークポイント セットについては N1、2 番目のセットについては N2 です。フィールド名を変更するには、テキストを指定します。

この列は、[調整可能なサイズをサポートする] を選択したときのみ表示されます。

説明

ブレークポイント セットの説明。This breakpoint set represents the pressure input などのテキストを指定できます。

最初の点

等間隔のブレークポイント データの最初の点。このパラメーターは、[指定][Even spacing] に設定されている場合に使用できます。

間隔

等間隔のブレークポイント データの点の間隔。このパラメーターは、[指定][Even spacing] に設定されている場合に使用できます。

名前

このブレークポイント セットの情報を格納する Simulink.Breakpoint オブジェクトの名前。

この列は、[指定][Reference] に設定しているときのみ表示されます。

最初のポイント名

最初の点の情報を格納する Simulink.Breakpoint オブジェクトの名前。このパラメーターは、[指定][Even spacing] に設定されている場合に使用できます。

間隔名

間隔の情報を格納する Simulink.Breakpoint オブジェクトの名前。このパラメーターは、[指定][Even spacing] に設定されている場合に使用できます。

データ定義: ストレージ クラス

生成コードの構造体変数 ([指定][Explicit values] または [Even spacing] に設定している場合) または配列変数 ([Reference] に設定している場合) のストレージ クラス。この変数にはテーブル データと、変数が構造体の場合にはブレークポイント セットのデータが格納されます。既定の設定は、[自動] です。

ストレージ クラスの詳細については、個別の信号、状態、およびパラメーター データ要素へのストレージ クラスの適用 (Simulink Coder)を参照してください。

Embedded Coder® がある場合、カスタム ストレージ クラスを選択できます。カスタム ストレージ クラスの詳細については、Organize Parameter Data into a Structure by Using Struct Storage Class (Embedded Coder)を参照してください。

データ定義: 識別子

生成コードの構造体変数 ([指定][Explicit values] または [Even spacing] に設定している場合) または配列変数 ([Reference] に設定している場合) の代替名。既定値は空で、この場合に生成コードは Simulink.LookupTable オブジェクトの名前を構造体または配列変数の名前として使用します。識別子を設定するには、テキストを指定します。

このプロパティを有効にするには、[データ定義: ストレージ クラス][Auto] 以外に設定します。

データ定義: 配置

生成コードのデータ配置境界。構造体または配列変数に割り当てられるデータの開始メモリ アドレスは、指定した値の倍数になります。既定値は -1 です。これは使用に基づいてコード ジェネレーターが最適な配置を決定することを指定します。

128 を超えない 2 のべき乗である正の整数を指定します。コード置換のデータ配置を使用する方法の詳細については、Data Alignment for Code Replacement (Embedded Coder)を参照してください。

構造体の型定義: 名前

生成コードの構造体変数が使用する構造体の型の名前。既定値は空です。テキストを指定します。

このプロパティは、[指定][Explicit values] または [Even spacing] に設定しているときのみ表示されます。

構造体の型定義: データ スコープ

構造体の型定義のスコープで、カスタム コードからインポートされるか、生成コードからエクスポートされます。既定値は [Auto] です。[Auto] を選択した場合、次のように処理されます。

  • [構造体の型定義: ヘッダー ファイル] ボックスで値を指定していない場合、生成コードは構造体の型定義をファイル model_types.h にエクスポートします。model はモデル名です。

  • [構造体の型定義: ヘッダー ファイル] ボックスで myHdr.h などの値を指定している場合、生成コードは myHdr.h から構造体の型定義をインポートします。

データ スコープを明示的に指定するには、次のようにします。

  • カスタム コードから生成コードに構造体の型定義をインポートするには、[Imported] を選択します。

  • 生成コードから構造体の型定義をエクスポートするには、[Exported] を選択します。

[構造体の型定義: ヘッダー ファイル] ボックスに値を指定しない場合、生成コードと StructName.h との間で型定義がインポートまたはエクスポートされます。StructName は、プロパティ [構造体の型定義: 名前] で指定する名前です。

このプロパティは、[指定][Explicit values] または [Even spacing] に設定しているときのみ表示されます。

構造体の型定義: ヘッダー ファイル

構造体の型定義を含むヘッダー ファイルの名前。作成したヘッダー ファイルから定義をインポートするか、生成されたヘッダー ファイルに定義をエクスポートすることができます。構造体の型のスコープを制御するには、[構造体の型定義: データ スコープ] プロパティの設定を調整します。

このプロパティは、[指定][Explicit values] または [Even spacing] に設定しているときのみ表示されます。

プロパティ

すべて展開する

ブレークポイント セットの情報。Simulink.lookuptable.Breakpoint オブジェクトのベクトル、文字ベクトルの cell 配列、または Simulink.lookuptable.Evenspacing オブジェクトのベクトルとして指定します。

Simulink.lookuptable.Breakpoint オブジェクトのベクトルを使用する場合、各オブジェクトはブレークポイント セットを表します。Simulink.lookuptable.Breakpoint オブジェクトのベクトルを使用するには、プロパティ BreakpointsSpecification'Explicit values' に設定します。

文字ベクトルの cell 配列を使用する場合、各文字ベクトルは Simulink.Breakpoint オブジェクトの名前を表します。文字ベクトルの cell 配列を使用するには、プロパティ BreakpointsSpecification'Reference' に設定します。

Simulink.lookuptable.Evenspacing オブジェクトのベクトルを使用する場合、各オブジェクトはブレークポイント セットを表します。Simulink.lookuptable.Evenspacing オブジェクトのベクトルを使用するには、プロパティ BreakpointsSpecification'Even Spacing' に設定します。

ブレークポイント セット情報のソースで、'Explicit values' (既定)、'Even spacing' または 'Reference' として指定されます。[ブレークポイント][指定] パラメーターを参照してください。

データ型: char

ルックアップ テーブルとブレークポイント セットを格納する構造体変数 (BreakpointsSpecification'Explicit values' または 'Even spacing' に設定している場合) または配列変数 ('Reference') のコード生成設定。Simulink.CoderInfo オブジェクトとして指定します。この組み込みオブジェクトを使用して、ストレージ クラスまたはカスタム ストレージ クラスを指定できます。Simulink.CoderInfo を参照してください。

生成コード内で構造体変数が使用する構造体の型の設定。Simulink.lookuptable.StructTypeInfo オブジェクトとして指定します。

BreakpointsSpecification'Reference' に設定すると、Simulink.LookupTable オブジェクトは生成コードに構造体として出現しません。コード ジェネレーターはこのプロパティを無視します。

テーブルの有効サイズの調整可能性を有効にするコードを生成するオプションで、true または false が指定されます。[調整可能なサイズをサポートする] パラメーターを参照してください。

データ型: logical

table データの情報。Simulink.lookuptable.Table オブジェクトとして指定します。

コピーのセマンティクス

ハンドル。ハンドル クラスがコピー操作にどのように影響するかについては、オブジェクトのコピーを参照してください。

1 次元ルックアップ テーブルを表現する

  1. LUTObj という名前の Simulink.LookupTable オブジェクトを作成します。

    LUTObj = Simulink.LookupTable;

  2. テーブル データを指定します。

    LUTObj.Table.Value = [1.1 2.2 3.3 4.4 5.5];

  3. ブレークポイント セットのデータを指定します。

    LUTObj.Breakpoints(1).Value = [-2 -1 0 1 2];

  4. 生成コード内の構造体型の名前を指定します。

    LUTObj.StructTypeInfo.Name = 'myLUTStruct';

LUTObj1-D Lookup Table ブロック ダイアログ ボックスで使用できます。ブロック内で [データの仕様][ルックアップ テーブル オブジェクト] に、[名前]LUTObj に設定します。

2 次元ルックアップ テーブルを表現する

  1. LUTObj という名前の Simulink.LookupTable オブジェクトを作成します。

    LUTObj = Simulink.LookupTable;

  2. テーブル データを指定します。

    LUTObj.Table.Value = [1.1 2.2 3.3 4.4 5.5; ...
                              6.6 7.7 8.8 9.9 10.1];

  3. ブレークポイント セットのデータを指定します。Breakpoints プロパティで、ベクトル インデックス 2 を使用して、2 番目のブレークポイント セットに値を設定します。

    LUTObj.Breakpoints(1).Value = [-1 1];
    
    LUTObj.Breakpoints(2).Value = [-2 -1 0 1 2];
    

    LUTObj が、Breakpoints プロパティの値に含まれる 2 番目のベクトル要素として Simulink.lookuptable.Breakpoint オブジェクトを作成します。Value プロパティを除き、新しいオブジェクトのプロパティは既定の値です。

  4. 生成コード内の構造体型の名前を指定します。

    LUTObj.StructTypeInfo.Name = 'myLUTStruct';

LUTObj2-D Lookup Table ブロック ダイアログ ボックスで使用できます。

1 から始まる毎秒値を等間隔に設定

1 から始まる毎秒値を等間隔に設定するには、Breakpoint オブジェクトを使用します。

  1. LUTObj という名前の Simulink.LookupTable オブジェクトを作成します。

    LUTObj=Simulink.LookupTable
    
    LUTObj = 
    
      LookupTable with properties:
    
                           Table: [1×1 Simulink.lookuptable.Table]
        BreakpointsSpecification: 'Explicit values'
                     Breakpoints: [1×1 Simulink.lookuptable.Breakpoint]
              SupportTunableSize: 0
                       CoderInfo: [1×1 Simulink.CoderInfo]
                  StructTypeInfo: [1×1 Simulink.lookuptable.StructTypeInfo]
  2. ブレークポイントのプロパティを等間隔に設定します。

    LUTObj.BreakpointsSpecification='Even spacing'
    
    LUTObj = 
    
      LookupTable with properties:
    
                           Table: [1×1 Simulink.lookuptable.Table]
        BreakpointsSpecification: 'Even spacing'
                     Breakpoints: [1×1 Simulink.lookuptable.Evenspacing]
              SupportTunableSize: 0
                       CoderInfo: [1×1 Simulink.CoderInfo]
                  StructTypeInfo: [1×1 Simulink.lookuptable.StructTypeInfo]
  3. ブレークポイントのプロパティを取得します。

    LUTObj.Breakpoints(1)
    
    
    ans = 
    
      Evenspacing with properties:
    
             FirstPoint: 0
                Spacing: 1
               DataType: 'auto'
                    Min: []
                    Max: []
                   Unit: ''
         FirstPointName: 'BPFirstPoint1'
            SpacingName: 'BPSpacing1'
        TunableSizeName: 'N1'
            Description: ''
  4. 最初の点のプロパティを設定するには、Breakpoint オブジェクトの FirstPoint プロパティを使用します。

    LUTObj.Breakpoints(1).FirstPoint=1
  5. 間隔のプロパティを設定するには、Breakpoint オブジェクトを使用します。

    LUTObj.Breakpoints(1).Spacing=2
  6. ブレークポイントのプロパティを取得します。

    LUTObj.Breakpoints(1)
    
    ans = 
    
      Evenspacing with properties:
    
             FirstPoint: 1
                Spacing: 2
               DataType: 'auto'
                    Min: []
                    Max: []
                   Unit: ''
         FirstPointName: 'BPFirstPoint1'
            SpacingName: 'BPSpacing1'
        TunableSizeName: 'N1'
            Description: ''

ルックアップ テーブルとブレークポイント セットのコード生成の制御

LUTObj という名前の Simulink.LookupTable オブジェクトを作成します。

LUTObj = Simulink.LookupTable;

テーブル データを指定します。

LUTObj.Table.Value = [1.00 2.25 3.50 4.75 6.00; ...
                          7.25 8.50 9.75 11.00 12.25];

ブレークポイント セットのデータを指定します。Breakpoints プロパティで、配列インデックス 2 を使用して、2 番目のブレークポイント セットを表す追加の Simulink.lookuptable.BreakpointInfo オブジェクトを作成します。

LUTObj.Breakpoints(1).Value = [-1 1];

LUTObj.Breakpoints(2).Value = [-2 -1 0 1 2];

ルックアップ テーブルと各ブレークポイント セットのデータ型を指定します。

LUTObj.Table.DataType = 'fixdt(1,16,2)';

LUTObj.Breakpoints(1).DataType = 'int16';

LUTObj.Breakpoints(2).DataType = 'int16';

生成コード内のテーブル データとブレークポイント セットを格納する、構造体フィールドの固有名を指定します。

LUTObj.Table.FieldName = 'myTable';

LUTObj.Breakpoints(1).FieldName = 'myBPSet1';

LUTObj.Breakpoints(2).FieldName = 'myBPSet2';

ストレージ クラス ExportedGlobal を使用して、生成コードから構造体変数の定義をエクスポートします。

LUTObj.CoderInfo.StorageClass = 'ExportedGlobal';

生成コード内の構造体の型に LUTStructType という名前を付けます。構造体の型定義を、生成された myLUTHdr.h という名前のヘッダー ファイルにエクスポートします。

LUTObj.StructTypeInfo.Name = 'LUTStructType';
LUTObj.StructTypeInfo.DataScope = 'Exported';
LUTObj.StructTypeInfo.HeaderFileName = 'myLUTHdr.h';

モデルの n-D Lookup Table ブロックで、[データの仕様]Lookup table object に、[名前]LUTObj に設定します。

load_system('myModel_LUTObj')
set_param('myModel_LUTObj/Lookup Table','DataSpecification','Lookup table object',...
    'LookupTableObject','LUTObj')

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

rtwbuild('myModel_LUTObj')
### Starting build procedure for: myModel_LUTObj
### Generated code for 'myModel_LUTObj' is up to date because no structural, parameter or code replacement library changes were found.
### Successful completion of code generation for: myModel_LUTObj

生成されたコードが、生成されたヘッダー ファイル LUTStructType 内の構造体の myLUTHdr.h 型を定義します。

file = fullfile('myModel_LUTObj_ert_rtw','myLUTHdr.h');
rtwdemodbtype(file,'typedef struct {','} LUTStructType;',1,1)
typedef struct {
  int16_T myBPSet1[2];
  int16_T myBPSet2[5];
  int16_T myTable[10];
} LUTStructType;

コードは、グローバル構造体変数 LUTObj を使用して、テーブルおよびブレークポイント セットのデータを格納します。テーブル データは、指定された固定小数点データ型に基づいてスケーリングされます。

file = fullfile('myModel_LUTObj_ert_rtw','myModel_LUTObj.c');
rtwdemodbtype(file,'LUTStructType LUTObj = {','/* Variable: LUTObj',1,1)
LUTStructType LUTObj = {
  { -1, 1 },

  { -2, -1, 0, 1, 2 },

  { 4, 29, 9, 34, 14, 39, 19, 44, 24, 49 }
} ;                                    /* Variable: LUTObj

条件付きでコンパイルされる次元の長さを使用するコードの生成

メモリを条件付きで割り当て、#define マクロとして指定する次元の長さに基づいてルックアップ テーブルを初期化する、手書きのコードを想定します。この例では、外部テーブルとブレークポイント データを使用するコードを生成する方法を示します。

シンボリック次元では、ERT ベースのシステム ターゲット ファイルを使用する必要があり、Embedded Coder® が必要です。

外部コードの調査

現在のフォルダーで、これらのマクロの定義を ex_myHdr_LUT.h という名前のヘッダー ファイルにコピーします。

#include "rtwtypes.h"

#ifndef _HEADER_MYHDR_H_
#define _HEADER_MYHDR_H_

#define bp1Len 2
#define bp2Len 2

typedef struct {
  real_T BP1[bp1Len];
  real_T BP2[bp2Len];
  real_T Table[bp1Len * bp2Len];
} LUTObj_Type;

extern LUTObj_Type LUTObj;

#endif

この静的初期化コードを、ex_mySrc_LUT.c という名前のソース ファイルにコピーします。

#include "ex_myHdr_LUT.h"

#if bp1Len == 2 && bp1Len == 2
LUTObj_Type LUTObj = {
  { 1.0, 2.0 },

  { 3.0, 4.0 },

  { 3.0, 2.0, 4.0, 1.0 }
} ;         
#endif

#if bp1Len == 3 && bp1Len == 3
LUTObj_Type LUTObj = {
  { 1.0, 2.0, 3.0 },

  { 4.0, 5.0, 6.0 },

  { 1.0, 6.0, 2.0, 3.0, 8.0, 9.0, 5.0, 4.0, 7.0 }
} ;     
#endif

このデータをインポートするコードを生成するため、bp1Len および bp2Len を、MATLAB の Simulink.Parameter オブジェクトとして作成します。LUTObjSimulink.LookupTable オブジェクトとして作成します。パラメーター オブジェクトを使用して、Simulink.LookupTable オブジェクトのテーブルとブレークポイント セットのデータの次元の長さを指定します。

モデル例の作成

n-D Lookup Table ブロックを使用して、モデル例 ex_LUTObj を作成します。Lookup Table ブロックのダイアログ ボックスの [テーブルとブレークポイント] タブで、[テーブルの次元数]2 に設定します。

open_system('ex_LUTObj')

Simulink.LookupTable オブジェクトの作成

モデル エクスプローラーの [モデルの階層構造] ペインで [Base Workspace] を選択します。

ツール バーで、[追加 Simulink LookupTable] ボタンをクリックします。Object という名前の Simulink.LookupTable オブジェクトがベース ワークスペースに表示されます。

[コンテンツ] ペイン (中央のペイン) で、オブジェクトの名前を LUTObj に設定します。

あるいは、コマンド プロンプトで次のようにオブジェクトを作成します。

LUTObj = Simulink.LookupTable;

Simulink.LookupTable オブジェクトの構成

[コンテンツ] ペインで、新しいオブジェクト LUTObj を選択します。[ダイアログ] ペイン (右側のペイン) にプロパティ ダイアログ ボックスが表示されます。

[テーブルの次元数]2 に設定します。

[テーブル] の下で、[値][3 4; 2 1] に設定します。

1 行目で、[ブレークポイント] の下の [値][1 2] に設定します。

2 行目で、[ブレークポイント] の下の [値][3 4] に設定します。[適用] をクリックします。

[構造体の型定義] の下で、[データ スコープ]Imported に設定します。[ヘッダー ファイル]ex_myHdr_LUT.h に設定します。[名前]LUTObj_Type に設定します。

Lookup Table ブロック ダイアログ ボックスで、[データの仕様]Lookup table object に設定します。[名前]LUTObj に設定します。[適用] をクリックします。

または、次のコマンドを使用してオブジェクトとブロックを構成します。

LUTObj.Breakpoints(1).Value = [1 2];
LUTObj.Breakpoints(2).Value = [3 4];
LUTObj.Table.Value = [3 4; 2 1];
LUTObj.StructTypeInfo.DataScope = 'Imported';
LUTObj.StructTypeInfo.HeaderFileName = 'ex_myHdr_LUT.h';
LUTObj.StructTypeInfo.Name = 'LUTObj_Type';
set_param('ex_LUTObj/Lookup Table','LookupTableObject','LUTObj')
set_param('ex_LUTObj/Lookup Table',...
    'DataSpecification','Lookup table object')

コード ジェネレーターで、次元の長さを指定するマクロとして Simulink.Parameter オブジェクトの使用を有効にします。コンフィギュレーション パラメーター [シンボリック次元指定の許可] を選択します。

set_param('ex_LUTObj','AllowSymbolicDim','on')

マクロ bp1Len および bp2Len を表す Simulink.Parameter オブジェクトを作成します。ヘッダー ファイル ex_myHdr_LUT.h からマクロをインポートするコードを生成するには、ストレージ クラス ImportedDefine を適用します。

bp1Len = Simulink.Parameter(2);
bp1Len.Min = 2;
bp1Len.Max = 3;
bp1Len.DataType = 'int32';
bp1Len.CoderInfo.StorageClass = 'Custom';
bp1Len.CoderInfo.CustomStorageClass = 'ImportedDefine';
bp1Len.CoderInfo.CustomAttributes.HeaderFile = 'ex_myHdr_LUT.h';

bp2Len = Simulink.Parameter(2);
bp2Len.Min = 2;
bp2Len.Max = 3;
bp2Len.DataType = 'int32';
bp2Len.CoderInfo.StorageClass = 'Custom';
bp2Len.CoderInfo.CustomStorageClass = 'ImportedDefine';
bp2Len.CoderInfo.CustomAttributes.HeaderFile = 'ex_myHdr_LUT.h';

既存の Simulink.LookupTable オブジェクト LUTObjSimulink.Parameter オブジェクトを使用するよう構成します。パラメーター オブジェクトの名前を使用して、ブレークポイント セットのデータとテーブル データの次元の長さを設定します。

LUTObj.Breakpoints(1).Dimensions = '[1 bp1Len]';
LUTObj.Breakpoints(2).Dimensions = '[1 bp2Len]';
LUTObj.Table.Dimensions = '[bp1Len bp2Len]';

ストレージ クラス ImportFromFile を適用し、LUTObj をインポートされるデータとして構成します。LUTObj の定義をインポートするには、ファイル ex_mySrc_LUT.c の名前をモデル コンフィギュレーション パラメーター [コンフィギュレーション パラメーター]、[コード生成]、[カスタム コード]、[追加のビルド情報]、[ソース ファイル] に追加します。

LUTObj.CoderInfo.StorageClass = 'Custom';
LUTObj.CoderInfo.CustomStorageClass = 'ImportFromFile';
LUTObj.CoderInfo.CustomAttributes.HeaderFile = 'ex_myHdr_LUT.h';

set_param('ex_LUTObj','CustomSource','ex_mySrc_LUT.c')

コードの生成と検査

生成されたコードから実行可能ファイルをコンパイルするようにモデルを構成します。

set_param('ex_LUTObj','GenCodeOnly','off')

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

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

コード生成レポートで、生成されたファイル ex_LUTObj.h を表示します。ファイルは、ヘッダー ファイル ex_myHdr_LUT.h を含めることで、マクロ定義と構造体型定義をインポートします。

file = fullfile('ex_LUTObj_ert_rtw','ex_LUTObj.h');
rtwdemodbtype(file,'#include "ex_myHdr_LUT.h"','#include "ex_myHdr_LUT.h"',1,1)
#include "ex_myHdr_LUT.h"

ソース ファイル ex_LUTObj.c では、モデルの関数 step のコード アルゴリズムによって、テーブル ルックアップを実行する関数にブレークポイントとテーブル データが渡されます。アルゴリズムによって bp1Len も渡されるため、ルックアップ関数は、シリアル化された 1 次元配列として生成コードに表示されるテーブル データの行と列を横断することができます。

file = fullfile('ex_LUTObj_ert_rtw','ex_LUTObj.c');
rtwdemodbtype(file,'/* Model step function */','/* Model initialize function */',1,0)
/* Model step function */
void ex_LUTObj_step(void)
{
  /* Outport: '<Root>/Out1' incorporates:
   *  Inport: '<Root>/In1'
   *  Inport: '<Root>/In2'
   *  Lookup_n-D: '<Root>/Lookup Table'
   */
  ex_LUTObj_Y.Out1 = look2_binlcapw(ex_LUTObj_U.In1, ex_LUTObj_U.In2,
    (&(LUTObj.BP1[0])), (&(LUTObj.BP2[0])), (&(LUTObj.Table[0])),
    ex_LUTObj_ConstP.LookupTable_maxIndex, (uint32_T)bp1Len);
}

制限

  • Simulink.Breakpoint または Simulink.LookupTable をサブクラス化することはできません。このため、組み込み Simulink パッケージ以外のものに、カスタム ストレージ クラスを適用することはできません。

  • Simulink.Breakpoint オブジェクトを参照する Simulink.Breakpoint オブジェクトまたは Simulink.LookupTable オブジェクトを、再利用可能なコンポーネントのインスタンス固有のパラメーター データとして使用することはできません。たとえば、これらのオブジェクトの 1 つを次のように使用することはできません。

    • モデル ワークスペースのモデル引数または Model ブロックのモデル引数値。

    • CodeReuse Subsystem ブロックのマスク パラメーターの値。

    • カスタム ライブラリを作成することで再利用するサブシステムのマスク パラメーターの値。

    ただし、Simulink.Breakpoint オブジェクトを参照しないスタンドアロンの Simulink.LookupTable オブジェクトは、上記の方法でも使用できます。

  • サブシステム内のブロックが Simulink.LookupTable オブジェクトまたは Simulink.Breakpoint オブジェクトを使用する場合、データ型オーバーライドをサブシステムのみに設定することはできません。代わりに、データ型オーバーライドをモデル全体に設定します。

R2016b で導入