このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
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 ブロックで使用します。次に、ルックアップ テーブル オブジェクトがブレークポイント オブジェクトを指すように構成します。詳細については、ルックアップ テーブルの共有ブレークポイントとテーブル データのパッケージ化を参照してください。
Simulink.LookupTable
からサブクラス化し、基底クラスから継承するには、クラス定義ファイルの最初の行で次の構文を入力します。ここで、myLookuptable は新しいクラスの名前です。
classdef myLookuptable < Simulink.LookupTable
サブクラス化の例については、データ クラスの定義を参照してください。
サブクラスにプロパティを追加する場合、MATLAB® コマンド ラインでサブクラス オブジェクトを表示することでそれらを確認できます。プロパティ ダイアログ ボックスで、これらのプロパティが新しいタブに表示されます。
作成
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
オブジェクトを指定する場合、テーブル データはその表現またはオブジェクトによって指定されたデータ型を使用します。列挙データ型もサポートされます。整数データ型、half データ型、浮動小数点データ型、固定小数点データ型、またはデータ型の式 (
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]
に設定している場合) のストレージ クラス。この変数にはテーブル データと、変数が構造体の場合にはブレークポイント セットのデータが格納されます。既定の設定は、[自動]
です。ストレージ クラスの詳細については、モデル インターフェイス要素の C コード生成の構成 (Simulink Coder)を参照してください。
Embedded Coder® がある場合、カスタム ストレージ クラスを選択できます。カスタム ストレージ クラスの詳細については、Struct ストレージ クラスを使用してパラメーター データを構造体に整理する (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]
に設定しているときのみ表示されます。- テーブル値およびブレークポイント値の編集領域
テーブル データおよびブレークポイント データの情報。関連付けられているテキスト ボックスに MATLAB 式を入力するか、付属するテーブルに直接データを追加できます。目的のデータ型を選択します。
テーブル
— テーブル データ。数値ベクトル、または最低 2 つの要素をもつ多次元配列を指定します。式が数値ベクトルまたは多次元配列を返す場合、
sin(1:0.5:30)
などの算術演算子を含む式も使用できます。Enter キーを押すと、オブジェクトは式を実行し、その結果を使用してこのプロパティの値を設定します。3 次元以上のテーブル データを指定する場合、テーブルに表示されるデータは、関数
reshape
への呼び出しを含む式になります。データの値を編集するには、reshape
呼び出しの最初の引数を変更します。この引数にはすべての値がシリアル化されたベクトルで含まれています。次元に沿って要素を追加または削除する場合、変更された次元の長さを表す引数も修正しなければなりません。このデータは、より直感的なインターフェイスを使用して、ルックアップ テーブル ブロック内で編集できます。MATLAB からのルックアップ テーブル データのインポートを参照してください。
BP
N — ブレークポイント セットのデータ。最低 2 つの要素をもつ数値ベクトルを指定します。
また、
sin(1:0.5:30)
のように算術演算子を含む式も、その式が数値ベクトルを返す限り使用できます。Enter キーを押すと、オブジェクトは式を実行し、その結果を使用してこのプロパティの値を設定します。このデータは、より直感的なインターフェイスを使用して、ルックアップ テーブル ブロック内で編集できます。MATLAB からのルックアップ テーブル データのインポートを参照してください。
テーブルでのデータの入力または操作は簡単で直感的です。Microsoft® Excel® スプレッドシートのように、以下のような操作でテーブルを使用できます。
テーブル要素を選択する
次のような標準キーボード ショートカットを使用する:
コピー — Ctrl + C
貼り付け — Ctrl + V
元に戻す — Ctrl + Z
削除
やり直し — Shift + Ctrl + Z
プロパティ
コピーのセマンティクス
ハンドル。ハンドル クラスがコピー操作にどのように影響するかについては、オブジェクトのコピーを参照してください。
例
1 次元ルックアップ テーブルを表現する
LUTObj
という名前のSimulink.LookupTable
オブジェクトを作成します。LUTObj = Simulink.LookupTable;
テーブル データを指定します。
LUTObj.Table.Value = [1.1 2.2 3.3 4.4 5.5];
ブレークポイント セットのデータを指定します。
LUTObj.Breakpoints(1).Value = [-2 -1 0 1 2];
生成コード内の構造体型の名前を指定します。
LUTObj.StructTypeInfo.Name = 'myLUTStruct';
LUTObj
を 1-D Lookup Table ブロック ダイアログ ボックスで使用できます。ブロック内で [データの仕様] を [ルックアップ テーブル オブジェクト]
に、[名前] を LUTObj
に設定します。
データを表示するには、ルックアップ テーブル データの表示の説明に従ってプロパティ ダイアログを使用します。
2 次元ルックアップ テーブルを表現する
LUTObj
という名前のSimulink.LookupTable
オブジェクトを作成します。LUTObj = Simulink.LookupTable;
テーブル データを指定します。
LUTObj.Table.Value = [1.1 2.2 3.3 4.4 5.5; ... 6.6 7.7 8.8 9.9 10.1];
ブレークポイント セットのデータを指定します。
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
プロパティを除き、新しいオブジェクトのプロパティは既定の値です。生成コード内の構造体型の名前を指定します。
LUTObj.StructTypeInfo.Name = 'myLUTStruct';
LUTObj
を 2-D Lookup Table ブロック ダイアログ ボックスで使用できます。
データを表示するには、ルックアップ テーブル データの表示の説明に従ってプロパティ ダイアログを使用します。
1 から始まる毎秒値を等間隔に設定
1 から始まる毎秒値を等間隔に設定するには、Breakpoint オブジェクトを使用します。
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]
ブレークポイントのプロパティを等間隔に設定します。
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]
ブレークポイントのプロパティを取得します。
LUTObj.Breakpoints(1)
ans = Evenspacing with properties: FirstPoint: 0 Spacing: 1 DataType: 'auto' Min: [] Max: [] Unit: '' FirstPointName: 'BPFirstPoint1' SpacingName: 'BPSpacing1' TunableSizeName: 'N1' Description: ''
最初の点のプロパティを設定するには、Breakpoint オブジェクトの
FirstPoint
プロパティを使用します。LUTObj.Breakpoints(1).FirstPoint=1
間隔のプロパティを設定するには、Breakpoint オブジェクトを使用します。
LUTObj.Breakpoints(1).Spacing=2
ブレークポイントのプロパティを取得します。
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')
モデルからコードを生成します。
slbuild('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 Build Summary 0 of 1 models built (1 models already up to date) Build duration: 0h 0m 2.141s
生成されたコードが、生成されたヘッダー ファイル 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
オブジェクトとして作成します。LUTObj
を Simulink.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
オブジェクト LUTObj
が Simulink.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')
モデルからコードを生成します。
slbuild('ex_LUTObj')
### Starting build procedure for: ex_LUTObj ### Successful completion of build procedure for: ex_LUTObj Build Summary Top model targets built: Model Action Rebuild Reason ========================================================================================== ex_LUTObj Code generated and compiled Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 32.36s
コード生成レポートで、生成されたファイル 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.Breakpoint
オブジェクトまたはSimulink.LookupTable
オブジェクトを、再利用可能なコンポーネントのインスタンス固有のパラメーター データとして使用することはできません。たとえば、これらのオブジェクトの 1 つを次のように使用することはできません。モデル ワークスペースのモデル引数または Model ブロックのモデル引数値。
CodeReuse Subsystem ブロックのマスク パラメーターの値。
カスタム ライブラリを作成することで再利用するサブシステムのマスク パラメーターの値。
ただし、
Simulink.Breakpoint
オブジェクトを参照しないスタンドアロンのSimulink.LookupTable
オブジェクトは、上記の方法でも使用できます。サブシステム内のブロックが
Simulink.LookupTable
オブジェクトまたはSimulink.Breakpoint
オブジェクトを使用する場合、データ型オーバーライドをサブシステムのみに設定することはできません。代わりに、データ型オーバーライドをモデル全体に設定します。