このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
関連するブロック パラメーター定義を構造体に整理
MATLAB® 数値変数を使用してモデルでブロック パラメーター値を設定する際、大規模モデルでは多数の変数が累積されている場合があるため、保守作業が増えたり変数名が長くなったりする可能性があります。
その場合は、これらのパラメーター値を構造体に整理できます。各構造体は単一の変数で、構造体の各フィールドには数値パラメーター値が格納されます。構造体、サブ構造体およびフィールドにわかりやすい名前を割り当てて、各パラメーター値の目的を示すことができます。
構造体を使用すると、次が可能になります。
保持しなければならないワークスペース変数の数が削減される。
ワークスペース変数間の名前の競合を回避できる。
同じ名前をもつ 2 つの変数を同じスコープ内 (ベース ワークスペース内など) に作成することはできません。構造体の作成時には、各フィールドに名前を付けなければなりませんが、同じ名前を使用するフィールドを複数の構造体それぞれに含めることはできます。したがって、各構造体およびサブ構造体は、フィールド名間で競合が発生したりフィールド名が同じスコープ内の他の変数名と競合したりするのを防ぐ "名前空間" として使用できます。
ブロック パラメーター値のセットを論理的にグループ化できる。たとえば、入れ子にされた構造体を使用して、各サブシステムまたは参照モデルで使用されるパラメーター値を明確に特定します。
マスク パラメーターまたはモデル引数を使用してシステムのコンポーネントにパラメーター値を渡す場合は、構造体を使用して、保持しなければならない個々のマスク パラメーターまたはモデル引数の数を減らすことができます。複数の変数を渡す代わりに、単一の構造体変数を渡すことができます。
MATLAB 構造体の作成と操作の基本的な情報については、構造体を参照してください。モデルでのブロック パラメーター値の設定の基本的な情報については、ブロック パラメーター値の設定を参照してください。
構造体を使用してバス信号を初期化するには、バス要素の初期条件の指定を参照してください。
パラメーター構造体の作成と使用
この例では、モデルでパラメーター構造体を作成して使用する方法を説明します。
モデル例 f14
では、ベース ワークスペースの複数の変数を使用してブロック パラメーター値を設定します。たとえば、このモデルを開くと、変数 Zw
、Mw
および Mq
がベース ワークスペースに作成されます。これらの変数を単一の構造体変数に整理するには、次の手順に従います。
コマンド プロンプトで、モデル例を開きます。
f14
コマンド プロンプトで、パラメーター構造体
myGains
を作成します。ターゲット変数の値を使用してフィールドの値を設定します。myGains.Zw = Zw; myGains.Mw = Mw; myGains.Mq = Mq;
モデル エクスプローラーの [モデルの階層構造] ペインで [Base Workspace] をクリックします。[コンテンツ] ペインで、変数
Mq
を右クリックして、[使用されている場所の検索] を選択します。[システムを選択] ダイアログ ボックスで、ノード [f14] をクリックし、[OK] をクリックします。ブロック線図を更新するかどうかを尋ねるメッセージが表示されたら、[OK] をクリックします。
[コンテンツ] ペインで、Gain1 というラベルの付いたブロックに対応する行を右クリックして、[プロパティ] を選択します。Gain1 ブロック ダイアログ ボックスが開きます。
[ゲイン] パラメーターの値を
Mq
からmyGains.Mq
に変更し、[OK] をクリックします。[コンテンツ] ペインで、Transfer Fcn.1 ブロックに対応する行を右クリックして、[プロパティ] を選択します。
[分母係数] パラメーターの値を
[1,-Mq]
から[1,-myGains.Mq]
に変更し、[OK] をクリックします。[モデルの階層構造] ペインで [Base Workspace] をクリックします。[使用されている場所の検索] を使用して、変数
Mw
およびZw
を使用するブロックの場所を見つけます。ブロック ダイアログ ボックスで、変数名への参照を表に従って置き換えます。変数名 置換名 Mw
myGains.Mw
Zw
myGains.Zw
古い変数をクリアします。
clear Zw Mw Mq
これで、変更した各ブロック パラメーターで myGains
構造体のフィールドが使用されるようになりました。各構造体フィールドの数値は、クリアした対応する変数の値と等しくなります。
複数のワークスペース変数の代わりに単一のパラメーター構造体を使用するようにモデルを移行できます。
フィールド値へのデータ型情報の保存
構造体または構造体配列を使用して、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
(Fixed-Point Designer) オブジェクトを使用してフィールド値を設定します。
パラメーター オブジェクトの作成によるフィールドのデータ型と特性の制御
Simulink.Parameter
オブジェクトを使用すると、ブロック パラメーターの値をそのデータ型から分離できます。パラメーター オブジェクトを使用して構造体または構造体配列を格納する場合は、構造体全体のデータ型として使用する Simulink.Bus
オブジェクトを作成できます。
バス オブジェクトとパラメーター オブジェクトを使用すると、以下を明示的に制御できます。
各フィールドのデータ型。この手法を使用すると、型付き式または添字による代入を使用してフィールド値を設定する必要がなくなります。
各フィールドの実数/複素数、次元および単位。
フィールドが調整可能なパラメーター値を表す場合は、各フィールドの最小値と最大値。
構造体全体の形状。構造体の "形状" とは、フィールドの数、名前および階層です。
モデルから生成するコード内の構造体の調整可能性。
パラメーター構造体
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)... );
関数
Simulink.Bus.createObject
を使用して、構造体およびサブ構造体を表すSimulink.Bus
オブジェクトを作成します。Simulink.Bus.createObject(myParams)
myParams
には 2 つの一意のサブ構造体が含まれているため、この関数では、親構造体myParams
を表すslBus1
、サブ構造体SubsystemA
を表すSubsystemA
、サブ構造体SubsystemB
を表すSubsystemB
の 3 つのSimulink.Bus
オブジェクトが作成されます。バス オブジェクト
slBus1
の名前をmyParamsType
に変更します。myParamsType = slBus1; clear slBus1
構造体
myParams
をSimulink.Parameter
オブジェクトに格納します。myParams = Simulink.Parameter(myParams);
パラメーター オブジェクトの
Value
プロパティに構造体が含まれます。パラメーター オブジェクトのデータ型をバス オブジェクト
myParamsType
に設定します。myParams.DataType = 'Bus: myParamsType';
型エディターを開いてバス オブジェクトを表示します。
typeeditor
テーブルで、
SubsystemA
という名前のバス オブジェクトを展開します。次に、図に従ってデータ型を設定します。必要に応じて、
SubsystemB
という名前のバス オブジェクトのデータ型を変更します。
パラメーター オブジェクト myParams
にパラメーター構造体が格納されます。パラメーター オブジェクトのデータ型はバス オブジェクト myParamsType
です。シミュレーションおよびコード生成の前に、パラメーター オブジェクトはフィールド値をバス オブジェクトで指定されたデータ型にキャストします。
いずれかのフィールドを使用してブロック パラメーター値を設定するには、myParams.SubsystemB.Init1
などの式を指定します。
コマンド プロンプトでフィールド値にアクセスするには、パラメーター オブジェクトの Value
プロパティを使用します。バス オブジェクトによってフィールドのデータ型が制御されるため、型付き式を使用してフィールド値を設定する必要はありません。
myParams.Value.SubsystemA.Gain = 12.79;
バス オブジェクトは、構造体のフィールドの特性と形状を厳密に制御します。たとえば、2 要素フィールド myParams.SubsystemB.Coeffs
の値を 3 要素配列に設定すると、ブロック パラメーター値の設定時にモデルでエラーが生成されます。フィールドの次元を変更するには、バス オブジェクト SubsystemB
の要素 Coeffs
を変更します。
バス オブジェクトを作成後に操作するには、Simulink バス オブジェクトの作成およびSimulink バス オブジェクトの保存を参照してください。
フィールドのデータ型と信号データ型の一致
たとえば、フィールド myParams.SubsystemA.Gain
を使用して、Gain ブロックの [ゲイン] パラメーターの値を設定するとします。フィールドのデータ型をブロックの出力信号のデータ型に一致させる場合、状況依存データ型指定に頼ることはできません (状況依存データ型指定参照)。Simulink.AliasType
オブジェクトまたは Simulink.NumericType
オブジェクトを使用して、フィールドと信号のデータ型を設定することを検討してください。データ型オブジェクトを使用しない場合は、信号のデータ型を変更するたびにフィールドのデータ型を忘れずに変更しなければなりません。
MATLAB コマンド ウィンドウで、データ型
single
を表すSimulink.AliasType
オブジェクトを作成します。myType = Simulink.AliasType; myType.BaseType = 'single';
Gain ブロックのダイアログ ボックスの [信号属性] タブで、[出力データ型] を
myType
に設定します。MATLAB コマンド ウィンドウで型エディターを開きます。
typeeditor
SubsystemA
という名前のバス オブジェクトを選択します。次に、Gain
という名前の要素のデータ型をmyType
に設定します。
これで、Gain ブロックの出力信号と構造体フィールド myParams.SubsystemA.Gain
の両方で、myType
の BaseType
プロパティで指定したデータ型が使用されるようになりました。
データ型オブジェクトの詳細については、Simulink.AliasType
と Simulink.NumericType
を参照してください。
構造体変数の管理
値が構造体である変数を作成、変更、検証するには、変数エディターを使用できます。詳細については、構造体および配列の変数の対話的な変更を参照してください。
入れ子にされた構造体の作成によるパラメーター階層の定義
ブロック パラメーター値をさらに整理するには、入れ子にされた構造体の階層を作成します。
たとえば、モデルで SubsystemA
および SubsystemB
という名前のサブシステムを作成するとします。これらのサブシステムでブロック パラメーター値を設定するには、Offset_SubsystemA
や Offset_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
フィールドは複数回定義できます。
サブ構造体 SubsystemB
の Offset
フィールドをブロック パラメーターの値として使用するには、ブロック ダイアログ ボックスでパラメーター値を式 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 ブロック) が含まれています。ベース ワークスペース変数 IC1
、IC2
、Param1
および Param2
は、構造体を値にもつ Simulink.Parameter
オブジェクトです。親モデルでは、これらの変数を使用して、Model ブロックでマスク パラメーターの値を設定します。IC1
と IC2
、Param1
と Param2
は構造的に同じであるため、これら 4 つの構造体は 2 つの構造体配列にまとめることができます。
親モデル例を開きます。
openExample('sldemo_mdlref_datamngt')
このモデルによって 4 つの
Simulink.Parameter
オブジェクトがベース ワークスペースに作成されます。参照モデル例を開きます。
sldemo_mdlref_counter_datamngt
モデル ワークスペースでは、構造体を値にもつ 2 つのモデル引数
CounterICs
およびCounterParams
が定義されています。モデル内のブロックは、これらの構造体のフィールドを使用してパラメーター値を設定します。モデル
sldemo_mdlref_datamngt
で、モデル データ エディターを開きます ([モデル化] タブで [モデル データ エディター] をクリック)。モデル データ エディターで、[パラメーター] タブを確認します。モデルで、Model ブロックのうちの 1 つをクリックします。
モデル データ エディターでは、選択された Model ブロックの 2 つのマスク パラメーターに対応する行が強調表示されます。ブロックでは、マスク パラメーターを使用して、参照モデル
sldemo_mdlref_counter_datamngt
で定義された 2 つのモデル引数の値を設定します。各 Model ブロックは、ベース ワークスペースの 4 つのパラメーター オブジェクトの異なる組み合わせを使用して、引数の値を設定します。モデル データ エディターの [Value] 列でいずれかのセルをクリックし、対応するマスク パラメーターの値の編集を開始します (
IC1
など)。パラメーター値の横にあるアクション ボタン をクリックし、[開く] を選択します。パラメーター オブジェクトのプロパティ ダイアログ ボックスが開きます。プロパティ ダイアログ ボックスの [値] ボックスの隣にあるアクション ボタンをクリックし、[変数エディターを開く] を選択します。
変数エディターには、パラメーター オブジェクトによって構造体が保存されることが示されます。
Param2
とIC2
の構造体は、Param1
とIC1
の構造体と同じフィールドをもちますが、フィールド値は異なります。コマンド プロンプトで、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
親モデルでは、モデル データ エディターで [Value] 列を使用して、表に従ってマスク パラメーターの値を置き換えます。
前の値 新しい値 Param1
Param(1)
IC1
IC(1)
Param2
Param(2)
IC2
IC(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
を削除すると、他方のブロックは削除した変数を必要とするため、モデルでエラーが生成されます。変数を使用しているすべてのブロックを調べるには、次の手順に従います。
変数を使用している可能性があるすべてのモデルを開きます。それらのモデルがモデル参照階層内にある場合は、最上位モデルのみを開くことができます。
モデル データ エディターまたはモデル エクスプローラーの [コンテンツ] ペインで、変数を右クリックして [使用されている場所の検索] を選択します。モデル エクスプローラーに、変数を使用しているすべてのブロックが表示されます。
変数の使用を調べることができるのは、開いているモデル内だけです。パラメーター構造体に移行する前に、ターゲット変数を使用している可能性があるすべてのモデルを開いてください。モデル内における変数の使用の確認の詳細については、特定の変数を使用するブロックの検索を参照してください。
あるいは、
myVar
の削除を避けることもできます。ただし、myParams.myVar
構造体フィールドの値を変更する場合は、myVar
の値を忘れずに変更して一致させなければなりません。複数の異なる変数またはパラメーター オブジェクト (
Simulink.Parameter
など) を、単一の変数またはパラメーター オブジェクトに保存する構造体にまとめることができます (パラメーター オブジェクトをまとめるには、既存のパラメーター オブジェクトを構造体に結合を参照してください)。ただし、結果として得られる変数またはオブジェクトは単一のエンティティとして機能します。そのため、構造体の個々のフィールドに異なるコード生成設定 (ストレージ クラスなど) を適用することはできません。
既存のパラメーター オブジェクトを構造体に結合
パラメーター オブジェクトを使用してブロック パラメーター値を設定する場合 (ストレージ クラスを適用できるようにする場合など)、オブジェクトを単一の構造体にまとめるには、以下を実行します。
MATLAB 構造体を作成して変数に保存します。フィールド値を設定するには、既存の各パラメーター オブジェクトに保存されるパラメーター値を使用します。
変数をパラメーター オブジェクトに変換します。
Simulink.Bus
オブジェクトを作成し、パラメーター オブジェクトのデータ型として使用します (パラメーター オブジェクトの作成によるフィールドのデータ型と特性の制御を参照)。結果として得られるパラメーター オブジェクトに適用するストレージ クラスを選択します。構造体全体に適用されるストレージ クラスを 1 つだけ選択できます。
既存のパラメーター オブジェクトの
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';
構造体変数を作成します。
myParams.coeff = coeff.Value; myParams.init = init.Value; myParams.offset = offset.Value;
変数をパラメーター オブジェクトに変換します。
myParams = Simulink.Parameter(myParams);
バス オブジェクトを作成し、パラメーター オブジェクトのデータ型として使用します。
Simulink.Bus.createObject(myParams.Value); paramsDT = copy(slBus1); myParams.DataType = 'Bus: paramsDT';
古いパラメーター オブジェクトのメタデータをバス オブジェクト内のバス要素に転送します。
% 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
を使用します。ストレージ クラスをパラメーター オブジェクトに適用します。
myParams.StorageClass = 'ExportedGlobal';
これで、古いパラメーター オブジェクトではなく myParams
のフィールドを使用してブロック パラメーター値を設定することができます。
生成されたコードにおけるパラメーター構造体
生成されたコードで構造体および構造体配列として表示されるようにパラメーター構造体を構成できます。パラメーター構造体を備えたコード生成の詳細については、生成されたコードにおける構造体へのデータの整理 (Simulink Coder)を参照してください。
パラメーター構造体の制限
構造体の配列内のすべての構造体は同じフィールド階層をもたなければなりません。階層内の各フィールドは配列全体で同じ特性をもたなければなりません。
フィールド名
数値データ型 (
single
やint32
など)実数/複素数
次元
たとえば、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
の型定義に適合するパラメーター構造体を作成できます。この手法を使用して以下を実行します。
既存の C コードを Simulink® モデルで置き換える。
Simulink でのシミュレーション用の既存の C コードを統合する (たとえば、レガシ コード ツールを使用)。例については、Integrate C Function Whose Arguments Are Pointers to Structuresを参照してください。
既存の C コードを使用して単一のアプリケーションにコンパイルできる C コードを生成する (Simulink Coder™)。例については、Exchange Structured and Enumerated Data Between Generated and External Code (Embedded Coder)を参照してください。
MATLAB では、パラメーター構造体をパラメーター オブジェクトに保存し、バス オブジェクトをデータ型として使用します (パラメーター オブジェクトの作成によるフィールドのデータ型と特性の制御を参照)。C コードの struct
型に基づいてバス オブジェクトを作成するには、関数 Simulink.importExternalCTypes
を使用します。