生成されたコードにおけるパラメーターのデータ型
ブロック パラメーター (Gain ブロックの [ゲイン] パラメーターなど)、MATLAB® の数値変数または Simulink.Parameter
オブジェクトのデータ型は、生成されたコードの対応するエンティティが使用するデータ型を決定します (たとえば、グローバル変数または関数の引数)。より効率的なコードを生成するには、パラメーターのデータ型と信号のデータ型を一致させるか、パラメーターをさらにサイズが小さいデータ型で格納します。
モデルにブロック パラメーターのデータ型を設定する基本的な情報については、ブロック パラメーターのデータ型の制御を参照してください。
パラメーターのデータ型の有意性
ブロック パラメーター、MATLAB 変数またはパラメーター オブジェクトが使用するデータ型によって、生成されたコードがパラメーター値をメモリに格納するために使用するデータ型が決まります。たとえば、
モデル コンフィギュレーション パラメーターの [既定のパラメーター動作] (既定のパラメーター動作を参照) を
[調整可能]
に設定すると、Gain ブロックの [ゲイン] パラメーターが、パラメーター データを格納するグローバル構造体のフィールドとして生成されたコードに表示されます。データ型single
をモデルのブロック パラメーターに適用する場合、コード内の構造体フィールドは対応するデータ型real32_T
を使用します。ストレージ クラス
ExportedGlobal
をSimulink.Parameter
オブジェクトに適用すると、そのオブジェクトは別のグローバル変数として生成されたコードに表示されます。オブジェクトのDataType
プロパティをint8
に設定すると、コード内のグローバル変数は対応するデータ型int8_T
を使用します。モデル ワークスペースで
Simulink.Parameter
オブジェクトをモデル引数として設定すると、そのオブジェクトは、関数step
などのモデル エントリポイント関数の仮パラメーター (引数) として生成されたコードに表示されます。オブジェクトのDataType
プロパティによって仮パラメーターのデータ型が決まります。
パラメーター値をメモリに格納するために生成されたコードが使用するデータ型を決定する以外に、パラメーター、変数またはオブジェクトのデータ型は以下を行うこともできます。
コード生成の前に、ブロックにパラメーターの値をキャストさせます。キャストにより、オーバーフロー、アンダーフローまたは量子化が発生する可能性があります。
生成されたコードに飽和コードなどの追加のコードを含めるようにします。
パラメーターのデータ型の不一致による型変換
ブロック パラメーター、ワークスペース変数および信号のデータ型が異なる場合、ブロックは型変換を使用してデータ型の不一致を調整できます。これらの型変換により、モデルの関数 step
を含む生成されたコードのアルゴリズムには、ストレージのデータ型を調整する明示的なキャストおよび固定小数点のスケーリングを調整する C ビット シフトが含まれます。
パラメーターのデータ型の不一致は、次の場合に発生します。
MATLAB 変数またはパラメーター オブジェクト (
Simulink.Parameter
) に指定するデータ型が、ブロック パラメーターのデータ型と異なる場合。ブロック パラメーターは、変数またはオブジェクトの値の型変換を行います。初期値に設定するデータ型が、初期化された信号または状態のデータ型と異なる場合。
ブロック パラメーターに指定するデータ型が、信号またはパラメーターが操作を行う信号のデータ型と異なる場合。一部のブロックは、パラメーターの型変換を行ってから操作を実行します。たとえば、Gain ブロックはこの型変換を行います。
バイアスまたは小数部の固定小数点勾配を使用するように変数またはオブジェクトを設定すると、ブロック パラメーターは型変換を実行できません。この場合、変数またはパラメーター オブジェクトのデータ型とブロック パラメーターのデータ型を一致させなければなりません。以下のいずれかの方法を使用します。
変数またはパラメーター オブジェクトには状況依存データ型指定を使用します。MATLAB 変数の場合は、
double
の数値を使用して変数の値を設定します。パラメーター オブジェクトの場合は、DataType
プロパティをauto
に設定します。Simulink.AliasType
またはSimulink.NumericType
オブジェクトを使用して、ブロック パラメーターのデータ型およびパラメーター オブジェクトのデータ型を設定します。状況依存データ型指定に依存できない場合、たとえば、構造体のフィールドを使用してブロック パラメーターの値を設定する場合は、この手法を使用します。
ブロック パラメーターおよび変数またはパラメーター オブジェクトには同じデータ型を手動で指定します。
継承したデータ型と状況依存のデータ型および外部変数と外部オブジェクトに対するモデルの依存度を減らすには、この手法を使用します。
生成されたコードでポインターまたは参照を介してパラメーター データにアクセスするブロックの場合、ワークスペース変数とブロック パラメーターに異なるデータ型を指定すると、生成されたコードでは、変数のデータ型がブロック パラメーターのデータ型に暗黙的にキャストされます。暗黙的なキャストに必要となるデータ コピーは、RAM 消費を大幅に増加させ、大規模なデータセットのコードの実行速度を低下させる可能性があることに注意してください。たとえば、Lookup Table ブロックは、生成されたコードでポインターまたは参照を介して大規模なベクトルまたは行列に頻繁にアクセスします。
モデル引数を使用する際のパラメーターのデータ型の一致の詳細については、モデル引数および引数の値のデータ型の制御を参照してください。
データ型の不一致によるダウンキャストおよび精度低下の検出
診断のコンフィギュレーション パラメーターを設定して、量子化およびパラメーターの精度の損失を発生させる意図しないデータ型の不一致を検出できます。モデル コンフィギュレーション パラメーター: データ有効性の診断を参照してください。
他のモデル化パターンに関する考慮事項
特定のモデル化パターンを使用して、固定小数点データ型、パラメーター構造体およびルックアップ テーブル オブジェクトなどを作成する場合、パラメーターのデータ型の制御にはさまざまな手法を使用します。
調整可能なパラメーターと最高精度の固定小数点のスケーリング
最高精度の固定小数点スケーリングを調整可能なブロック パラメーターまたはパラメーター オブジェクトに適用するには、固定小数点ツールを使用してシステム全体をオートスケールするか、データ型アシスタントを使用して個々のパラメーターまたはオブジェクトを設定できます。調整可能なブロック パラメーターに最適な精度の固定小数点スケーリングの計算を参照してください。
調整可能なパラメーターが最適な精度の固定小数点スケーリングを使用する場合、Simulink® はパラメーターに指定する最小値と最大値に基づいてデータ型を選択します (ブロック パラメーターの最小値と最大値の指定を参照)。パラメーターを使用するブロックのダイアログ ボックスまたは Simulink.Parameter
オブジェクトのプロパティでこれらの値を指定できます。
最小値と最大値を指定しない場合、Simulink はパラメーターの値に基づいてデータ型を選択します。選択されたスケーリングによって可能な調整値の範囲が制限される場合があります。したがって、調整可能なパラメーターごとに最小値と最大値を指定することをお勧めします。
パラメーターのデータ型で指定していなくても、調整可能なパラメーターは最適な精度のスケーリングを使用できます。たとえば、ブロックのダイアログ ボックスで [パラメーターのデータ型] が Inherit: Inherit via internal rule
に設定されている場合、Gain ブロックは最適な精度のスケーリングを選択できます。これが既定のブロックの設定です。
構造体フィールドのデータ型の制御
構造体をブロック パラメーターの値として使用する場合 (たとえばバス信号の初期化のため)、または複数のブロック パラメーター値を 1 つの構造体にまとめる場合、Simulink.Bus
オブジェクトを作成して Simulink.Parameter
オブジェクトのデータ型として使用できます。その後、構造体内の個々のフィールドのデータ型を制御できます。パラメーター オブジェクトの作成によるフィールドのデータ型と特性の制御および初期条件構造体フィールドのデータ型の制御を参照してください。
ルックアップ テーブル オブジェクトのデータ型の制御
Simulink.LookupTable
オブジェクトと Simulink.Breakpoint
オブジェクトを使用して、Lookup Table ブロックのテーブルおよびブレークポイント データを格納し、テーブルおよびブレークポイント データのデータ型を制御する場合、次のいずれかの手法を使用します。
[1 2 3]
などの (double
ベクトルを返す) 型なし式を使用して、組み込みSimulink.lookuptable.Table
オブジェクトおよびSimulink.lookuptable.Breakpoint
オブジェクトのValue
プロパティを設定します。[ブレークポイントの指定] が[明示的な値]
に設定されている場合は、[プロパティ] ダイアログ ボックスの下部にある MATLAB 式のテキスト ボックスと表形式インターフェイスを使用します。データ型を制御するには、DataType
プロパティをauto
以外の値に設定します。この手法を使用してテーブルまたはブレークポイント データの値とデータ型を分離すると、設計の可読性が向上し、理解しやすくなります。
Simulink.NumericType
またはSimulink.AliasType
オブジェクトを使用して以下を実行できます。生成されたコードのデータ型の名前をカスタマイズする。
テーブルまたはブレークポイント データのデータ型をモデルの信号のデータ型と一致させる。
single([1 2 3])
などの型付き式を使用して、組み込みオブジェクトのValue
プロパティを設定します。固定小数点データ型を使用するには、fi
オブジェクトのValue
プロパティを設定します。[ブレークポイントの指定] が[明示的な値]
に設定されている場合は、[プロパティ] ダイアログ ボックスの下部にある MATLAB 式のテキスト ボックスと表形式インターフェイスを使用します。組み込みオブジェクトの
DataType
プロパティを既定値auto
に設定します。次に、テーブルおよびブレークポイント データは、Value
プロパティの設定に使用するデータ型を取得します。この手法を使用して、データ型の情報を
Value
プロパティに格納します。これにより、Simulink.LookupTable
オブジェクトおよびSimulink.Breakpoint
オブジェクトの操作方法を簡略化できます。DataType
プロパティを既定値のままにしておくことができます。後で
Value
プロパティ内のブレークポイントまたはテーブル データを変更する場合、型付き式を使用してデータ型情報を維持します。あるいは、データを変更するためにスクリプトまたはコマンド プロンプトでコマンドを使用する場合は、型付き式を使用せず、添字を使用した代入(:)
を使用します。myLUTObject.Table.Value(:) = [4 5 6];
Value
プロパティに格納されているデータを変更する場合、型付き式または添字を使用した代入を使用しないとデータ型情報が失われます。
サブシステム内のブロックが Simulink.LookupTable
オブジェクトまたは Simulink.Breakpoint
オブジェクトを使用する場合、データ型オーバーライド (固定小数点のインストルメンテーションおよびデータ型オーバーライドの制御を参照) をサブシステムのみに設定することはできません。代わりに、データ型オーバーライドをモデル全体に設定します。
パラメーター オブジェクト内の式のデータ型
式を使用してパラメーター オブジェクト (Simulink.Parameter
など) の値を設定できます。式は、異なるオブジェクト間の数学的関係をエンコードします。この手法を使用する場合、異なるデータ型ルールが適用されます。数式を使用した変数値の設定を参照してください。