通过使用原子盒重用函数
一个原子的盒子是一个图形对象,帮助您封装图形,真值表,MATLAB®和仿真软件®函数在单独的名称空间中。在独立的Stateflow中不支持原子框®在MATLAB图表。原子框允许:
在对具有许多状态或层次结构的图表中的函数进行小的更改后,可以更快地进行模拟
跨多个图表和模型重用相同的功能
对于在同一图表的不同部分工作的人来说,团队开发是很容易的
手动检查图表中特定函数生成的代码
原子框看起来不透明,并且包含标签原子在左上角。如果使用库中的链接原子框,则标签链接出现在左上角。
原子盒的例子
此示例演示如何使用链接原子框跨多个图表和模型重用图形函数。
这个函数取得时间
是在库模型的图表中定义的sf_timer_utils_lib
.图形函数返回C图中的模拟时间,其中等效的MATLAB®函数getSimulationTime
是不可用的。
该模型sf_timer_function_calls
包含两个结构相似的图表。每个图表包含一对状态(一个
而且B
)和原子盒(时间
)从图书馆图表中链接。处于状态的入口操作一个
调用函数取得时间
并将其值存储为t0
.保护过渡的条件一个
来B
再次调用函数并将其输出与参数进行比较T
.
顶部模型sf_timer_modelref
在多个引用块中重用计时器函数。因为没有导出函数,所以可以在顶级模型中使用引用块的多个实例。
使用原子盒的好处
原子框结合了普通框和原子子图的功能。原子框:
提高复杂图表的组织和清晰度。
支持作为库链接使用。
支持可重用代码的生成。
允许映射输入、输出、参数、数据存储内存和输入事件。
原子盒只包含函数。它们不能包含状态。向原子框添加状态会导致编译时错误。
要从原子框外的位置调用驻留在原子框中的函数,使用点表示法指定它的完整路径:
atomic_box_name.function_name
明确链接原子框中函数的依赖关系。
避免对全局名称空间的污染。
不影响生成代码的效率。
创建原子框
您可以通过转换现有的框或从库模型链接图表来创建原子框。在创建原子框之后,通过右键单击原子框并选择来更新变量的映射子图表映射.有关更多信息,请参见原子子图和框的映射变量.
将普通框转换为原子框
要为函数创建允许更快调试和代码生成工作流的容器,请将现有框转换为原子框。在图表中,右键单击一个普通框并选择组和子图表>原子子图表.标签原子出现在方框的左上角。
转换过程为原子框提供了该框在图表中访问的每个数据对象的自己的副本。将本地数据复制为数据存储内存。其他数据(包括输入和输出数据)的范围不会改变。
请注意
如果框包含任何状态或消息,则不能将其转换为原子框。
链接库中的原子框
要创建跨多个图表和模型重用的函数集合,请从库模型创建一个链接。复制一个库模型中的图表,并将其粘贴到另一个模型中的图表。如果库图只包含函数而不包含状态,则显示为带有标签的链接原子框链接在左上角。
这种建模方法最大限度地减少了可重用函数的维护。当您修改库中的原子框时,您的更改将传播到所有图表和模型中的链接。
如果库图包含任何状态,则在图中显示为链接原子子图。有关更多信息,请参见使用原子子图创建可重用子组件.
将原子框转换为普通框
将原子框转换回正常框,通过合并子图表的父数据对象与它们所映射到的图表父数据,可以删除其所有变量映射。
如果原子框是库链接,右键单击原子框并选择库链接>禁用链接.
若要将原子框转换为子图表框,请右键单击原子框并清除组和子图表>原子子图表复选框。
若要将子图表框转换回正常框,请右键单击子图表并清除组和子图表>子图表复选框。
如有必要,请重新排列图表中的图形对象。
如果存在以下情况,则不能将原子框转换为普通框:
原子框将参数映射到表达式,而不是单个变量名。例如,映射参数
data1
To其中一个表达式阻止原子框转换为普通框:3.
data2 (3)
data2 + 3
这两个条件都成立:
原子框包含使用MATLAB作为动作语言的MATLAB函数或真值表函数。
原子框不将每个变量映射到主图表中的同名变量。
何时使用原子盒
逐步调试功能
假设您想测试对函数库的一系列更改。函数是包含许多状态或多个层次结构的图表的一部分,因此重新编译整个图表可能需要很长时间。如果在原子方框中定义函数,则只会对方框进行重新编译,而不会对整个图表进行重新编译。有关更多信息,请参见减少图表的编译时间.
重用功能
假设您有一组用于多个图表和模型的函数。函数驻留在库模型中,以支持更容易的配置管理。要在另一个模型中使用函数,您可以:
配置库图以导出函数,并在模型中创建到库图的链接。
将库图链接为模型的每个图中的原子框。
使用这些函数的模型可以作为顶级模型中的引用块出现。在导出函数时,对于每个顶级模型只能使用该引用块的一个实例。有关更多信息,请参见模型参考要求和限制(模型).
使用原子框,可以避免这种限制。因为图表中没有导出函数,所以您可以在顶级模型中使用多个引用块的实例。
开发多人使用的图表
假设有很多人正在处理图表的不同部分。如果将每个函数库存储在一个链接原子框中,那么不同的人可以处理不同的函数库,而不会影响图表的其他部分。有关更多信息,请参见把图表分成独立的单元.
检查生成的代码
假设您想要检查由仿真软件编码器™或者嵌入式编码器®为特定的功能手动。可以指定原子框的代码出现在单独的文件中,以避免搜索不相关的代码。有关更多信息,请参见从原子子图生成代码.