このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
同じブロックパラメーターの複数の独立した値のセットを保存するには,構造体の配列を使用します。パラメーターのセットを切り替えるには,配列のインデックスとして動作する変数を作成し,変数の値を変更します。シミュレーション時,および変数が調整可能な場合は生成されたコードの実行時に,変数の値を変更できます。
モデル例を開きます。
open_system (“sldemo_fuelsys_dd_controller”)
このモデルは,ガソリンエンジンの燃料供給システムを表しています。モデルの出力は,エンジンへの燃料流量の比率です。
入れ子にされたサブシステムswitchable_compensation
に移動します。
open_system ([“sldemo_fuelsys_dd_controller / fuel_calc /”,...“switchable_compensation”])
このサブシステムは,燃料比信号のノイズを修正および除去します。サブシステムは燃料供給モードに基づいてさまざまなフィルター係数を使用します。燃料供給モードはエンジン内のセンサーの障害に基づいて制御ロジックにより変更されます。たとえば,制御アルゴリズムは,通常の動作中にlow_mode
サブシステムをアクティブにします。このアルゴリズムは,センサー障害に応答してrich_mode
サブシステムをアクティブにします。
low_mode
サブシステムを開きます。
open_system ([“sldemo_fuelsys_dd_controller / fuel_calc /”,...“switchable_compensation / low_mode”])
离散滤波器ブロックは,燃料比信号をフィルター処理します。ブロックのダイアログボックスで,[分子係数]パラメーターにフィルターの分子係数を設定します。
兄弟サブシステムrich_mode
には,異なる係数を使用する离散滤波器ブロックも含まれます。
モデルブロック線図を更新して信号データ型を表示します。ブロックの入出力信号では,単精度の浮動小数点データ型单
を使用します。
モデルの左下隅でモデルデータバッジをクリックしてから,[データディクショナリ]リンクをクリックします。このモデルのデータディクショナリsldemo_fuelsys_dd_controller.sldd
がモデルエクスプローラーで開きます。
モデルエクスプローラーの[モデルの階層構造)ペインで[データの設計]ノードを選択します。
[コンテンツ]ペインで,s16En15
などの金宝app仿真软件。NumericType
オブジェクトのプロパティを表示します。これらすべてのオブジェクトは現在単精度の浮動小数点データ型单
を表します。モデルはこれらのオブジェクトを使用して,离散滤波器ブロックの入出力信号を含む信号のデータ型を設定します。
シミュレーション中および生成されたコードの実行中に,これらの各サブシステムで,ユーザーが制御する値をもつ変数に基づいてさまざまな分子係数を切り替えます。
既存の分子係数のセットを,値が構造体の金宝app仿真软件。参数
オブジェクトに保存します。構造体の各フィールドには,いずれかの离散滤波器ブロックの係数が保存されます。
lowBlock = [“sldemo_fuelsys_dd_controller / fuel_calc /”...“switchable_compensation / low_mode /离散滤波器”];richBlock = [“sldemo_fuelsys_dd_controller / fuel_calc /”...“switchable_compensation / rich_mode /离散滤波器”];参数个数。lowNumerator = eval (get_param (lowBlock“分子”));参数个数。richNumerator = eval (get_param (richBlock“分子”));params = 金宝appSimulink.Parameter (params);
参数个数
の値を一時変数にコピーします。この一時構造体のフィールドの値を変更し,変更した構造体を参数个数
の2番目の要素として代入します。
temp = params.Value;temp.lowNumerator = params.Value.lowNumerator * 2;temp.richNumerator = params.Value.richNumerator * 2;params.Value (2) = temp;清晰的临时
参数个数
の値は2つの構造体の配列です。各構造体はフィルター係数の1つのセットを格納しています。
Ctrl
という名前の金宝app仿真软件。参数
オブジェクトを作成します。
Ctrl = 金宝appSimulink.Parameter (2);Ctrl。数据类型=“uint8”;
low_mode
サブシステムの离散滤波器ブロックのダイアログボックスで,[分子係数]パラメーターを式参数(Ctrl) .lowNumerator
に設定します。
set_param (lowBlock“分子”,“params (Ctrl) .lowNumerator”);
rich_mode
サブシステムの离散滤波器ブロックで,[分子係数]パラメーターの値を参数(Ctrl) .richNumerator
に設定します。
set_param (richBlock“分子”,“params (Ctrl) .richNumerator”);
この式は変数Ctrl
を使用して参数个数
内の構造体の1つを選択します。式ではその後構造体のフィールドの1つを逆参照します。フィールド値には分子係数の値が設定されています。
係数のセットを切り替えるには,Ctrl
の値を構造体の配列の対応するインデックスに変更します。
必要に応じて金宝app仿真软件。公共汽车
オブジェクトを作成して構造体配列のデータ型として使用します。次のようにして実行できます。
構造体の形状の制御。
フィールドごとにデータ型や物理単位などの特性を制御。
生成コード内の结构体
型の名前の制御。
関数金宝appSimulink.Bus.createObject
を使用してオブジェクトを作成し,オブジェクトの名前をparamsType
に変更します。
金宝appSimulink.Bus.createObject(params.Value) paramsType = slBus1;清晰的slBus1
データディクショナリの金宝app仿真软件。NumericType
オブジェクトを使用して,構造体のフィールドのデータ型を制御できます。バスオブジェクトでデータ型オブジェクトの名前を使用して,各要素の数据类型
プロパティを設定します。
paramsType.Elements(1)。数据类型=“s16En15”;paramsType.Elements(2)。数据类型=“s16En7”;
バスオブジェクトを構造体配列のデータ型として使用します。
参数个数。数据类型=“巴士:paramsType”;
必要に応じて切り替え変数のデータ型として列挙型を使用します。それぞれのパラメーターセットに意味のある名前を関連付けると共に,切り替え変数が使用できる値を制限できます。
FilterCoeffs
という名前の列挙型を作成します。参数个数
内の各構造体について,列挙型メンバーを作成します。各列挙型メンバーの基となる整数値を,参数个数
の対応するインデックスに設定します。
金宝appSimulink.defineIntEnumType (“FilterCoeffs”, {“弱”,“咄咄逼人”} [1 - 2])
この列挙型を切り替え変数のデータ型として使用します。この変数の値を咄咄逼人的
に設定します。これはインデックス2
に対応します。
Ctrl。值= FilterCoeffs.Aggressive;
作成したオブジェクトをデータディクショナリsldemo_fuelsys_dd_controller.sldd
に追加します。
dictObj = 金宝appSimulink.data.dictionary.open (“sldemo_fuelsys_dd_controller.sldd”);sectObj = getSection (dictObj,设计数据的);addEntry (sectObj“热”Ctrl) addEntry (sectObj“参数”params) addEntry (sectObj“paramsType”paramsType)
列挙型をデータディクショナリに保存することもできます。ただし,変更をsldemo_fuelsys_dd_controller.sldd
に保存することはできないため,この場合は列挙型をインポートすることはできません。データディクショナリへの列挙型の保存の詳細については,データディクショナリの列挙値を参照してください。
モデル例sldemo_fuelsys_dd
を開きます。このモデルはコントローラーモデルsldemo_fuelsys_dd_controller
を参照しています。
open_system (“sldemo_fuelsys_dd”)
シミュレーション中にモデルを操作できるように,シミュレーション終了時間を正
に設定します。
シミュレーションの実行を開始し,范围ブロックのダイアログボックスを開きます。エンジンの通常動作時の燃料流量(燃料
信号)の振動と大幅な振幅がスコープに表示されます。
モデルエクスプローラーでデータディクショナリsldemo_fuelsys_dd_controller.sldd
の内容を表示します。Ctrl
の値をFilterCoeffs。弱
に設定します。
モデルブロック線図sldemo_fuelsys_dd
を更新します。アグレッシブの度合いが低いフィルター係数のために,燃料比の振動の振幅が減少することがスコープによって示されます。
シミュレーションを停止します。
金宝app仿真软件编码器ソフトウェアをお持ちの場合,コードの実行中にパラメーターセットを切り替えることができるコードを生成できます。
モデルエクスプローラーでデータディクショナリsldemo_fuelsys_dd_controller.sldd
の内容を表示します。[コンテンツ]ペインで,(列ビュー]を存储类
に設定します。
構造体配列が生成コード内で調整可能なグローバル変数として現れるように,(StorageClass)列を使用してストレージクラスExportedGlobal
を参数个数
に適用します。コードの実行中に切り替え変数の値を変更できるように,同じストレージクラスをCtrl
に適用します。
または,オブジェクトを構成するために,次のコマンドを使用します。
tempEntryObj = getEntry (sectObj,“参数”);params = getValue (tempEntryObj);参数个数。StorageClass =“ExportedGlobal”;setValue (tempEntryObj params);tempEntryObj = getEntry (sectObj,“热”);Ctrl = getValue (tempEntryObj);Ctrl。StorageClass =“ExportedGlobal”;setValue (tempEntryObj Ctrl);
コントローラーモデルからコードを生成します。
slbuild (“sldemo_fuelsys_dd_controller”)
### ### ### ###成功完成代码生成:模型重建行动的原因 ================================================================================================ sldemo_fuelsys_dd_controller代码生成的代码生成信息文件不存在。建造时间:0h 0m 33.839s
コード生成レポートで,ヘッダーファイルsldemo_fuelsys_dd_controller_types.h
を表示します。このコードは列挙データ型FilterCoeffs
を定義します。
文件= fullfile (“sldemo_fuelsys_dd_controller_ert_rtw”,...“sldemo_fuelsys_dd_controller_types.h”);rtwdemodbtype(文件,“ifndef DEFINED_TYPEDEF_FOR_FilterCoeffs_”,...'/* rtModel的正向声明*/', 1,0)
#ifndef DEFINED_TYPEDEF_FOR_FilterCoeffs_ #define DEFINED_TYPEDEF_FOR_FilterCoeffs_ typedef enum {Weak = 1, /*默认值*/ Aggressive} FilterCoeffs;# endif
また,このコードは金宝app仿真软件。公共汽车
オブジェクトに対応付けられている構造体型paramsType
も定義します。このフィールドは,モデルの単精度浮動小数点データ型を使用します。
rtwdemodbtype(文件,“ifndef DEFINED_TYPEDEF_FOR_paramsType_”,...“ifndef DEFINED_TYPEDEF_FOR_FilterCoeffs_”, 1,0)
#ifndef DEFINED_TYPEDEF_FOR_paramsType_ #define DEFINED_TYPEDEF_FOR_paramsType_ typedef struct {real32_T lowNumerator[2];real32_T richNumerator [2];} paramsType;# endif
ソースファイルsldemo_fuelsys_dd_controller.c
を表示します。このコードは,列挙型を使用して切り替え変数Ctrl
を定義します。
文件= fullfile (“sldemo_fuelsys_dd_controller_ert_rtw”,...“sldemo_fuelsys_dd_controller.c”);rtwdemodbtype(文件,'FilterCoeffs Ctrl = Aggressive;',...'/*块信号(默认存储)*/', 1,0)
FilterCoeffs Ctrl = Aggressive;/*变量:Ctrl *引用:* '/离散过滤器' * ' /离散过滤器' */
このコードは,構造体配列参数个数
も定義します。
rtwdemodbtype(文件,'/*导出块参数*/',...“/ *变量:参数”, 1, 1)
/*输出块参数*/ paramsType params[2] = {{8.7696F, -8.5104F}, {0.0F, 0.2592F}}, {{17.5392F, -17.0208F}, {0.0F, 0.5184F}};/ *变量:参数
モデルの関数一步
のコードアルゴリズムは,構造体配列のインデックスを指定するために切り替え変数を使用します。
構造体配列に格納されているパラメーターセットを切り替えるには,コードの実行中にCtrl
の値を変更します。
データディクショナリへの接続を閉じます。この例では未保存の変更は破棄されます。変更を保存するには,“保存”
オプションを使用します。
金宝appSimulink.data.dictionary.closeAll (“sldemo_fuelsys_dd_controller.sldd”,“丢弃”)