主要内容

使用条件输入分支执行

这个例子展示了如何为一个模型,优化生成的代码包含开关和多端口切换模块。当您选择模型配置参数有条件的输入分支执行只,金宝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模型建立目标:总结构建模型重建行动的原因= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = rtwdemo_condinput代码生成和编译代码生成信息文件不存在。1 1模型的建立(0模型已经更新)构建持续时间:0 h 0米30.411秒

查看生成的代码没有优化。这些代码行rtwdemo_condinput.c文件。

用= fullfile (cgDir,“rtwdemo_condinput_grt_rtw”,“rtwdemo_condinput.c”);rtwdemodbtype(用“/ *模型步骤”,/ *初始化模型的1 0);
/ *模型阶跃函数* /空白rtwdemo_condinput_step (void){/ *开关:“< Root > / Switch2”包含:*常数:< Root > / C_5的*尺寸:< Root > /输入* RelationalOperator:“<根> /关系操作符”如果(rtwdemo_condinput_U * /。输入> = -5.0){/ *开关:“< Root > / Switch1”包含:*获得:< Root > / G3的* / rtwdemo_condinput_Y。输出= 3.0 * rtwdemo_condinput_U.input;其他}{/ *开关:“< Root > / Switch1”包含:*不变:“< Root > / C_10”*金额:< Root > /笔的* / rtwdemo_condinput_Y。= rtwdemo_condinput_U输出。输入+ -10.0;}/ *开关:年底的< Root > / Switch2 * / / *开关:“< Root > / Switch1”包含:*常数:< Root > / C5的*尺寸:< Root > /输入* RelationalOperator:“< Root > /关系Operator1”如果(rtwdemo_condinput_U * /。输入> = 5.0){/ *开关:“< Root > / Switch1”包含:*常数:< Root > / C10的*外港:根> < /输出的*和:“< Root > / Sum1”* / rtwdemo_condinput_Y。= rtwdemo_condinput_U输出。输入+ 10.0;}/ *开关:年底的< Root > / Switch1 * /}

生成的代码包含一个if - else声明的Switch2块和一个如果声明的Switch1块。因此,生成的代码Switch1: Path2即使执行如果声明为Switch1: Path1评估为true。

启用优化

  1. 打开配置参数对话框。

  2. 选择有条件的输入分支执行参数。或者,您可以使用命令行API启用优化。

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

生成代码的优化

slbuild(模型)用= fullfile (cgDir,“rtwdemo_condinput_grt_rtw”,“rtwdemo_condinput.c”);rtwdemodbtype(用“/ *模型步骤”,/ *初始化模型的1 0);
# # #开始构建过程:rtwdemo_condinput # # #成功完成构建过程:rtwdemo_condinput模型建立目标:总结构建模型重建行动的原因= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = rtwdemo_condinput代码生成和编译生成的代码是过时了。1 1模型的建立(0模型已经更新)构建持续时间:0 h 0米13.545秒/ *模型阶跃函数* /空白rtwdemo_condinput_step (void){/ *开关:“< Root > / Switch1”包含:*常数:< Root > / C5的*常数:< Root > / C_5的*尺寸:< Root > /输入* RelationalOperator:“< Root > /关系操作符“* RelationalOperator:“< Root > /关系Operator1”*开关:“< Root > / Switch2”如果(rtwdemo_condinput_U * /。输入> = 5.0){/ *外港:“< Root > /输出”包含:*常数:< Root > / C10的*和:“< Root > / Sum1”* / rtwdemo_condinput_Y。= rtwdemo_condinput_U输出。输入+ 10.0;如果(rtwdemo_condinput_U}其他。输入> = -5.0){/ *开关:“< Root > / Switch2”包含:*获得:< Root > / G3的*外港:‘< Root > /输出* / rtwdemo_condinput_Y。输出= 3.0 * rtwdemo_condinput_U.input;其他}{/ *外港:“< Root > /输出”包含:*不变:“< Root > / C_10”*金额:< Root > /笔的*开关:“< Root > / Switch2”* / rtwdemo_condinput_Y。= rtwdemo_condinput_U输出。输入+ -10.0;}/ *开关:年底的< Root > / Switch1 * /}

生成的代码包含一个如果声明。生成的代码Switch1: Path2只有执行,如果如果声明的求值结果为false。

关闭模型和代码生成报告

bdclose rtwdemoclean(模型);cd (currentDir)

另请参阅

||

相关的话题