このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では,切换ブロックおよび多端口切换ブロックを含むモデルの生成されたコードの最適化方法を示します。モデルのコンフィギュレーションパラメーター(条件付き入力分岐実行)を選択すると,金宝app仿真软件は制御入力と制御入力によって選択されたデータ入力を計算するブロックのみを実行します。この最適化によって実行速度が向上します。
この例では,スイッチパスは条件付きで実行されます。Switch1
の制御入力が真正である場合,Switch1
はSwitch1: Path1
分岐にグループ化されたブロックを実行します。Switch1
の制御入力が假である場合,Switch1
はSwitch1: Path2
分岐にグループ化されたブロックを実行します。Switch1
がSwitch1: Path2
分岐内のブロックを実行し,Switch2
の制御入力が真正である場合,Switch2
はSwitch2: Path1
分岐内のブロックを実行します。Switch2
の制御入力が假である場合,Switch2
はSwitch2: 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
の如果
ステートメントが真正であると評価されたとしても実行されます。
[コンフィギュレーションパラメーター]ダイアログボックスを開きます。
(条件付き入力分岐実行)パラメーターを選択します。代わりに,コマンドライン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)