Main Content

変数のデータ型の定義と変更

MATLAB Function ブロックの変数を作成する際、[タイプ] プロパティを使用してデータ型を設定できます。変数のデータ型は継承できるほか、組み込み、固定小数点、または列挙のいずれかのデータ型に設定できます。変数を非バーチャル バスにすることもできます。既定では、MATLAB Function ブロックの変数はデータ型を継承します。

変数の作成の詳細については、MATLAB Function ブロックの変数の作成と定義を参照してください。

変数のデータ型の指定

データ型は、[シンボル] ペインとプロパティ インスペクター、またはモデル エクスプローラーを使用して指定できます。

[シンボル] ペインとプロパティ インスペクターを使用してデータ型を指定するには、以下のようにします。

  1. MATLAB Function ブロックをダブルクリックして MATLAB Function ブロック エディターを開きます。

    This image shows the MATLAB Function Block Editor that opens for a new MATLAB Function block. The Function tab is selected in the Simulink Editor.

  2. [関数] タブで、[データの編集] をクリックします。

  3. [シンボル] ペインで変数を選択します。

  4. プロパティ インスペクターの [プロパティ] タブで、[タイプ] プロパティからデータ型を選択します。

モデル エクスプローラーを使用して変数のデータ型を指定するには、以下のようにします。

  1. モデル エクスプローラーを開きます。[モデル化] タブの [設計] セクションで、[モデル エクスプローラー] をクリックします。

  2. [モデルの階層構造] ペインで、MATLAB Function ブロックを選択します。

  3. 変更する変数をクリックします。

  4. [タイプ] プロパティからデータ型を選択します。

モデル エクスプローラーでは、データ型のオプションをフィルター処理することもできます。[一般] タブで、[データ型アシスタントを表示] ボタン をクリックすると、データ型アシスタントのパラメーターが表示されます。次に、[モード] パラメーターからオプションを選択します。選択したモードに基づいて、以下のようにデータ型を指定します。

モード指定する項目
継承 (既定の設定)

継承されるデータは [スコープ] プロパティによって異なります。

  • [スコープ][入力] の場合、データ型は所定の端子への入力信号から継承されます。

  • [スコープ][出力] の場合、データ型は所定の端子への出力信号から継承されます。

  • [スコープ][パラメーター] の場合、データ型は関連付けられているパラメーターから継承されます。これは Simulink® マスク サブシステムまたは MATLAB® ワークスペースで定義できます。

Built in組み込みデータ型のリストから選択します。
Fixed point

固定小数点データのプロパティを指定します。

Enumeratedベース ワークスペースで定義している Simulink.IntEnumType オブジェクトの名前を入力します。列挙型のコードの生成を参照してください。
Bus Object

[バス オブジェクト] フィールドで Simulink.Bus オブジェクトの名前を入力して MATLAB 構造体のプロパティを定義します。バス オブジェクトをベース ワークスペース内に定義する必要があります。MATLAB Function ブロック内での構造体の作成を参照してください。

メモ

[編集] ボタンをクリックすると、Simulink 型エディターを使用して Simulink.Bus オブジェクトを作成したり変更したりできます。

Expressionデータ型として評価される式を入力します。

データ型の継承

MATLAB Function ブロックの変数は、固定小数点データ型も含めて、接続されている信号からそのデータ型を継承できます。変数でデータ型を継承するには、[タイプ] プロパティを [継承: Simulink と同じ] に設定します。

引数は接続されている信号から実数/複素数を継承することもできます。実数/複素数を継承するには、[実数/複素数] プロパティを [継承] に設定します。

モデルをビルドした後、モデル エクスプローラーの [CompiledType] 列には、Simulink から継承された実際の型が表示されます。Simulink で期待される型が、推測されたデータ型に一致する場合には、継承は成功です。

組み込みデータ型

モデル エクスプローラーで、データ型アシスタントを展開して [モード][組み込み] に設定すると、[タイプ] を以下の組み込みデータ型に設定できます。組み込みデータ型は次のとおりです。

データ型説明

double

64 ビット倍精度浮動小数点

single

32 ビット単精度浮動小数点

half

半精度データ型は 16 ビットのメモリを占有しますが、その浮動小数点表現を使ってこのデータ型で同じサイズの整数データ型または固定小数点データ型よりも広いダイナミック レンジを処理できます。Simulink の半精度データ型 (Fixed-Point Designer)を参照してください。

int64

64 ビット符号付き整数

int32

32 ビット符号付き整数

int16

16 ビット符号付き整数

int8

8 ビット符号付き整数

uint64

64 ビット符号なし整数

uint32

32 ビット符号なしの整数

uint16

16 ビット符号なしの整数

uint8

8 ビット符号なしの整数

boolean

boolean

string

string スカラー

Fixed-Point Designer のデータ型のプロパティ

MATLAB Function ブロックで変数を固定小数点数として表すには、Fixed-Point Designer™ をインストールする必要があります。

固定小数点では次のプロパティを設定できます。

符号属性

固定小数点変数を [符号付き][符号なし] のどちらにするかを指定します。符号付き変数は正または負の数値を表します。符号なし変数は正の値のみを表します。既定の設定は [符号付き] です。

語長

量子化された整数をもつワードのビット サイズを指定します。ワード サイズが大きいと、小さい場合に比べて、大きな値を高精度で表現します。語長には 0 ~ 128 ビットの整数を指定できます。既定の設定は 16 です。

スケーリング

オーバーフローを避け、量子化の問題を最小限に抑えるための固定小数点変数のスケーリング方法を指定します。以下のスケーリング モードを選択できます。

スケーリング モード説明
2 進小数点 (既定の設定)

データ型アシスタントに 2 進小数点の位置を指定する [小数部の長さ] パラメーターが表示されます。

2 進小数点は正または負の整数になります。正の整数を入力すると、その値に応じて 2 進小数点は右端のビットの左側に配置されます。たとえば、2 は小数点を右から 2 番目のビットの前に設定します。負の整数を入力すると、以下の例のように、その値に応じて 2 進小数点は右端のビットのさらに右側に配置されます。

Shows a graphical representation of binary points.

既定の設定は 0 です。

勾配とバイアス

データ型アシスタントに [勾配] パラメーターと [バイアス] パラメーターが表示されます。

  • 勾配には正の実数を入力します。既定の設定は 1.0 です。

  • バイアスには実数を入力します。既定値は 0.0 です。

勾配とバイアスは、MATLAB ワークスペースで定義したパラメーターを含む式として入力できます。

メモ

2 進小数点のスケーリングを使用すると、生成されたコードへの固定小数点数の実装を簡素化できます。2 進小数点のスケーリングを使用する固定小数点数の演算は単純なビット シフトで実行されるので、個別の勾配値とバイアス値に対して手間のかかるコード実装を行う必要がなくなります。

データ型オーバーライド

データ型オーバーライド設定が Inherit または Off であるかを指定します。詳細については、MATLAB Function ブロックを使用したデータ型オーバーライド (Fixed-Point Designer)を参照してください。

最高精度のスケーリングを計算

[2 進小数点][勾配とバイアス] の両方のスケーリングについて、指定した [最小値] プロパティと [最大値] プロパティに基づいて、最高精度の値を Simulink で自動的に計算します。

最高精度のスケーリング値を自動的に計算するには、以下のようにします。

  1. [最小値] プロパティまたは [最大値] プロパティを指定します。

  2. [最高精度のスケーリングを計算] をクリックします。

Simulink でスケーリングの値が計算され、[小数部の長さ] フィールドまたは [勾配] フィールドと [バイアス] フィールドに表示されます。

メモ

[最小値] プロパティと [最大値] プロパティは、[スコープ] プロパティが [定数] または [パラメーター] に設定された変数には適用されません。それらの種類の変数については、最高精度のスケーリングをソフトウェアで計算することはできません。

固定小数点の詳細

データ型アシスタントで定義された固定小数点変数の情報が表示されます。

  • MinimumMaximum には、[最小値] プロパティと [最大値] プロパティで指定した値と同じ値が表示されます。

  • Representable minimumRepresentable maximum、および Precision には、固定小数点変数で表現できる最小値、最大値、および精度が表示されます。

This image shows the fixed-point details for variable named data.

モデルをコンパイルしてからでないとフィールドの値を特定できない場合、[固定小数点の詳細] サブペインの値は Unknown として表示されます。[固定小数点の詳細] サブペインに表示された値は、固定小数点変数を定義する値を変更しても自動的には更新されません。[固定小数点の詳細] サブペインに表示された値を更新するには、[詳細の更新] をクリックします。

[詳細の更新] をクリックしても変数は変更されません。表示のみが変更されます。表示された値を適用するには、[適用] または [OK] をクリックします。

[固定小数点の詳細] サブペインに、固定小数点変数の指定によって生じる問題が示されます。たとえば、次の図では 2 つの問題が表示されています。

This image shows the fixed-point details for data named data with two issues.

Maximum のラベルが付いた行は、[最大値] プロパティで指定された値が固定小数点変数で表現できないことを示しています。問題を修正するには、以下のいずれかの変更を行って、固定小数点データ型で最大値を表現できるようにします。

  • [最大値] プロパティの値を小さくする。

  • [語長] を大きくする。

  • [小数部の長さ] を小さくする。

Minimum のラベルが付いた行には、Cannot evaluate というメッセージが表示されています。これは、[最小値] プロパティで指定された式 MySymbol を評価した結果、数値が返されなかったことが原因です。式が正常に評価されなかった場合、[固定小数点の詳細] サブペインには、無効な値の代わりに未評価の式が表示されます (必要な場合は 10 文字に切り捨て)。この問題を修正するには、ベース ワークスペースで MySymbol を定義して数値を指定します。

[詳細の更新] をクリックすると、問題のインジケーターと説明が削除され、未評価のテキストの代わりに MySymbol の値が表示されます。

式によるデータ型の指定

モデル エクスプローラーまたはプロパティ インスペクターを使用して、MATLAB Function ブロックの変数の型を式として指定できます。

モデル エクスプローラーを使用する場合は、[モード] プロパティを Expression に設定します。[タイプ] プロパティで <data type expression> をデータ型として評価される式で置き換えます。

プロパティ インスペクターを使用する場合は、[タイプ] プロパティをダブルクリックし、内容をクリアして式を入力します。

次の式を使用できます。

  • MATLAB ワークスペースのエイリアス型。Simulink.AliasType の説明を参照してください。

  • 関数 fixdt。固定小数点または浮動小数点データ型を記述する Simulink.NumericType オブジェクトの作成に使用します。

  • type (Stateflow) 演算子。以前に定義されたデータに基づくデータ型の指定に使用します。

たとえば、ワークスペース変数 myDataTypesingle データ型のエイリアスとして指定し、MATLAB Function ブロックの入力変数の [タイプ] プロパティで式として使用するとします。次のコマンドを入力して、Simulink.AliasType クラスのインスタンスを作成し、その BaseType プロパティを設定します。

myDataType = Simulink.AliasType;
myDataType.BaseType = "single";

プロパティ インスペクターで、[タイプ] プロパティの値としてデータ型のエイリアス名 myDataType を入力します。

This image shows the property inspector after entering the expression for the data type.

メモ

いずれかの変数がエイリアス タイプを使用していて可変サイズである場合、MATLAB Function ブロックではコード生成はサポートされません。この制限は入力変数または出力変数には適用されません。可変サイズ変数の定義とそれを使用したコードの生成の詳細については、可変サイズの MATLAB Function ブロック変数の宣言および可変サイズの配列のコード生成を参照してください。

プログラムによる変数のデータ型の変更

ブロックの Stateflow.EMChart オブジェクトを取得することで、プログラムによって MATLAB Function ブロックの変数のデータ型を変更できます。詳細については、プログラムによる MATLAB Function ブロックの設定を参照してください。

参考

関連するトピック