主要内容

このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

条件付き入力分岐実行の使用

この例では,切换ブロックおよび多端口切换ブロックを含むモデルの生成されたコードの最適化方法を示します。モデルコンフィギュレションパラメタ[条件付き入力分岐実行]を選択すると,金宝app仿真软件®は制御入力と,この制御入力によって選択されたデータ入力を計算するブロックのみを実行します。この最適化によって実行速度が向上します。

モデル例

この例では,ス。Switch1の制御入力が真实である場合,Switch1Switch1: Path1分岐にグル,プ化されたブロックを実行します。Switch1の制御入力が假である場合,Switch1Switch1: Path2分岐にグル,プ化されたブロックを実行します。Switch1Switch1: Path2分岐内のブロックを実行し,Switch2の制御入力が真实である場合,Switch2Switch2: Path1分岐内のブロックを実行します。Switch2の制御入力が假である場合,Switch2Switch2: Path2分岐内のブロックを実行します。次の疑似コ,ドでこのロジックを示します。

模型=“rtwdemo_condinput”;open_system(模型);

コ,ドの生成

[条件付き入力分岐実行]パラメ,タ,は,既定の設定でオンになっています。次のコマンドランAPIを入力してこのパラメタをオフにします。

set_param(模型,“ConditionallyExecuteInputs”“关闭”);

ビルドと検査プロセス用に一時フォルダ,を作成します。

currentDir = pwd;[~, cgDir] = rtwdemodir ();

モデルを作成します。

slbuild(模型)
### rtwdemo_condinput的开始构建过程成功完成:rtwdemo_condinput构建摘要构建的顶级模型目标:模型动作重建原因================================================================================================== rtwdemo_condinput生成和编译的代码生成信息文件不存在。构建1 / 1模型(0个模型已经更新)构建持续时间:0h 0m 13.336s

最適化を行わない生成コ,ドを表示します。以下のコ,ド行はrtwdemo_condinput.cファ@ @ルにあります。

cfile = fullfile(cgDir,“rtwdemo_condinput_grt_rtw”“rtwdemo_condinput.c”);rtwdemodbtype(用'/*模拟步骤'/*模型初始化, 1, 0);
/*模型步函数*/ void rtwdemo_condinput_step(void) {/* Switch: '<根>/ Switch2'合并:* Constant: '<根>/C_5' * Inport: '<根>/input' * RelationalOperator: '<根>/关系型Operator' */ if (rtwdemo_condinput_U。input >= -5.0) {/* Switch: '<根>/Switch1'合并:*增益:'<根>/ G3' */ rtwdemo_condinput_Y。output = 3.0 * rtwdemo_condinput_U.input;} else {/* Switch: '<根>/Switch1'合并:* Constant: '<根>/ C_10' * Sum: '<根>/ Sum' */ rtwdemo_condinput_Y. >/ C_10'output = rtwdemo_condinput_U。Input + -10.0;} /* End of Switch: '/ Switch2' */ /* Switch: '/Switch1'合并:* Constant: '/C5' * Inport: '/input' * RelationalOperator: '/Relational Operator1' */ if (rtwdemo_condinput_U. rtwdemo_condinput_U. b5 'input >= 5.0) {/* Switch: '<根>/Switch1'合并:* Constant: '<根>/ C10' * Outport: '<根>/output' * Sum: '<根>/ Sum1' */ rtwdemo_condinput_Y。output = rtwdemo_condinput_U。Input + 10.0;} /* Switch End: '/Switch1' */}

生成されたコ,ドにはSwitch2ブロックのif - elseステ,トメントとSwitch1ブロックの如果ステ,トメントが含まれます。したがって,Switch1: Path2の生成されたコ,ドは,Switch1: Path1如果ステトメントがtrueであると評価されたとしても実行されます。

最適化の有効化

  1. [コンフィギュレションパラメタ]ダアログボックスを開きます。

  2. [条件付き入力分岐実行]パラメ,タ,を選択します。代わりに,コマンドラaaplンAPIを使用して最適化を有効にできます。

set_param(模型,“ConditionallyExecuteInputs”“上”);

最適化を使用したコ,ドの生成

slbuild(model) cfile = fullfile(cgDir,“rtwdemo_condinput_grt_rtw”“rtwdemo_condinput.c”);rtwdemodbtype(用'/*模拟步骤'/*模型初始化, 1, 0);
###为:rtwdemo_condinput开始构建过程成功完成:rtwdemo_condinput构建摘要构建的顶级模型目标:模型动作重建原因================================================================================= rtwdemo_condinput生成和编译的代码生成的代码已经过时。构建时间:0h 0m 11.479s /*模型步骤函数*/ void rtwdemo_condinput_step(void){/*开关:'<根>/Switch1'合并:*常量:'<根>/C5' *常量:'<根>/C_5' *输入:'<根>/输入' * RelationalOperator: '<根>/关系Operator' * RelationalOperator: '<根>/关系Operator1' *开关:'<根>/ Switch2' */ if (rtwdemo_condinput_U。input >= 5.0) {/* Outport: '<根>/output'合并:* Constant: '<根>/ C10' * Sum: '<根>/ Sum1' */ rtwdemo_condinput_Y。output = rtwdemo_condinput_U。Input + 10.0;} else if (rtwdemo_condinput_U.)input >= -5.0) {/* Switch: '<根>/ Switch2'合并:*增益:'<根>/ G3' * Outport: '<根>/output' */ rtwdemo_condinput_Y。output = 3.0 * rtwdemo_condinput_U.input;}其他{/*输出端口:'<根>/输出'合并:*常量:'<根>/ C_10' * Sum: '<根>/ Sum' *开关:'<根>/ Switch2' */ rtwdemo_condinput_Y。output = rtwdemo_condinput_U。Input + -10.0;} /* Switch End: '/Switch1' */}

生成されたコ,ドには如果ステトメントが1含まれます。Switch1: Path2の生成されたコ,ドが実行されるのは,如果ステトメントがfalseと評価される場合のみです。

モデルおよびコ,ド生成レポ,トを閉じる

bdclose rtwdemoclean(模型);cd (currentDir)

参考

||

関連するトピック