主要内容

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

变体子系统

このモデルではs金宝appimulink®变体子系统について说明します。variant子系统をを使使と,シミュレーション时には1つの実のみであるサブに対して,复の実装をすることができます。切り替え,モデルモデルを変更せせに他の装饰

变体子系统の概要

变体子系统ブロックには複数の子サブシステムがあり,モデルの実行時にいずれかの子がアクティブになります。アクティブな子サブシステムは”アクティブなバリアント”と呼ばれます。变体子系统ブロックのアクティブなバリアントは,ベースワークスペース内の変数の値を変更することによってプログラムで切り替えるか,または变体子系统ブロックのダイアログを使用してバリアントの選択を手動でオーバーライドすることによって切り替えることができます。“アクティブなバリアント”はモデルのコンパイル時に仿真金宝app软件によって变体子系统の尺寸ブロックと外港ブロックにプログラムで結線されます。

バリアントバリアントの选択ををプログラムで制御するにvariant子系统ブロックブロックのダイアログ金宝appsimulink.variant.オブジェクトを各子サブシステムに関連付けます。金宝appsimulink.variant.オブジェクトはMATLAB®ベースワークスペースで作成されます。これらのオブジェクトには、ブール値として評価され、アクティブなバリアントの子サブシステムを決定するために使用される式である、健康)状况という名のプロパティがあります。たとえば,

VSS_LINEAR_CONTROLLER 金宝app= Simulink.Variant(“VSS_MODE = = 1”);

を定义すると,ベースワークスペースに金宝appsimulink.variant.オブジェクトが作成され,コンストラクターの引数(“VSS_MODE = = 1”)次はそのををアクティブしになるときを定义しになるににににををダイアログダイアログを使使用し,VSS_LINEAR_CONTROLLERを变量子系统内の子サブシステムの1つに关键词ます。グローバルグローバルワークスペース,

VSS_MODE = 1

を定義すると,VSS_LINEAR_CONTROLLERバリアントがアクティブ化されます。条件引数は,スカラー変数,列挙型,等値,非等値,& &,および~で構成される”単純な式”にすることができます。小かっこ()をを使使と,优先顺位をグループできます。

变体子系统の实用方法

この例のモデルでは,次のバリアントオブジェクトとバリアント制御変数を使用します。これらはMATLABのベースワークスペースで定义します。

VSS_LINEAR_CONTROLLER 金宝app= Simulink.Variant(“VSS_MODE = = 1”);

vss_nonlinear_controller 金宝app= simulink.variant('vss_mode == 2');

VSS_MODE = 2;

モデル例sldemo_variant_subsystems.を开启と,文件 - > ModelProperties - >回调で定义されたpreloadfcn.これ実行さます。これこれ,ベースベーススペースに控制器という名の变体子系统ブロックのの数がが力されれ

図 1:モデル例,sldemo_variant_subsystems.

金宝appsimulink.variant.オブジェクトの控制器サブシステム用の関連付けを指定するには,控制器サブシステムを右クリックし,[サブシステムのパラメーター]を选択します。これこれ控制器子系统ブロックのダイアログが開きます。

[控制器子系统ブロック]ダイアログで,可能なが2つ指定されます。VSS_LINEAR_CONTROLLERVSS_NONLINEAR_CONTROLLERという2つの金宝appsimulink.variant.オブジェクトに関連付けられます。これらのオブジェクトはベース ワークスペース内に存在しています。これらのオブジェクトには、論理値として評価され、どのバリアントがアクティブになるのかを特定する式である、健康)状况という名のプロパティがあります。条件は,变体子系统ブロック]ダイアログにも表示されます。この例では,VSS_LINEAR_CONTROLLERVSS_NONLINEAR_CONTROLLERのの条件のプロパティはそれぞれVSS_MODE = = 1VSS_MODE = = 2です。参数vss_mode.はベースワークスペース内にに,标准のmatlab変数または金宝appSimulink.Parameter.Parameter.にすることができます。

关键词付けられバリアントオブジェクトがないか,または[变体子系统パラメーター]ダイアログボックスでバリアントオブジェクト先头に“%”(コメント)文章がが付いているいるは,子サブシステムコメントコメント见なさ,モデル実サブはコメントれ,モデル実行中は使用され。

図2:控制器子系统ブロックのコンテンツ

变量子系统ブロックブロックに,Inportブロック,出口ブロック,子系统ブロックを配置することができ。この例では,线性控制器子系统ブロックはバリアントオブジェクトVSS_LINEAR_CONTROLLERに关键词られ,非线性控制器子系统ブロックはバリアントオブジェクトVSS_NONLINEAR_CONTROLLERに关键词付けます。

变体子系统内で信号の接続はできません。金宝app仿真软件はモデルのシミュレーション時に,尺寸ブロックと外港ブロックをアクティブなバリアントにプログラム上で接続します。

アクティブなバリアントの切り替え

线性控制器バリアントバリアント使用ししシミュレーションシミュレーション行うにに,

VSS_MODE = 1

を定義してから,モデルをシミュレートします。

図3:线性控制器バリアントを使用したシミュレーション

非线性控制器を使用してシミュレートするには,

VSS_MODE = 2

をベースワークスペースで定义してから,モデルをシミュレートします。

図4:非线性控制器バリアントを使用したシミュレーション

列挙と再利用

sldemo_variant_subsystems_enumモデルは以下の金宝appsimulink.variant.の機能を説明します。

1。列挙型:MATLAB列挙型クラスを使用すると,バリアントオブジェクトの条件を読みやすくすることができます。

2。再利用:金宝appsimulink.variant.オブジェクトは,别の变子系统ブロックで再利用できます。

このこの例で,MATLABベースベースワークスペースで定义されるののの変変を使れる使使使

vsse_linear_controller 金宝app= simulink.variant(...'vsse_mode == sldemo_vss_controller_type.linear')

VSSE_NONLINEAR_CONTROLLER 金宝app=仿真软件。变体(…“VSSE_MODE = = sldemo_vss_CONTROLLER_TYPE.NONLINEAR”)

VSSE_MODE = sldemo_vss_CONTROLLER_TYPE。线性

vsse_prototype 金宝app= simulink.variant(...'vsse_mode_build == sldemo_vss_build_type.prototype')

vsse_production 金宝app= simulink.variant(...'vsse_mode_build == sldemo_vss_build_type.production')

VSSE_MODE_BUILD = sldemo_vss_BUILD_TYPE。生产

これらの金宝appsimulink.variant.オブジェクトでは列挙クラスsldemo_vss_BUILD_TYPE.msldemo_vss_controller_type.m.を使用し,金宝appsimulink.variant.健康)状况パラメーターを定义して,可読性を改善ます。

变体子系统ブロックブロック3つのつの,滤波器1,滤波器2,滤波器3はすべてvsse_prototype.vsse_production.金宝appsimulink.variant.オブジェクトを使使ます。

モデル例sldemo_variant_subsystems_enumを开启と,文件 - > ModelProperties - >回调で定义されたpreloadfcn.これが実され。これこれ,ベースベーススペースに变量子系统

図 5:モデル例,sldemo_variant_subsystems_enum

コード生成

金宝app仿真软件®编码器™を使用して,变体子系统ブロックを含むモデルからコードを生成することができます。既定の設定では,生成されたコードにはアクティブなバリアントだけが含まれます。別の方法として、嵌入式编码器™を使用する際にC言語のプリプロセッサの条件文(#如果#elif.# endif)で保护して,すべてのバリアント用のコード生成できます。

ささ,变体子系统内の子サブシステムにされますますますためためブロックに课されるが变种子系统ブロックブロック内容に适适内容ますます。制约のチェックは生成时に行为れます。また,变体子系统ブロックの子サブシステム原子子系统でなけれでなけれなりません。これこれ[子系统パラメーター]ダイアログダイアログボックスパラメーターを选択することにより生成されます。

プリプロセッサの条件のコード生成は以下の场合にアクティブになります。

  1. [コンフィギュレーションコンフィギュレーション]ダイアログボックスの[コード生成]ペインで嵌入式编码器ターゲットターゲット选択されている。

  2. 变体子系统の[ブロックパラメーター]ダイアログボックスで[バリアント条件をオーバーライドし以下のバリアントを使使用。が“オフ”ににている。

プリプロセッサの条件のコード生成がアクティブなななは,生成ささコードには,c言语のプリプロセッサの条件で保护れたのたたsubsすべて子サブがすべてすべて子选択は,生成されたのコンパイルまでまでれるれ.cマクロでエンコードれるれるとしつのオブジェクトだけ真とし(

またバリアント制御位数(上述のvss_mode.vsse_mode.など)は生成されたコード内でバリアント制御変数の#定义文件をどのようにに定理するかを指定する金宝appSimulink.Parameter.Parameter.オブジェクトでなければなりません。sldemo_variant_subsystems.では,ベースワークスペースからvss_mode.の双重を消去するます。Model Explorer - 金宝app> Simulink Root - > Base Workspaceを使用し,vss_mode.という名前の新しい金宝appSimulink.Parameter.Parameter.を追加します。パラメーターの[値]1または2[データ型]int32[ストレージクラス]ImportedDefine[カスタム属性ヘッダーファイル]sldemo_variant_subsystems_vdef.h.に指定します。次に,空格作业ディレクトリこのこのを作用成し。

/ *文件:sldemo_variant_subsystems_vdef.h * / #ifndef sldemo_variant_subsystem_vdef_h #define stlemo_variant_subsystem_vdef_h #define vss_mode 1 #endif

变体子系统用のコード生成の詳細は,嵌入式编码器のドキュメンテーションを参照してください。

参考

||

关键词する

外部の网サイト