ブロック パラメーターのデータ型の制御
Gain ブロックの [ゲイン] パラメーターなどのブロック パラメーターは、信号がデータ型をもつのと同じようにデータ型をもちます (信号のデータ型の制御を参照)。ブロック パラメーター値の設定に使用する MATLAB® 変数、Simulink.Parameter
オブジェクト、および他のパラメーター オブジェクトもデータ型をもちます。ブロック パラメーターのデータ型を制御して、次を可能にします。
ハードウェアでの制御アルゴリズムの実行を正確にシミュレーションできる。
効率的なコードを生成できる。
生成されたコードをカスタム コードと統合できる。
ターゲットのハードウェアでサポートされないデータ型の使用を回避できる。
データ型の継承による保守労力の軽減
既定では、ブロック パラメーター、データ型 double
を使用する数値 MATLAB 変数、および Simulink.Parameter
オブジェクトは、継承された状況依存のデータ型指定によりデータ型を取得します。たとえば、Gain ブロックの入力信号と出力信号がデータ型 single
を使用する場合、[ゲイン] パラメーターは通常同じデータ型を使用します。Simulink.Parameter
オブジェクトを使用して、ブロック パラメーターの値を設定する場合、既定ではオブジェクトがパラメーターと同じデータ型を使用します。この継承を利用して、パラメーターのデータ型を明示的に指定するのを回避できます。
一部の継承ルールでは、対応する信号が使用するデータ型以外のパラメーターのデータ型が選択されます。たとえば、次の場合を仮定します。
Gain ブロックの入力信号と出力信号は、2 進小数点のみのスケーリングで固定小数点データ型を使用する。
[パラメーター属性] タブで、[パラメーターのデータ型] が
[継承: 内部ルールによる継承]
(既定) に設定します。[パラメーター属性] タブで、[パラメーターの最小値] および [パラメーターの最大値] を使用してパラメーターの最小値と最大値を指定している。
データ型設定 [継承: 内部ルールによる継承]
により、ブロックでは、信号が使用するデータ型とは異なるデータ型を、異なる語長またはスケーリングで選択できます。パラメーターに指定した最小値と最大値は、ブロックが選択するスケーリングに影響します。
内部ルール ([継承: 内部ルールによる継承]
) を選択して Simulink® でのデータ型の選択を有効にする場合は、シミュレーションまたはコードの生成前に、ターゲット ハードウェアの特性を設定します。内部ルールでは、これらの設定を使用して、効率的な生成コードを生成するデータ型を選択できます。
状況依存データ型指定
MATLAB 変数または Simulink.Parameter
オブジェクトを使用してブロック パラメーターの値を設定する場合は、"状況依存" データ型指定を使用するように変数またはパラメーター オブジェクトを設定できます。シミュレーションまたはコードの生成を実行する場合、変数またはパラメーター オブジェクトはブロック パラメーターと同じデータ型を使用します。この手法では、変数またはパラメーター オブジェクトのデータ型をブロック パラメーターのデータ型と一致させることができます。ブロック パラメーターおよび変数またはオブジェクトのデータ型を制御するには、ブロック パラメーターのデータ型のみを指定します。
状況依存データ型指定を使用するには、MATLAB 変数の値を double
値に設定します。Simulink.Parameter
オブジェクトの場合は、double
値を使用して Value
プロパティを設定し、DataType
プロパティを auto
(既定値) に設定します。
構造体フィールドに対する状況依存データ型指定
関連するブロック パラメーター定義を構造体に整理で説明したように、複数のブロック パラメーター値を 1 つの構造体に整理することができます。
パラメーター構造体のフィールドでは、状況依存データ型指定はサポートされません。しかし、フィールドのデータ型をモデル内の別のデータ項目のデータ型と一致させるため、バス オブジェクトとデータ型オブジェクトを使用できます。
Simulink.Bus
オブジェクトを構造体のデータ型として使用します。Simulink.AliasType
オブジェクトまたはSimulink.NumericType
オブジェクトを、バス オブジェクトの要素のデータ型およびターゲット データ項目のデータ型として使用します。
パラメーターのデータ型を明示的に指定する手法
離散時間シミュレーションとコード生成でサポートされる多くのブロック (組み込みの Discrete ライブラリのブロックなど) を使って、パラメーターのデータ型を明示的に指定できます。たとえば、n-D Lookup Table ブロックのダイアログ ボックスの [データ型] タブで、[テーブル データ] パラメーターを使用してルックアップ テーブル データのデータ型を指定できます。Gain ブロックのダイアログ ボックスで、[パラメーター属性] タブを使用して [パラメーターのデータ型] を設定します。これは [ゲイン] パラメーターのデータ型を制御します。
Continuous ライブラリ内のブロックなど、一部のブロックでは、パラメーターのデータ型を指定できません。これらのブロック パラメーターは内部ルールを使用してデータ型を選択します。このようなパラメーターのデータ型を間接的に制御するには、代わりにデータ型を Simulink.Parameter
オブジェクトに適用します。
Simulink.Parameter
オブジェクトまたは他のパラメーター オブジェクトを使用してブロック パラメーターの値を設定する場合は、オブジェクトの DataType
プロパティを使用してデータ型を指定できます。
モデル引数を使用すると、次のデータ型を指定できます。
モデル ワークスペースに保存するモデル引数。
一部のブロック (Discrete ライブラリのブロックなど) では、モデル引数を使用するブロック パラメーター。
Model ブロックで指定する引数値。
通常、これらのデータ型の既定の設定では継承と状況依存データ型指定を使用します。たとえば、Simulink.Parameter
オブジェクトの DataType
プロパティの既定値は auto
です。この場合、パラメーター オブジェクトはオブジェクトを使用するブロック パラメーターからデータ型を取得します。
データ型を明示的に指定するには、ブロックのダイアログ ボックスとプロパティのダイアログ ボックスでデータ型アシスタントを使用できます。データ型アシスタントの詳細については、データ型アシスタントを利用したデータ型の指定を参照してください。
一括編集のためのモデル データ エディターの使用
モデル データ エディター ([モデル化] タブで [モデル データ エディター] をクリック) を使用して、複数のブロック パラメーターに同じデータ型を一度に指定できます。[パラメーター] タブで、[ビューの変更] ドロップダウン リストを [設計]
に設定し、[データ型] 列を使用してデータ型を指定します。
詳細については、モデル データ エディターを参照してください。
調整可能なブロック パラメーターに最適な精度の固定小数点スケーリングの計算
モデルに固定小数点データ型を適用する際は、データ型アシスタントと固定小数点ツールを使用して、調整可能なブロック パラメーターに最高精度のスケーリングを計算できます。ブロック パラメーター、Simulink.Parameter
オブジェクトまたはその他のパラメーター オブジェクトは、生成されたコードにメモリ内に格納されている変数として表示される場合は "調整可能" です。
選択されるスケーリングは、パラメーターに代入する値の範囲に対応しなければなりません。ツールで適切なスケーリングを計算できるようにするには、ブロックまたはパラメーター オブジェクトで範囲情報を指定します。その後、次のいずれかの方法を使用してスケーリングを計算します。
固定小数点ツールを使用して、モデルまたはサブシステム全体をオートスケールします。このツールは、ブロック パラメーター、
Simulink.Parameter
オブジェクト、信号、状態などのデータ項目に対して固定小数点データ型を推奨して適用することができます。それぞれのスケーリングを計算するように個々のブロック パラメーターまたはパラメーター オブジェクトを構成します。
この手法を使用すると、後でパラメーターの値の範囲を変更した場合に、モデル全体をオートスケールせずにユーザーまたはモデルがスケーリングを再計算することができます。ただし、パラメーターの値の範囲を変更すると関連する信号の値の範囲も変わる場合は、信号の新しいスケーリングを手動で計算して適用するか、固定小数点ツールを使用してモデルまたはサブシステムをオートスケールしなければなりません。
固定小数点データ型、ブロック パラメーターおよびその他のツールや概念の基本情報については、次の表の情報を使用してください。
トピック | 詳細 |
---|---|
固定小数点データ型とスケーリング | Simulink における固定小数点数 (Fixed-Point Designer) |
ブロック パラメーターとパラメーター オブジェクトの値の範囲情報を指定する方法 | ブロック パラメーターの最小値と最大値の指定 |
データ型アシスタントを使用する方法 | データ型アシスタントを利用したデータ型の指定 |
生成コードにおける調整可能性とブロック パラメーターの表現 | 生成されたコードによる内部信号、状態、パラメーター データの保存方法 (Simulink Coder)および生成されたコードにおける調整可能なキャリブレーション パラメーターの作成 (Simulink Coder) |
固定小数点ツールを使用したモデル全体のオートスケーリング
固定小数点ツールを使用すると、モデル内のデータ項目をオートスケールできます。このデータ項目には、調整可能なパラメーターや、そのパラメーターに応じて異なる値をもつ信号が含まれます。この手法を使用する場合は、次のようにします。
パラメーターを調整可能に構成するには、[モデル パラメーター設定] ダイアログ ボックスではなくパラメーター オブジェクト (
Simulink.Parameter
など) を使用します。固定小数点ツールではパラメーター オブジェクトはオートスケールできますが、[モデル パラメーター設定] ダイアログ ボックスで選択した数値変数はオートスケールできません。モデルで既に [モデル パラメーター設定] ダイアログ ボックスを使用している場合は、代わりに、関数
tunablevars2parameterobjects
を使用してパラメーター オブジェクトを作成します。Simulink.Parameter
オブジェクトを使用してブロック パラメーター値を設定するときは、ブロックではなくオブジェクトで値の範囲情報を指定します。固定小数点ツールは、各オブジェクトの範囲情報を使用して、そのオブジェクトのデータ型を推奨します。構造体のフィールドとして保存したパラメーター値をツールでオートスケールできるようにするには、
Simulink.Bus
オブジェクトを構造体全体のデータ型として使用します。バス オブジェクト内の対応する要素のMin
プロパティとMax
プロパティを使用して、各フィールドの範囲情報を指定します。これにより、ツールでDataType
プロパティを使用して各要素にデータ型を適用できるようになります。バス オブジェクトをパラメーター構造体のデータ型として使用するには、パラメーター オブジェクトの作成によるフィールドのデータ型と特性の制御を参照してください。
固定小数点ツールが推奨するデータ型を適用する前に、データ型がツールによって変更されないようにする必要があるパラメーターとパラメーター オブジェクトに対する推奨をクリアします。たとえば、次のエンティティに対する推奨をクリアします。
ImportedExtern
などのストレージ クラスを適用してユーザー作成のコードから生成コードにインポートしたパラメーター オブジェクト。モデル ワークスペース内の
Simulink.Parameter
モデル引数。あるいは、モデルのオートスケーリングを行う前に、これらのパラメーター オブジェクトを MATLAB 数値変数に置き換えて、固定小数点ツールによってオートスケーリングが実行されないようにすることを検討してください。
ツールでモデル引数をオートスケールできるようにすると、モデル引数の値 (親モデル内の Model ブロックで指定した値)、モデル ワークスペース内のモデル引数、モデル内のクライアント ブロック パラメーターの間でデータ型の意図しない不一致が生じるリスクが高くなります。
DataType
プロパティがauto
(状況依存) に設定されているパラメーター オブジェクト。パラメーター オブジェクトで引き続き状況依存データ型指定を使用する場合は、推奨をクリアします。
固定小数点ツールを使用した Simulink.Parameter
オブジェクトのオートスケーリングの詳細については、固定小数点ツールを使用したデータ オブジェクトのオートスケーリング (Fixed-Point Designer)を参照してください。
個々のパラメーターに最適な精度のスケーリングの計算
それぞれに最高精度のスケーリングを計算するようにブロック パラメーターまたは Simulink.Parameter
オブジェクトを構成できます。まず、ターゲット パラメーターまたはパラメーター オブジェクトの値の範囲情報を指定します。次に、データ型アシスタントまたは関数 fixdt
を使用して、パラメーターまたはオブジェクトにデータ型を適用します。これらの手法は、固定小数点ツールでモデルをオートスケールしない場合に使用します。
ブロック パラメーターによる最高精度のスケーリングの自動計算の有効化. 一部のブロック (通常は Discrete ライブラリ内のブロック) のパラメーターで、最高精度の固定小数点スケーリングが自動的に計算されるようにすることができます。この手法は、範囲とデータ型の情報をパラメーター オブジェクトではなくモデルに格納するために使用します。この手法を使用すると、後で範囲情報を変更した場合に、ブロック パラメーターで最高精度のスケーリングが自動的に再計算されます。
ブロック ダイアログ ボックスで関数 fixdt
を使用して、スケーリングが指定されていない固定小数点データ型を指定します。たとえば、ルックアップ テーブル データに最適な精度のスケーリングを使用して、そのデータを 16 ビット ワードに格納します。
n-D Lookup Table ブロックの [データ型] タブの [最小値] 列と [最大値] 列で、テーブル データの要素の値の範囲を指定します。
[データ型] 列で、テーブル データ型を
fixdt(1,16)
に設定します。調整可能な
Simulink.Parameter
オブジェクトを使用してテーブル データ パラメーターの値を設定する場合は、そのオブジェクトのDataType
プロパティをauto
に設定します。生成されたコードでは、パラメーター オブジェクトはブロック パラメーターと同じスケーリングを使用します。
コードをシミュレートまたは生成するとき、ルックアップ テーブル データは、指定した範囲情報に応じて異なる 2 進小数点スケーリングをもつ 16 ビットの符号付き固定小数点データ型を使用します。スケーリングの計算により、固定小数点型が範囲内の値を表現できるようになります。後で最小値または最大値を変更すると、コードをシミュレートまたは生成するときに、ブロックでスケーリングが再計算されます。
パラメーター オブジェクトのスケーリングの計算. Simulink.Parameter
オブジェクトを使用して複数のブロック パラメーターの値を設定している場合に、それらのブロック パラメーターで異なるデータ型 (異なる固定小数点スケーリングを含む) が使用されているときは、そのオブジェクトの DataType
プロパティを auto
(既定の設定) に設定することはできません。代わりに、オブジェクトで範囲とデータ型の情報を指定して、パラメーター オブジェクトに最適な精度の固定小数点スケーリングを計算することができます。この手法は、範囲とデータ型の情報をブロック ダイアログ ボックスではなくパラメーター オブジェクトに格納するためにも使用できます。この手法を使用すると、後で範囲情報を変更した場合に、データ型アシスタントを使用して最高精度のスケーリングを再計算しなければなりません。
たとえば、値 15.25
を表すパラメーター オブジェクトを作成するとし、その値の設計範囲が 0.00
~ 32.00
であるとします。最高精度のスケーリングを計算するには、データ型アシスタントを使用します。
コマンド プロンプトで、値が
15.25
のパラメーター オブジェクトをベース ワークスペースに作成します。myParam = Simulink.Parameter(15.25);
MATLAB ワークスペース ブラウザーでオブジェクト
myParam
をダブルクリックします。プロパティ ダイアログ ボックスが開きます。オブジェクトで範囲情報を指定します。たとえば、[最小値] を
0.00
、[最大値] を32.00
に設定します。[データ型] を
fixdt(0,16,0)
に設定します。データ型アシスタントを展開して [最高精度のスケーリングを計算] をクリックします。
データ型が
fixdt(0,16,0)
からfixdt(0,16,10)
に変わります。
スケーリングの計算 (小数部の長さ 10 ビット) により、固定小数点データ型が指定の範囲内のパラメーター値を表現できるようになります。
範囲とデータ型の情報をパラメーター オブジェクトで指定する場合は、そのオブジェクトを使用するブロックから範囲とデータ型の情報を削除することを検討してください。固定小数点ツールなどの一部のツールでは、ブロックで指定した範囲情報は無視され、パラメーター オブジェクト内の情報のみが使用されます。ブロックから情報を削除すると、混乱やユーザー エラーを防ぐことができます。
たとえば、Gain ブロック ダイアログ ボックスの [パラメーター属性] タブで、[パラメーターの最小値] と [パラメーターの最大値] を []
に設定します。[パラメーターのデータ型] を [継承: 'Gain' から継承]
などの継承されたデータ型に設定して、ブロック パラメーターでパラメーター オブジェクトと同じデータ型が使用されるようにします。
量子化とオーバーフローによる数値精度の問題の検出
ブロック パラメーター、MATLAB 変数またはパラメーター オブジェクトのデータ型で、指定した値を表すことができない場合、データ型は、数値精度を下げながら、値を量子化します。たとえば、32 ビットの浮動小数点データ型 single
(C コードでは float
) はパラメーター値 1.73
を正確に表すことができません。データ項目の実際値が、データ型で表すことができる値の範囲外にある場合、オーバーフローによって情報が失われる可能性があります。
これらの問題を検出するには、[コンフィギュレーション パラメーター] 、 [診断] 、 [データ有効性] 、 [パラメーター] で診断コンフィギュレーション パラメーターを使用します。これらの診断コンフィギュレーション パラメーターの値を [警告]
または [エラー]
に設定します。
ダウンキャストの検出
桁落ちの検出
アンダーフローの検出
オーバーフローの検出
パラメーター データのカスタム C データ型の再利用
モデルで、既存の C コードで定義されている構造体などのカスタム C データ型に適合するパラメーター データを作成できます。このデータを使用して以下を実行します。
既存の C コードを Simulink モデルで置き換える。
Simulink でのシミュレーション用の C コードを統合する (たとえば、レガシ コード ツールを使用)。
既存のコードと統合できるコードの生成を準備する (Simulink Coder™)。
以下の手法を使用してカスタム データ型を一致させます。
構造体型の場合は、
Simulink.Bus
オブジェクトを作成します。このオブジェクトをSimulink.Parameter
オブジェクトに保存する構造体のデータ型として使用します。関連するブロック パラメーター定義を構造体に整理を参照してください。列挙型の場合は、列挙型クラスを作成してブロック パラメーターのデータ型として使用します。Simulink モデルでの列挙型データの使用を参照してください。
プリミティブ数値データ型のエイリアスを表す
typedef
ステートメントを一致させるには、Simulink.AliasType
オブジェクトをブロック パラメーターのデータ型として使用します。Simulink.AliasType
を参照してください。
これらのクラスとオブジェクトを作成するには、関数 Simulink.importExternalCTypes
を使用します。
モデル内の MATLAB Function ブロックまたは Stateflow® チャートに、インポートされた列挙型または構造体型が使用されている場合、モデル コンフィギュレーション パラメーターが外部ヘッダー ファイルから型定義をインクルードする (#include
) ように構成します。インポートされたバスと列挙型定義の制御(MATLAB Function ブロックの場合)、およびStateflow チャート内のカスタム コードの変数および関数へのアクセス (Stateflow)、およびStateflow チャートのカスタム構造体の統合 (Stateflow)(チャートの場合) を参照してください。
数式のデータ型
数式を使用してブロック パラメーターを指定する場合、ブロックは MATLAB および Simulink のデータ型ルールを組み合わせて使用して最終的なパラメーターのデータ型を判断します。
たとえば、int8Param
と doubleParam
の 2 つのパラメーター オブジェクトを定義し、これらのオブジェクトを使用して Constant ブロックで [定数値] パラメーターを指定するとします。
int8Param = Simulink.Parameter(3); int8Param.DataType = 'int8'; doubleParam = Simulink.Parameter(9.36); doubleParam.DataType = 'double';
Constant ブロックは、以下の手順を使用して [定数値] パラメーターのデータ型を判断します。
各パラメーター オブジェクトは指定された数値を指定されたデータ型にキャストします。
パラメーター オブジェクト データ型 数値 結果 int8Param
int8
3
int8(3)
doubleParam
double
9.36
double(9.36)
ブロックは、MATLAB ルールを使用して指定された式
int8Param * doubleParam
を評価します。double
データ型と別の型を含む式は、別の型の結果を返します。したがって、式int8(3) * double(9.36)
の結果はint8(28)
となります。
パラメーター オブジェクト (Simulink.Parameter
など) の値を設定するのに式を使用している場合、その式の中に使用されているパラメーター オブジェクトは異なるデータ型ルールに従います。DataType
プロパティの auto
設定は、少し異なる意味を持ちます。数式を使用した変数値の設定を参照してください。
生成されたコードにおけるブロック パラメーターのデータ型
生成されたコードにおけるパラメーターのデータ型の制御の詳細については、生成されたコードにおけるパラメーターのデータ型 (Simulink Coder)を参照してください。