メインコンテンツ

MATLAB Function ブロック内での構造体の作成

MATLAB Function ブロックで入力変数、出力変数、ローカル変数、永続変数、またはパラメーター変数用の構造体を作成および使用できます。MATLAB Function ブロック内の構造体にはあらゆるデータ型とサイズのフィールドを含めることができ、Mux 信号、バス、構造体の配列なども含めることができます。

構造体を作成する前に、MATLAB Function 変数のスコープを決定する必要があります。MATLAB Function ブロックの変数の作成と定義を参照してください。

入力変数

入力変数用の構造体を作成すると、MATLAB Function ブロックは入力信号から構造体のデータ型、サイズ、および実数/複素数を決定します。入力変数用の構造体を定義するには、以下のようにします。

  1. 構造体を定義する Simulink.Bus オブジェクトをベース ワークスペースに作成します。

  2. MATLAB Function ブロックに対して入力変数を指定するか追加します。入力変数では、[スコープ] プロパティが [入力] に設定されています。

  3. 変数の [型] プロパティを [継承: Simulink と同じ] または [Bus: <object name>] に設定します。<object name> には、構造体プロパティを定義する Simulink.Bus オブジェクトの名前を入力します。

Simulink® モデル内のバスが MATLAB Function ブロック内に構造体として表示されます。

出力変数

出力変数用の構造体を作成する場合は、Simulink.Bus オブジェクトを作成してから、MATLAB® 関数コードで変数の型、サイズ、および実数/複素数を定義します。コードとオブジェクトのプロパティが一致している必要があります。出力変数用の構造体を定義するには、以下のようにします。

  1. ベース ワークスペースで Simulink.Bus オブジェクトを作成して構造体を定義します。

  2. MATLAB Function ブロックに対して出力変数を指定するか追加します。出力変数では、[スコープ] プロパティが [出力] に設定されています。

  3. [型] プロパティを [Bus: <object name>] に設定します。<object name> には、構造体を定義する Simulink.Bus オブジェクトの名前を入力します。

  4. コード生成のための構造体の定義に説明されているように、MATLAB 関数内で変数として出力構造体を初期化します。各要素の数、型、およびサイズなど、出力変数の構造体の構成を Simulink.Bus オブジェクトに一致させます。

MATLAB Function ブロックからの構造体の出力が、Simulink モデルのバスとして表示されます。MATLAB Function ブロックでは、非バーチャル バスの出力はサポートされますが、バーチャル バスの出力はサポートされません。

ローカル変数

構造体であるローカル変数を定義するには、コード生成のための構造体の定義で説明されているように、MATLAB 関数で構造体を定義します。[シンボル] ペインではローカル変数を定義しません。また、プロパティ インスペクターではプロパティを変更できません。既定では、MATLAB Function ブロックは各タイム ステップの後にローカル変数値をクリアします。

永続変数

構造体である永続変数を定義するには、関数コードで変数を永続として宣言します。persistent およびMATLAB 関数での永続変数の初期化を参照してください。たとえば、永続変数 myVar を宣言するには、以下を入力します。

persistent myVar

次に、MATLAB 関数で変数構造体を定義します。[シンボル] ペインでは永続変数を定義しません。また、永続変数には、プロパティ インスペクターで変更できるプロパティはありません。

パラメーター変数

構造体であるパラメーター変数を定義するには、以下のようにします。

  1. ベース ワークスペース、モデル ワークスペース、または MATLAB Function ブロックを含むマスク サブシステムで構造体変数を作成します。

  2. MATLAB Function ブロックに対してパラメーター変数を指定するか追加します。パラメーター変数の定義による複数の MATLAB Function ブロックでのデータの使用を参照してください。パラメーター変数では、[スコープ] プロパティが [パラメーター] に設定されています。変数の名前を一致させます。

調整不可能な構造体パラメーターの fimath プロパティ

構造体の初期値により、固定小数点値を含む調整不可能な構造体パラメーターの fimath プロパティが決まります。プロパティ インスペクターで定義した MATLAB Function ブロックの fimath プロパティでは、これらの値は指定されません。

グローバル変数

MATLAB Function ブロックでグローバル変数を定義して、Simulink.Signal オブジェクトまたは Data Store Memory ブロックからシミュレーション データにアクセスできます。MATLAB Function ブロックでのデータ ストアのデータへのアクセスを参照してください。構造体であるグローバル変数を定義するには、以下のようにします。

  1. ベース ワークスペースで Simulink.Bus オブジェクトを作成して構造体を定義します。

  2. MATLAB Function ブロックに対してグローバル変数を指定するか追加します。グローバル変数では、[スコープ] プロパティが [データ ストア メモリ] に設定されています。このスコープをもつ変数は、Data Store Memory ブロックまたは Simulink.Signal オブジェクト内の関連データからプロパティを継承します。

  3. 関数コードでグローバル変数を宣言します。たとえば、グローバル変数 myVar を宣言するには、以下を入力します。

    global myVar

例については、データ ストア メモリから MATLAB Function ブロックへのバスの書き込みを参照してください。

構造体とフィールドへの値の代入

構造体を定義した後に、構造体、サブ構造体、または構造体変数のフィールドに値を代入できます。以下のガイドラインに従います。

演算条件
構造体を別の構造体に代入各構造体のフィールドの数、データ型、サイズの定義が同じであること。ベース ワークスペースで Simulink.Bus オブジェクトとして定義されている、またはローカル構造体として暗黙的に宣言されていること。
構造体を別の構造体のサブ構造体に代入構造体とサブ構造体のフィールドの数、データ型、サイズの定義が同じであること。ベース ワークスペースで Simulink.Bus オブジェクトとして定義されている、またはローカル構造体として宣言されていること。
構造体の要素を別の構造体の要素に代入要素は同じデータ型とサイズであること。

たとえば、次の表は、MATLAB Function ブロックを使用したバスの読み書きで説明されているモデルの仕様に基づいた、構造体代入の有効な例と無効な例を示しています。

代入有効か無効か理由
outbus = mystruct;有効Simulink.Bus オブジェクト MainBus は構造体 outbus を定義しており、mystruct のローカル定義が MainBus のフィールド プロパティに一致している。
outbus = inbus;有効Simulink.Bus オブジェクト MainBusoutbusinbus の両方を定義している。
outbus1 = inbus.ele3;有効Simulink.Bus オブジェクト SubBusoutbus1inbus.ele3 の両方を定義しているため、型とサイズが同じである。
outbus1 = inbus;無効異なる Simulink.Bus オブジェクトが構造体 outbus1 および inbus を定義している。

MATLAB Function ブロック内の構造体の制限事項

  • Simulink 信号、パラメーター、データ ストア メモリの cell 配列またはクラスを含む構造体は使用できません。

  • 可変サイズのデータをバス配列と併用することはできません。非バーチャル バスのバス配列へのグループ化を参照してください。

参考

トピック