在本教程中,您将使用Simulink金宝app®函数在状态流中®改进图表设计的一个模型命名old_sf_car
.
金宝appMATLAB中的独立状态流图不支持Simul金宝appink函数®.
的old_sf_car
模型包含一个名为阈值计算
和一个名为shift_logic
.
当运行此模型时,图表首先广播输出事件CALC_TH
触发函数调用子系统。的两个值shift_logic
图表。接下来,图表广播输出事件CALC_TH
触发函数调用子系统。最后,子系统输出(up_th
和down_th
)返回图表作为输入。
在以下情况下,你可以用Simulink函数替换函数调用子系统:金宝app
子系统执行图表所需的计算。
模型中的其他块不需要访问子系统输出。
接下来的部分描述了如何用状态流程图中的Simulink函数替换Simulink模型中的函数调用子系统。金宝app这个过程减少了模型中的对象数量,同时保留了相同的模拟结果。
一步 | 任务 | 参考 |
---|---|---|
1 | 打开模型。 | 打开模型 |
2 | 将函数调用子系统的内容移动到图中的Simulink函数中。金宝app | 在图表中添加金宝appSimulink函数 |
3. | 将特定图表级数据的范围更改为当地的 . |
更改图表数据的范围 |
4 | 用函数调用替换事件广播。 | 更新图表中的状态操作 |
5 | 验证函数输入和输出是否已定义。 | 向图表中添加数据 |
6 | 删除模型中未使用的项。 | 删除模型中未使用的项目 |
请注意
要跳过转换步骤,请打开模型sf_car
.
打开模型old_sf_car
.如果您模拟该模型,您将在两个作用域中看到这些结果。
控件中添加一个Simulink函数金宝appshift_logic图表。
在Simuli金宝appnk模型中,右键单击左下角的Threshold Calculation块并选择减少从上下文菜单。
打开shift_logic图表。
在图表中,右键单击下面selection_state
并选择粘贴从上下文菜单。
扩展新的Simulink功能,金宝app使签名适合功能框。
提示
要更改函数的字体大小,请右键单击函数框并从字体大小菜单。
扩大…的边界selection_state
包含新函数。
请注意
函数驻留在此状态而不是图表级别,因为图表中没有其他状态需要函数输出up_th
和down_th
.看到将Simuli金宝appnk函数绑定到某个状态.
将Simulink函数金宝app重命名为Threshold_Calculation
来calc_threshold
通过输入[down_th, up_th] = calc_threshold(齿轮,油门)
在功能框中。
在模型资源管理器中,更改图表级数据的范围up_th
和down_th
来当地的
因为这些数据的计算现在发生在图表中。
在状态流编辑器中,更改在
行动selection_state
调用Simulink函数金宝appcalc_threshold
.
During: [down_th, up_th] = calc_threshold(gear, throttle);
因为函数calc_threshold
需要节气门
作为输入,您必须将该数据定义为图表输入。(详情,请参阅添加Stateflow数据.)
添加输入数据节气门
到图表上港口1的属性。
在Simulink模型中,使用端口1可以防止信号线重叠。金宝app
在Simuli金宝appnk模型中,添加一个信号线节气门
向发动机模块的输入和向发动机模块的输入shift_logic图表。
在模型资源管理器中,删除函数调用输出事件CALC_TH
因为阈值计算块不再存在。
删除模型中的任何虚线信号线。
你的新模型看起来像这样:
如果模拟新模型,结果与原始设计相匹配。