メインコンテンツ

データ型の変換

この例では、Data Type Conversion ブロックを使用してデータ型変換を作成する方法を示します。あるいは、Stateflow® チャートまたは MATLAB® Function ブロック内でデータ型の変換を実行することもできますが、効率が悪くなります。

C 構成要素

y1 = (double)u1;

データ型の変換のモデリング パターン — Simulink ブロック

データ型の変換を作成するには、[Simulink]、[Commonly Used Blocks ライブラリ] の Data Type Conversion ブロックを使用します。

1. モデル例 ex_data_type_SL を開きます。

2. Inport ブロックをクリックします。プロパティ インスペクターの [信号属性] で、[データ型]int32 に指定します。

3. Data Type Conversion ブロックをクリックします。プロパティ インスペクターで [出力データ型] パラメーターを double に指定します。

4. [コンフィギュレーション パラメーター] ダイアログ ボックスで、[キャスト モード] パラメーターを Explicit に設定します。既定では、Simulink® は、[キャスト モード] パラメーターを、キャストを最小限に抑える Nominal に設定します。詳細については、Control Cast Expressions in Generated Codeを参照してください。

5. モデルをビルドしてコードを生成するには、Ctrl+B を押します。

生成されたコードが ex_data_type_SL.c に表示されます。

int32_T u1;                            /* '<Root>/u1' */
real_T y1;                             /* '<Root>/y1' */

/* Model step function */
void ex_data_type_SL_step(void)
{
  /* Outport: '<Root>/y1' incorporates:
   *  DataTypeConversion: '<Root>/Data Type Conversion'
   *  Inport: '<Root>/u1'
   */
  y1 = (real_T)u1;
}

double のコード ジェネレーターの型定義は real_T です。

Stateflow チャートにおけるデータ型の変換

Stateflow チャート内でデータ型の変換を実行できます。この例では、Stateflow チャートを使用してデータ型の変換のみを実行するモデルを示します。これは、Data Type Conversion ブロックを使用するよりも効率が低くなります。ただし、他の理由から Stateflow チャートを使用するモデルでデータ型の変換を実行する必要がある場合は、チャート内で変換を実行できます。

1. モデル例 ex_data_type_SF を開きます。

2. Inport ブロックをクリックします。プロパティ インスペクターの [信号属性] で、[データ型]int32 に指定します。

3. [コンフィギュレーション パラメーター] ダイアログ ボックスで、[キャスト モード] パラメーターを Explicit に設定します。

4. モデルをビルドしてコードを生成するには、Ctrl+B を押します。

生成されたコードが ex_data_type_SF.c に表示されます。

int32_T u1;                            /* '<Root>/u1' */
real_T y1;                             /* '<Root>/Type_Conversion' */

/* Model step function */
void ex_data_type_SF_step(void)
{
  /* Chart: '<Root>/Type_Conversion' incorporates:
   *  Inport: '<Root>/u1'
   */
  y1 = (real_T)u1;
}

MATLAB Function ブロックにおけるデータ型の変換

MATLAB Function ブロック内でデータ型の変換を実行できます。この例では、MATLAB Function ブロックを使用してデータ型の変換のみを実行するモデルを示します。これは、Data Type Conversion ブロックを使用するよりも効率が低くなります。ただし、他の理由から MATLAB Function ブロックを使用するモデルでデータ型の変換を実行する必要がある場合は、MATLAB Function ブロック内で変換を実行できます。

1. モデル例 ex_data_type_ML を開きます。

2. MATLAB Function ブロックには次の関数が含まれています。

function y1 = typeconv(u1)
y1 = double(u1); 
end

3. Inport ブロックをクリックします。プロパティ インスペクターの [信号属性] で、[データ型]int32 に指定します。

4. [コンフィギュレーション パラメーター] ダイアログ ボックスで、[キャスト モード] パラメーターを Explicit に設定します。

5. モデルをビルドしてコードを生成するには、Ctrl+B を押します。

生成されたコードが ex_data_type_ML.c に表示されます。

int32_T u_1;                           /* '<Root>/u_1' */
real_T y_1;                            /* '<Root>/MATLAB Function' */

/* Model step function */
void ex_data_type_ML_step(void)
{
  /* MATLAB Function: '<Root>/MATLAB Function' incorporates:
   *  Inport: '<Root>/u_1'
   */
  y_1 = (real_T)u_1;
}

モデル化におけるその他の型変換

出力変数が異なるデータ型として指定されているブロックの出力でも、型変換が行えます。たとえば、Gain ブロックでは、[パラメーターのデータ型]Inherit via internal rule に設定して、出力信号のデータ型を制御できます。型変換の別の例として、Stateflow チャートの境界で行うこともできます。出力変数を別のデータ型として指定できます。

参考

トピック