最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

関連するブロック パラメーター定義を構造体に整理

MATLAB® 数値変数を使用してモデルでブロック パラメーター値を設定する際、大規模モデルでは多数の変数が累積されている場合があるため、保守作業が増えたり変数名が長くなったりする可能性があります。

その場合は、これらのパラメーター値を構造体に整理できます。各構造体は単一の変数で、構造体の各フィールドには数値パラメーター値が格納されます。構造体、サブ構造体およびフィールドにわかりやすい名前を割り当てて、各パラメーター値の目的を示すことができます。

構造体を使用すると、次が可能になります。

  • 保持しなければならないワークスペース変数の数が削減される。

  • ワークスペース変数間の名前の競合を回避できる。

    同じ名前をもつ 2 つの変数を同じスコープ内 (ベース ワークスペース内など) に作成することはできません。構造体の作成時には、各フィールドに名前を付けなければなりませんが、同じ名前を使用するフィールドを複数の構造体それぞれに含めることはできます。したがって、各構造体およびサブ構造体は、フィールド名間で競合が発生したりフィールド名が同じスコープ内の他の変数名と競合したりするのを防ぐ "名前空間" として使用できます。

  • ブロック パラメーター値のセットを論理的にグループ化できる。たとえば、入れ子にされた構造体を使用して、各サブシステムまたは参照モデルで使用されるパラメーター値を明確に特定します。

マスク パラメーターまたはモデル引数を使用してシステムのコンポーネントにパラメーター値を渡す場合は、構造体を使用して、保持しなければならない個々のマスク パラメーターまたはモデル引数の数を減らすことができます。複数の変数を渡す代わりに、単一の構造体変数を渡すことができます。

MATLAB 構造体の作成と操作の基本的な情報については、構造体 (MATLAB)を参照してください。モデルでのブロック パラメーター値の設定の基本的な情報については、ブロック パラメーター値の設定を参照してください。

構造体を使用してバス信号を初期化するには、バス信号の初期条件の指定を参照してください。

パラメーター構造体の作成と使用

この例では、モデルでパラメーター構造体を作成して使用する方法を説明します。

モデル例 f14 では、ベース ワークスペースの複数の変数を使用してブロック パラメーター値を設定します。たとえば、このモデルを開くと、変数 ZwMw および Mq がベース ワークスペースに作成されます。これらの変数を単一の構造体変数に整理するには、次の手順に従います。

  1. コマンド プロンプトで、モデル例を開きます。

    f14

  2. コマンド プロンプトで、パラメーター構造体 myGains を作成します。ターゲット変数の値を使用してフィールドの値を設定します。

    myGains.Zw = Zw;
    myGains.Mw = Mw;
    myGains.Mq = Mq;

  3. モデル エクスプローラーの [モデルの階層構造] ペインで [Base Workspace] をクリックします。[コンテンツ] ペインで、変数 Mq を右クリックして、[使用されている場所の検索] を選択します。

  4. [システムを選択] ダイアログ ボックスで、ノード [f14] をクリックし、[OK] をクリックします。ブロック線図を更新するかどうかを尋ねるメッセージが表示されたら、[OK] をクリックします。

  5. [コンテンツ] ペインで、Gain1 というラベルの付いたブロックに対応する行を右クリックして、[プロパティ] を選択します。Gain1 ブロック ダイアログ ボックスが開きます。

  6. [ゲイン] パラメーターの値を Mq から myGains.Mq に変更し、[OK] をクリックします。

  7. [コンテンツ] ペインで、Transfer Fcn.1 ブロックに対応する行を右クリックして、[プロパティ] を選択します。

  8. [分母係数] パラメーターの値を [1,-Mq] から [1,-myGains.Mq] に変更し、[OK] をクリックします。

  9. [モデルの階層構造] ペインで [Base Workspace] をクリックします。[使用されている場所の検索] を使用して、変数 Mw および Zw を使用するブロックの場所を見つけます。ブロック ダイアログ ボックスで、変数名への参照を表に従って置き換えます。

    変数名置換名
    MwmyGains.Mw
    ZwmyGains.Zw

  10. 古い変数をクリアします。

    clear Zw Mw Mq

これで、変更した各ブロック パラメーターで myGains 構造体のフィールドが使用されるようになりました。各構造体フィールドの数値は、クリアした対応する変数の値と等しくなります。

関数 Simulink.BlockDiagram.createVarStruct および Simulink.BlockDiagram.applyVarStruct を使用すると、複数のワークスペース変数ではなく単一のパラメーター構造体を使用するようにモデルを移行できます。例については、構造体パラメーターへの移行を参照してください。

フィールド値へのデータ型情報の保存

構造体または構造体配列を使用して、double 以外のデータ型を使用するパラメーター値を整理するには、構造体の作成時に型を明示的に指定します。構造体の作成時には、single(15.23) などの型付き式を使用してフィールド値を指定します。

myParams.Gain = single(15.23);

後でフィールド値を変更する場合は、もう一度型を明示的に指定しなければなりません。型を指定しない場合、フィールド値には代わりにデータ型 double が使用されます。

myParams.Gain = 15.23;
% The field 'Gain' now uses the data type 'double' instead of 'single'.

型の指定を保持するには、添字による代入を使用してフィールドに新しい値を代入します。

% Assign value of type 'single'.
myParams.Gain = single(15.23);

% Assign new value while retaining type 'single'.
myParams.Gain(:) = 11.79;

固定小数点データ型を一致させるには、fi オブジェクトを使用してフィールド値を設定します。

パラメーター オブジェクトの作成によるフィールドのデータ型と特性の制御

Simulink.Parameter オブジェクトを使用すると、ブロック パラメーターの値をそのデータ型から分離できます。パラメーター オブジェクトを使用して構造体または構造体配列を格納する場合は、構造体全体のデータ型として使用する Simulink.Bus オブジェクトを作成できます。

バス オブジェクトとパラメーター オブジェクトを使用すると、以下を明示的に制御できます。

  • 各フィールドのデータ型。この手法を使用すると、型付き式または添字による代入を使用してフィールド値を設定する必要がなくなります。

  • 各フィールドの実数/複素数、次元および単位。

  • フィールドが調整可能なパラメーター値を表す場合は、各フィールドの最小値と最大値。

  • 構造体全体の形状。構造体の "形状" とは、フィールドの数、名前および階層です。

  • モデルから生成するコード内の構造体の調整可能性。

  1. パラメーター構造体 myParams を作成します。

    myParams = struct(...
        'SubsystemA',struct(...
            'Gain',15.23,...
            'Offset',89,...
            'Init',0.59),...
        'SubsystemB',struct(...
            'Coeffs',[5.32 7.99],...
            'Offset',57,...
            'Init1',1.76,...
            'Init2',2.76)...
    );

  2. 関数 Simulink.Bus.createObject を使用して、構造体およびサブ構造体を表す Simulink.Bus オブジェクトを作成します。

    Simulink.Bus.createObject(myParams)
    

    myParams には 2 つの一意のサブ構造体が含まれているため、この関数では、親構造体 myParams を表す slBus1、サブ構造体 SubsystemA を表す SubsystemA、サブ構造体 SubsystemB を表す SubsystemB の 3 つの Simulink.Bus オブジェクトが作成されます。

  3. バス オブジェクト slBus1 の名前を myParamsType に変更します。

    myParamsType = slBus1;
    clear slBus1

  4. 構造体 myParamsSimulink.Parameter オブジェクトに格納します。

    myParams = Simulink.Parameter(myParams);

    パラメーター オブジェクトの Value プロパティに構造体が含まれます。

  5. パラメーター オブジェクトのデータ型をバス オブジェクト myParamsType に設定します。

    myParams.DataType = 'Bus: myParamsType';

  6. バス エディターを開いてバス オブジェクトを表示します。

    buseditor

  7. [モデルの階層構造] ペインで、ノード SubsystemA をクリックします。[コンテンツ] ペインで、フィールドのデータ型を図に従って設定します。

  8. 必要に応じて、サブ構造体 SubsystemB のフィールドのデータ型を設定します。

パラメーター オブジェクト myParams にパラメーター構造体が格納されます。パラメーター オブジェクトのデータ型はバス オブジェクト myParamsType です。シミュレーションおよびコード生成の前に、パラメーター オブジェクトはフィールド値をバス オブジェクトで指定されたデータ型にキャストします。

いずれかのフィールドを使用してブロック パラメーター値を設定するには、myParams.SubsystemB.Init1 などの式を指定します。

コマンド プロンプトでフィールド値にアクセスするには、パラメーター オブジェクトの Value プロパティを使用します。バス オブジェクトによってフィールドのデータ型が制御されるため、型付き式を使用してフィールド値を設定する必要はありません。

myParams.Value.SubsystemA.Gain = 12.79;

バス オブジェクトは、構造体のフィールドの特性と形状を厳密に制御します。たとえば、2 要素フィールド myParams.SubsystemB.Coeffs の値を 3 要素配列に設定すると、ブロック パラメーター値の設定時にモデルでエラーが生成されます。フィールドの次元を変更するには、バス オブジェクト SubsystemB の要素 Coeffs を変更します。

バス オブジェクトを作成後に操作するには、バス オブジェクトの作成と指定およびバス オブジェクトの保存を参照してください。

フィールドのデータ型と信号データ型の一致

たとえば、フィールド myParams.SubsystemA.Gain を使用して、Gain ブロックの [ゲイン] パラメーターの値を設定するとします。フィールドのデータ型をブロックの出力信号のデータ型に一致させる場合、状況依存データ型指定に頼ることはできません (状況依存データ型指定参照)。Simulink.AliasType オブジェクトまたは Simulink.NumericType オブジェクトを使用して、フィールドと信号のデータ型を設定することを検討してください。データ型オブジェクトを使用しない場合は、信号のデータ型を変更するたびにフィールドのデータ型を忘れずに変更しなければなりません。

  1. コマンド プロンプトで、データ型 single を表す Simulink.AliasType オブジェクトを作成します。

    myType = Simulink.AliasType;
    myType.BaseType = 'single';

  2. Gain ブロックのダイアログ ボックスの [信号属性] タブで、[出力データ型]myType に設定します。

  3. コマンド プロンプトで、バス エディターを開きます。

    buseditor

  4. [モデルの階層構造] ペインで、バス オブジェクト SubsystemA を選択します。[コンテンツ] ペインで、フィールド Gain のデータ型を myType に設定します。

これで、Gain ブロックの出力信号と構造体フィールド myParams.SubsystemA.Gain の両方で、myTypeBaseType プロパティで指定したデータ型が使用されるようになりました。

データ型オブジェクトの詳細については、Simulink.AliasTypeSimulink.NumericType を参照してください。

構造体変数の管理

値が構造体である変数を作成、変更、検証するには、変数エディターを使用できます。詳細については、構造体および配列の変数の対話的な変更を参照してください。

入れ子にされた構造体の作成によるパラメーター階層の定義

ブロック パラメーター値をさらに整理するには、入れ子にされた構造体の階層を作成します。

たとえば、モデルで SubsystemA および SubsystemB という名前のサブシステムを作成するとします。これらのサブシステムでブロック パラメーター値を設定するには、Offset_SubsystemAOffset_SubsystemB などの変数を使用します。

Gain_SubsystemA = 15.23;
Offset_SubsystemA = 89;
Init_SubsystemA = 0.59;

Coeffs_SubsystemB = [5.32 7.99];
Offset_SubsystemB = 57;
Init1_SubsystemB = 1.76;
Init2_SubsystemB = 2.76;

各サブシステムのサブ構造体を含むパラメーター構造体を作成します。既存の変数の値を使用してフィールドの値を設定します。

myParams = struct(...
    'SubsystemA',struct(...
        'Gain',Gain_SubsystemA,...
        'Offset',Offset_SubsystemA,...
        'Init',Init_SubsystemA),...
    'SubsystemB',struct(...
        'Coeffs',Coeffs_SubsystemB,...
        'Offset',Offset_SubsystemB,...
        'Init1',Init1_SubsystemB,...
        'Init2',Init2_SubsystemB)...
);

単一の構造体変数 myParams に、サブシステム内のブロックに関するすべてのパラメーター情報が含まれます。各サブ構造体は名前空間として機能するため、Offset フィールドは複数回定義できます。

サブ構造体 SubsystemBOffset フィールドをブロック パラメーターの値として使用するには、ブロック ダイアログ ボックスでパラメーター値を式 myParams.SubsystemB.Offset として指定します。

複数のパラメーター構造体を配列にグループ化

同様の特性をもつパラメーター構造体を整理するには、構造体の配列を値にもつ単一の変数を作成します。この手法を使うと、ライブラリ サブシステムやモデル引数を使用する参照モデルなどのアルゴリズムの複数インスタンスを含むモデルをパラメーター化するのに役立ちます。

たとえば、モデルで 2 つの同一サブシステムを作成するとします。

各サブシステム内のブロックでパラメーター値を設定するために 3 つの数値が必要であるとします。これらの値を格納する 2 つの構造体の配列を作成します。

myParams(1).Gain = 15.23;
myParams(1).Offset = 89;
myParams(1).Init = 0.59;

myParams(2).Gain = 11.93;
myParams(2).Offset = 57;
myParams(2).Init = 2.76;

配列内の各構造体は、いずれかのサブシステムの 3 つのパラメーター値を格納します。

いずれかのサブシステムでブロック パラメーターの値を設定するには、配列内のいずれかの構造体のフィールドを参照する式を指定します。たとえば、式 myParams(2).Init を使用します。

再利用可能なコンポーネントと反復アルゴリズムのパラメーター値の整理

For Each Subsystem ブロック内の構造体の配列を分割することもできます。この手法を使うと、モデルがベクトル信号に対してアルゴリズムを反復するなどしてアルゴリズムを繰り返し実行するときにワークスペース変数を整理するのに役立ちます。例については、For Each Subsystem を使用したアルゴリズムの繰り返しを参照してください。

モデル引数を使用して、参照モデルの複数インスタンスにわたって異なるパラメーター値を指定する場合は、構造体の配列を使用してモデル引数の値を整理できます。参照モデル ワークスペースで構造体変数を作成し、その構造体をモデル引数として使用するようにモデルを構成します。構造体のフィールドを使用して、モデルのブロック パラメーター値を設定します。その後、親モデルがリンクしているベース ワークスペースまたはデータ ディクショナリに構造体の配列を作成します。親モデルで、配列内の各構造体を Model ブロックのモデル引数の値として使用します。配列内の各構造体は、参照モデルの 1 つのインスタンスのパラメーター値を格納します。

モデル例 sldemo_mdlref_datamngt には、マスク参照モデル sldemo_mdlref_counter_datamngt の 3 つのインスタンス (Model ブロック) が含まれています。ベース ワークスペース変数 IC1IC2Param1 および Param2 は、構造体を値にもつ Simulink.Parameter オブジェクトです。親モデルでは、これらの変数を使用して、Model ブロックでマスク パラメーターの値を設定します。IC1IC2Param1Param2 は構造的に同じであるため、これら 4 つの構造体は 2 つの構造体配列にまとめることができます。

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

    sldemo_mdlref_datamngt

    このモデルによって 4 つの Simulink.Parameter オブジェクトがベース ワークスペースに作成されます。

  2. 参照モデル例を開きます。

    sldemo_mdlref_counter_datamngt

    モデル ワークスペースでは、構造体を値にもつ 2 つのモデル引数 CounterICs および CounterParams が定義されています。モデル内のブロックは、これらの構造体のフィールドを使用してパラメーター値を設定します。

  3. モデル sldemo_mdlref_datamngt で、モデル データ エディターを開きます ([モデル化] タブで [モデル データ エディター] をクリック)。モデル データ エディターで、[パラメーター] タブを確認します。

  4. モデルで、Model ブロックのうちの 1 つをクリックします。

    モデル データ エディターでは、選択された Model ブロックの 2 つのマスク パラメーターに対応する行が強調表示されます。ブロックでは、マスク パラメーターを使用して、参照モデル sldemo_mdlref_counter_datamngt で定義された 2 つのモデル引数の値を設定します。各 Model ブロックは、ベース ワークスペースの 4 つのパラメーター オブジェクトの異なる組み合わせを使用して、引数の値を設定します。

  5. モデル データ エディターの [Value] 列でいずれかのセルをクリックし、対応するマスク パラメーターの値の編集を開始します (IC1 など)。パラメーター値の横にあるアクション ボタン をクリックし、[開く] を選択します。パラメーター オブジェクトのプロパティ ダイアログ ボックスが開きます。

  6. プロパティ ダイアログ ボックスの [値] ボックスの隣にあるアクション ボタンをクリックし、[変数エディターを開く] を選択します。

    変数エディターには、パラメーター オブジェクトによって構造体が保存されることが示されます。Param2IC2 の構造体は、Param1IC1 の構造体と同じフィールドをもちますが、フィールド値は異なります。

  7. コマンド プロンプトで、4 つのパラメーター オブジェクトを、構造体配列を値にもつ 2 つのパラメーター オブジェクトにまとめます。

    % Create a new parameter object by copying Param1.
    Param = Param1.copy;
    
    % Use the structure in Param2 as the second structure in the new object.
    Param.Value(2) = Param2.Value;
    % The value of Param is now an array of two structures.
    
    % Delete the old objects Param1 and Param2.
    clear Param1 Param2
    
    % Create a new parameter object by copying IC1.
    % Use the structure in IC2 as the second structure in the new object.
    IC = IC1.copy;
    IC.Value(2) = IC2.Value;
    clear IC1 IC2

  8. 親モデルでは、モデル データ エディターで [Value] 列を使用して、表に従ってマスク パラメーターの値を置き換えます。

    前の値新しい値
    Param1Param(1)
    IC1IC(1)
    Param2Param(2)
    IC2IC(2)

Model ブロックは、配列 IC 内のいずれかの構造体を使用して、モデル引数 CounterICs の値を設定します。同様に、各ブロックは Param 内のいずれかの構造体を使用して CounterParams の値を設定します。

構造体の配列内の統一

構造体の配列内のすべての構造体は同じフィールド階層をもたなければなりません。階層内の各フィールドは配列全体で同じ特性をもたなければなりません。構造体の間でこの統一を図るには、パラメーター オブジェクトとバス オブジェクトを使用します。

パラメーター オブジェクトを使用してパラメーター構造体の配列を表すには、オブジェクトの値を構造体の配列に設定します。

% Create array of structures.
myParams(1).Gain = 15.23;
myParams(1).Offset = 89;
myParams(1).Init = 0.59;
myParams(2).Gain = 11.93;
myParams(2).Offset = 57;
myParams(2).Init = 2.76;

% Create bus object.
Simulink.Bus.createObject(myParams);
myParamsType = slBus1;
clear slBus1

% Create parameter object and set data type.
myParams = Simulink.Parameter(myParams);
myParams.DataType = 'Bus: myParamsType';

いずれかのフィールドを使用してブロック パラメーター値を設定するには、myParams(2).Offset などの式を指定します。

コマンド プロンプトでフィールド値にアクセスするには、パラメーター オブジェクトの Value プロパティを使用します。

myParams.Value(2).Offset = 129;

定数値信号の構造体の作成

Constant ブロック内の構造体を使用して、複数の数値定数を送信する単一のバス信号を作成できます。詳細については、Constant を参照してください。バス信号の詳細については、バーチャル バスを参照してください。

パラメーター構造体に移行する前の考慮事項

  • パラメーター構造体を使用するようにモデルを移行する前に、置き換える変数を使用しているターゲット モデルおよびその他のモデル内のすべてのブロックを調べてください。

    たとえば、モデル内の 2 つのブロックでワークスペース変数 myVar が使用されているとします。フィールド myVar をもつ構造体 myParams を作成し、一方のブロックのみのパラメーター値を myParams.myVar に設定した場合、他方のブロックでは変数 myVar が引き続き使用されます。myVar を削除すると、他方のブロックは削除した変数を必要とするため、モデルでエラーが生成されます。

    変数を使用しているすべてのブロックを調べるには、次の手順に従います。

    1. 変数を使用している可能性があるすべてのモデルを開きます。それらのモデルがモデル参照階層内にある場合は、最上位モデルのみを開くことができます。

    2. モデル データ エディターまたはモデル エクスプローラーの [コンテンツ] ペインで、変数を右クリックして [使用されている場所の検索] を選択します。モデル エクスプローラーに、変数を使用しているすべてのブロックが表示されます。

    変数の使用を調べることができるのは、開いているモデル内だけです。パラメーター構造体に移行する前に、ターゲット変数を使用している可能性があるすべてのモデルを開いてください。モデル内における変数の使用の確認の詳細については、特定の変数を使用するブロックの検索を参照してください。

    あるいは、myVar の削除を避けることもできます。ただし、myParams.myVar 構造体フィールドの値を変更する場合は、myVar の値を忘れずに変更して一致させなければなりません。

  • 複数の異なる変数またはパラメーター オブジェクト (Simulink.Parameter など) を、単一の変数またはパラメーター オブジェクトに保存する構造体にまとめることができます (パラメーター オブジェクトをまとめるには、既存のパラメーター オブジェクトを構造体に結合を参照してください)。ただし、結果として得られる変数またはオブジェクトは単一のエンティティとして機能します。そのため、構造体の個々のフィールドに異なるコード生成設定 (ストレージ クラスなど) を適用することはできません。

既存のパラメーター オブジェクトを構造体に結合

パラメーター オブジェクトを使用してブロック パラメーター値を設定する場合 (ストレージ クラスを適用できるようにする場合など)、オブジェクトを単一の構造体にまとめるには、以下を実行します。

  1. MATLAB 構造体を作成して変数に保存します。フィールド値を設定するには、既存の各パラメーター オブジェクトに保存されるパラメーター値を使用します。

  2. 変数をパラメーター オブジェクトに変換します。Simulink.Bus オブジェクトを作成し、パラメーター オブジェクトのデータ型として使用します (パラメーター オブジェクトの作成によるフィールドのデータ型と特性の制御を参照)。

  3. 結果として得られるパラメーター オブジェクトに適用するストレージ クラスを選択します。構造体全体に適用されるストレージ クラスを 1 つだけ選択できます。

  4. 既存のパラメーター オブジェクトの Min プロパティや Max プロパティなどのパラメーター メタデータを、バス オブジェクト内の Simulink.BusElement オブジェクトの対応するプロパティに転送します。

たとえば、3 つの異なるパラメーター オブジェクトがあるとします。

coeff = Simulink.Parameter(17.5);
coeff.Min = 14.33;
coeff.DataType = 'single';
coeff.StorageClass = 'ExportedGlobal';

init = Simulink.Parameter(0.00938);
init.Min = -0.005;
init.Max = 0.103;
init.DataType = 'single';
init.StorageClass = 'Model default';

offset = Simulink.Parameter(199);
offset.DataType = 'uint8';
offset.StorageClass = 'ExportedGlobal';

  1. 構造体変数を作成します。

    myParams.coeff = coeff.Value;
    myParams.init = init.Value;
    myParams.offset = offset.Value;

  2. 変数をパラメーター オブジェクトに変換します。

    myParams = Simulink.Parameter(myParams);

  3. バス オブジェクトを作成し、パラメーター オブジェクトのデータ型として使用します。

    Simulink.Bus.createObject(myParams.Value);
    paramsDT = copy(slBus1);
    
    myParams.DataType = 'Bus: paramsDT';

  4. 古いパラメーター オブジェクトのメタデータをバス オブジェクト内のバス要素に転送します。

    % coeff
    paramsDT.Elements(1).Min = coeff.Min;
    paramsDT.Elements(1).DataType = coeff.DataType;
    
    % init
    paramsDT.Elements(2).Min = init.Min;
    paramsDT.Elements(2).Max = init.Max;
    paramsDT.Elements(2).DataType = init.DataType;
    
    % offset
    paramsDT.Elements(3).DataType = offset.DataType;

    この転送操作を実行するスクリプトを作成するには、関数 properties を使用して、バス要素と古いパラメーター オブジェクトに共通するプロパティを検出します。構造体フィールドをリストして反復処理できるようにするには、関数 fieldnames を使用します。

  5. ストレージ クラスをパラメーター オブジェクトに適用します。

    myParams.StorageClass = 'ExportedGlobal';

これで、古いパラメーター オブジェクトではなく myParams のフィールドを使用してブロック パラメーター値を設定することができます。

生成されたコードにおけるパラメーター構造体

生成されたコードで構造体および構造体配列として表示されるようにパラメーター構造体を構成できます。パラメーター構造体を備えたコード生成の詳細については、生成されたコードにおける構造体へのデータの整理 (Simulink Coder)を参照してください。

パラメーター構造体の制限

  • ブロック パラメーターの設定に使用するフィールドの値は、数値または列挙型でなければなりません。フィールドの値には、実数スカラー、複数素スカラー、ベクトルまたは多次元配列を指定できます。

  • 構造体のいずれかのフィールドの値が多次元配列の場合、シミュレーション中はどのフィールド値も調整できません。

  • 構造体の配列内のすべての構造体は同じフィールド階層をもたなければなりません。階層内の各フィールドは配列全体で同じ特性をもたなければなりません。

    • フィールド名

    • 数値データ型 (singleint32 など)

    • 実数/複素数

    • 次元

    たとえば、2 つの構造体からなる配列を定義するとします。

    paramStructArray = ...
    [struct('sensor1',int16(7),'sensor2',single(9.23)) ...
     struct('sensor1',int32(9),'sensor2',single(11.71))];

    フィールド sensor1 は各構造体で別のデータ型を使用するため、ブロック パラメーターではいずれのフィールドも使用できません。

  • パラメーター構造体は、生成されたコードにおける状況依存データ型指定をサポートしていません。パラメーター構造体がコード内で調整可能な場合、構造体のフィールドでは、型付き式または Simulink.Bus オブジェクトで指定した数値データ型が使用されます。型付き式または Simulink.Bus オブジェクトを使用しない場合、構造体のフィールドでは double データ型が使用されます。

ルックアップ テーブルの共有ブレークポイントとテーブル データのパッケージ化

ルックアップ テーブル ブロック間でデータを共有する場合は、構造体ではなく Simulink.LookupTable オブジェクトと Simulink.Breakpoint オブジェクトを使用してデータを格納およびグループ化することを検討してください。この手法により、データをルックアップ テーブルの一部として明確に特定し、ブレークポイント データをテーブル データに明示的に関連付けることで、モデルの可読性が向上します。ルックアップ テーブルの共有ブレークポイントとテーブル データのパッケージ化を参照してください。

既存の C コードの構造体型に基づくパラメーター構造体の作成

既存の C コードで定義されている struct の型定義に適合するパラメーター構造体を作成できます。この手法を使用して以下を実行します。

MATLAB では、パラメーター構造体をパラメーター オブジェクトに保存し、バス オブジェクトをデータ型として使用します (パラメーター オブジェクトの作成によるフィールドのデータ型と特性の制御を参照)。C コードの struct 型に基づいてバス オブジェクトを作成するには、関数 Simulink.importExternalCTypes を使用します。

関連するトピック