このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
不同的子系统ブロックを含むモデルでバリアント条件を指定すると,金宝appSimulink®はこれらの条件を伝播し,シミュレ,ション中にアクティブになるモデルのコンポ,ネントを決定します。バリアント条件は条件式またはバリアントオブジェクトにすることができます。
バリアント条件の注釈を使用すると,伝播された条件を可視化できます。バリアント条件の注釈を表示するには,[デバッグ]タブで,[情報のオバレ]、[バリアント凡例]を選択します。
メモ
[バリアント凡例]が使用できない場合,[デバッグ]タブで,[情報のオバレ]、[バリアント条件]を選択します。
凡例では,(默认)
キ,ワ,ドは否定の条件として表示されます。
バリアントの選択をも不同的子系统ブロックを含むこのモデルにいて検討します。特定のバリアント条件によって,各ブロックが有効になります。
变型子系统(控制器
)で,sensor1
とsensor3
はどらも線形コントロラおよび非線形コントロラで使用されますが,sensor2
は線形コントロ,ラ,でのみ使用されます。したがって,sensor2
ブロックは線形コントローラーの選択がアクティブな場合にのみ実行され,その他の選択では実行されません。变型子系统(控制器
)の外部のコンポ,ネントが不同的子系统ブロックをもつブロックのアクティブまたは非アクティブな状態を確実に認識できるようにするには,ブロックの条件を不同的子系统ブロックの外部で伝播しなければなりません。
プリプロセッサ条件を生成しないでバリアントサブシステムの外部に条件を伝播するには,不同的子系统ブロックの[ブロックパラメ,タ,]ダ@ @アログボックスで[バリアントサブシステムの外部に条件を伝播する]チェックボックスをオンにします。既定では,[バリアントサブシステムの外部に条件を伝播する]は選択されていません。
アクティブな選択肢が非線形コントロ,ラ,のモデルのシミュレ,ションを実行したときに[バリアントサブシステムの外部に条件を伝播する]がオンの場合,アクティブな選択肢のみが解析されます。[バリアントのアクティベションのタミング]が[ブロック線図の更新]
に設定されていることに注意してください。
[バリアント条件の凡例]に非アクティブな条件が假
として表示されます。ここで,sensor2
は非アクティブで,非線形コントロ,ラ,としてのバリアントの選択をも,假
としてマ,クされます。注釈はsensor2
端子と,sensor2
に接続された非アクティブなブロックに表示されます。
プリプロセッサ条件を生成しないで条件の伝播のコードを生成すると,非アクティブなブロックは無視されます。この例では,入力端子In2
は生成されたコ,ドに表示されません。
プリプロセッサ条件を生成しての外部に条件を伝播するには,[バリアントサブシステムの外部に条件を伝播する]チェックボックスをオンにして,バリアントサブシステムの[ブロックパラメ,タ,]ダ@ @アログボックスで[バリアントのアクティベションのタミング]を[コドのコンパル]
に設定します。
メモ
[バリアントのアクティベションのタミング]は,[バリアント制御モ,ド]を[式]
として指定した場合にのみ利用可能です。
アクティブな選択肢が非線形コントロ,ラ,のモデルのシミュレ,ションを実行したときに[バリアントサブシステムの外部に条件を伝播する]チェックボックスをオンにし,[バリアントのアクティベションのタミング]を[コドのコンパル]
に設定した場合,すべてのバリアントの選択肢が解析されます。[バリアント条件の凡例]にモデルに関連付けられたバリアント条件が表示されます。
プリプロセッサ条件を生成する条件の伝播のコードを生成すると,すべての選択肢に対してモデルは解析されます。この例では,入力端子In2
は必要な条件で保護されます。
メモ
指定された,ゼロまたは1のアクティブなバリアント制御の不同的子系统ブロック外部のバリアント条件を伝播するには,[ゼロアクティブバリアント制御を許可]を選択します。
[ブロックパラメ,タ,]ダ@ @アログボックスの[バリアントサブシステムの外部に条件を伝播する]チェックボックスをオンにすると,变体子系统はそのインターフェイスを接続されたブロックに適応させます。このモデルにいて考えます。
控制器ブロックは线性
および非线性
の選択を提供する变体子系统です。V = 1
のときは线性
の選択がアクティブになっています。V = 2
のときは非线性
の選択がアクティブになっています。ここでは,V
は金宝app仿真软件。参数
タ@ @プのバリアント制御変数です。控制器ブロックを選択し、Simulink で[ブロック線図]、[ブロックパラメ,タ,(子系统)]をクリックします。[バリアントサブシステム外部に条件を伝播する]チェックボックスがオンになっていることを確認します。
バリアント制御変数の値を変更するには,matlabコマンドウィンドウでV.Value = 1
またはV.Value = 2
を入力します。
控制器ブロックをダブルクリックして,そのコンテンを表示します。线性
の選択は控制器(变型子系统ブロック)のsensor1
およびsensor3
の入力を使用しています。sensor2
は使用していないため,饱和
出力は生成されません。
このモデルをシミュレ,トする場合,变体子系统ブロックは,条件V = 2
(v: 1 v = 2
)がIn2
、过滤器
および饱和记录器
ブロックに伝播するように,その@ @ @フェ@ @ @ @ @ @ @
条件付きのシステムに条件を伝播する場合,同じ条件がすべての端子に設定されます。詳細にいては,条件付きサブシステムへのバリアント条件の伝播を参照してください。
このモデルにいて考えます。ここで,条件が轮廓尺寸ブロック(fcn
)に伝播されるとき,同じ条件がすべての轮廓尺寸ブロックおよび外港ブロック(バリアントの凡例に示すとおり)に伝播し,不同的子系统ブロックが条件付きになります。
变体子系统から伝播されたバリアント条件はSimscape™ブロックまたはStateflow®ブロックで設定できません。
c++コド生成は,不同的子系统ブロックの外部に伝播された条件を含むモデルでサポ,トされません。
ルトのバス要素端子をもモデルでは,バリアント条件の伝播はサポトされていません。
メモ
Muxブロック信号,多路分配器ブロック信号または向量连接ブロック信号のすべての要素が,同じバリアント条件をもたなければなりません。
不同的子系统ブロックの外部にプログラムで条件を伝播するには,次のいずれかの構文を使用します。
プリプロセッサ条件を生成しないで条件を伝播するには,次を実行します。
set_param (VariantSubsystemName“PropagateVariantConditions”,“上”)
以下に例を示します。
set_param(“sldemo_variant_subsystems /控制器”、“PropagateVariantConditions”,“上”)
プリプロセッサ条件を生成する条件を伝播するには,次を実行します。
set_param (VariantSubsystemName PropagateVariantConditions,…“上”、“GeneratePreprocessorConditionals”,“上”)
以下に例を示します。
set_param (sldemo_variant_subsystems /控制器,‘PropagateVariantConditions’,‘上’,……“GeneratePreprocessorConditionals”,“上”)
モデルのコ,ドを生成できます。そのためには,[アプリ]タブで,(嵌入式编码)をクリックし,[cコ,ド]タブで,[ビルド]をクリックします。コ,ドを生成するためのモデルの構成の詳細は,コ,ド生成用のバリアントが含まれるモデルの準備を参照してください。
コ,ド生成のための不同的子系统ブロックを含むバリアントモデルにいて考えます。
生成されたコ,ドで,fcn
定義内のコドはcプリプロセッサの条件#如果
および# endif
によって保護されます。
无效fcn(空白){/* RootInportFunctionCallGenerator:“< Root > / RootFcnCall_InsertedFor_fcn_at_outport_1”* / #如果VSSMODE == 0 rtDWork.Linear.DiscreteFilter = rtU。In1 - 0.5 * rtDWork.Linear.DiscreteFilter_states;rtDWork.Linear。DiscreteFilter_states = rtDWork.Linear.DiscreteFilter;#endif /* VSSMODE == 0 */ #如果VSSMODE == 1 rtdwork .非线性.离散过滤器= look1_binlxpw(rtU。In1, rtCP_LookupTable_bp01Data, rtCP_LookupTable_tableData, 4U) - 0.5 * rtdwork .非线性. discretefilter_states;rtDWork.Nonlinear。离散过滤器= rtdwork .非线性.离散过滤器;#endif /* VSSMODE == 1 */ #如果VSSMODE == 0 rtY。Out1 = rtDWork.Linear.DiscreteFilter;#endif /* VSSMODE == 0 */ #如果VSSMODE == 1 rtY。Out1 = rtdwork .非线性.离散滤波器;#endif /* VSSMODE == 1 */}
メモ
モデルを变体子系统の選択肢としてのランナブルをもつAUTOSARコンポーネントとして構成することはサポートされていません。
関数呼び出し(fcn
)定義の全体を保護するには,次に示すようにバリアントのソ,スを使用します。
生成されたコ,ドでfcn ()
の定義はa ==1のとき保護されています。
#如果A == 1空fcn(空白){…} # endif
この関数は,コ,ドスニペットを使用すると,次に示すようなものに見えます。
…#如果A==1 fcn() #endif ......