主要内容

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

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

この例では,切换ブロックおよび多端口切换ブロックを含むモデルの生成されたコードの最適化方法を示します。モデルのコンフィギュレーションパラメーター(条件付き入力分岐実行)を選択すると,金宝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代码生成和编译代码生成信息文件不存在。建造时间:0小时0米11.974秒

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

用= fullfile (cgDir,“rtwdemo_condinput_grt_rtw”“rtwdemo_condinput.c”);rtwdemodbtype(用“/ *模型步骤”/ *初始化模型的1 0);
/* Model step function */ void rtwdemo_condinput_step(void) {/* Switch: '/ Switch2'合并:* Constant: '/C_5' * import: '/input' * RelationalOperator: '/Relational Operator' */ if (rtwdemo_condinput_U. txt) {/* import: '/ Switch2'/* Switch: '/Switch1'合并:* Gain: '/ G3' */ rtwdemo_condinput_Y. txt . txt . txt . txt。输出= 3.0 * rtwdemo_condinput_U.input;} else {/* Switch: '/Switch1'合并:* Constant: '/ C_10' * Sum: '/ Sum' */ rtwdemo_condinput_Y. php . php . php . php . php . php . php。= rtwdemo_condinput_U输出。输入+ -10.0;} /* Switch: '/ Switch2' */ /* Switch: '/Switch1'合并:* Constant: '/C5' * Inport: '/input' * RelationalOperator: '/Relational Operator1' */ if (rtwdemo_condinput_U. txt)/* Switch: '/Switch1'包含:* Constant: '/ C10' * Outport: '/output' * Sum: '/ Sum1' */ rtwdemo_condinput_Y. txt ';= rtwdemo_condinput_U输出。输入+ 10.0;} /* Switch结束:'/Switch1' */}

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

最適化の有効化

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

  2. (条件付き入力分岐実行)パラメーターを選択します。代わりに,コマンドライン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代码生成和编译生成的代码是过时了。1 1模型的建立(0模型已经更新)构建持续时间:0 h 0米10.265秒/ *模型阶跃函数* /空白rtwdemo_condinput_step (void){/ *开关:“< Root > / Switch1”包含:*常数:< Root > / C5的*常数:< Root > / C_5的*尺寸:< Root > /输入* RelationalOperator: ' < Root > /关系操作符* RelationalOperator:'/Relational Operator1' * Switch: '/ Switch2' */ if (rtwdemo_condinput_U. txt);/* input >= 5.0) {/* Outport: '/output'包含:* Constant: '/ C10' * Sum: '/ Sum1' */ rtwdemo_condinput_Y。= rtwdemo_condinput_U输出。输入+ 10.0;} else if (rtwdemo_condinput_U。/* Switch: '/ Switch2'合并:* Gain: '/ G3' * Outport: '/output' */ rtwdemo_condinput_Y. log . log . log . log . log . log . log输出= 3.0 * rtwdemo_condinput_U.input;} else {/* Outport: '/output'合并:* Constant: '/ C_10' * Sum: '/ Sum' * Switch: '/ Switch2' */ rtwdemo_condinput_Y.}= rtwdemo_condinput_U输出。输入+ -10.0;} /* Switch结束:'/Switch1' */}

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

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

bdclose rtwdemoclean(模型);cd (currentDir)

参考

||

関連するトピック