通过消除本地数据存储块来提高模型可读性
您可以使用模型转换器工具,通过将 Data Store Memory、Data Store Read 和 Data Store Write 块替换为直接信号线、Delay 模块或 Merge 模块来提高模型的可读性。对于总线信号,该工具可能还会添加 Bus Creator 或 Bus Selector 块作为替换的一部分。替换这些模块可以明确数据依赖关系,从而提高模型的可读性。模型转换器会使用这些替换项创建一个模型。新模型与现有模型的功能相同。
模型转换器可以替代这些数据存储:
对于非总线信号,如果 Data Store Read 模块在 Data Store Write 模块之前执行,则该工具会将这些块替换为 Delay 模块。
对于非总线信号,如果 Data Store Write 模块在 Data Store Read 模块之前执行,则该工具会将这些块替换为直接连接。
对于总线信号,如果在读取总线之前执行写入总线元素的操作,则该工具会将 Data Store Read 和 Data Store Write 块替换为直接连接和 Bus Creator 模块。
对于总线信号,如果在读取总线元素之前执行对总线的写入操作,则该工具会将 Data Store Read 和 Data Store Write 块替换为直接连接和 Bus Selector 模块。
对于条件执行的子系统,该工具将 Data Store Read 和 Data Store Write 块替换为直接连接和 Merge 模块。对于读/写对跨越 If 子系统边界且 Write 模块位于子系统内部的模型,该工具可能还会添加 Else 子系统模块。
模型转换器工具仅消除 Data Store Memory 块定义的本地数据存储。该工具不会消除全球数据存储。对于 Data Store Memory 模块,在模块参数对话框的信号属性选项卡中,必须清除数据存储名称必须解析为 Simulink 信号对象参数。
使用模型转换器消除本地数据存储块,从而提高模型可读性
模型 data_store_elimination 包含两个本地数据存储:B 和 A。对于数据存储 B,有两个 Data Store Read 块和一个 Data Store Write 模块。对于数据存储 A,有一个 Data Store Write 模块和一个 Data Store Read 模块。红色数字代表排序后的执行顺序。

替换数据存储块
确定符合替换条件的数据存储块。然后,创建一个模型,将这些块替换为直接信号线、Delay 块或 Merge 块。
打开模型
data_store_elimination。将模型保存到您的工作文件夹中。
在应用选项卡上,点击模型转换器。
在 Transformations 文件夹中,选中 Eliminate data store blocks 复选框。
在重构模型的前缀字段中,指定重构模型的前缀。
点击运行此检查按钮。顶部的结果表格包含指向 Data Store Memory 块以及符合消除条件的相应数据存储读取和 Data Store Write 块的超链接。
点击重构模型按钮。底部的结果表格包含指向新模型的超链接。该工具会创建一个名为
m2m_ex_data_store_replacement的文件夹。此文件夹包含gen_ex_data_store_replacement.slx模型。

对于本地数据存储 A,gen_ex_bus_struct_in_code.slx 包含一个 Delay 模块来代替 Data Store Write 模块,并且包含一个直接信号连接来代替 Data Store Read 模块。对于本地数据存储 B,gen_ex_bus_struct_in_code.slx 包含从 Bias 模块到 Out2 的直接信号连接。
限制
模型转换器不会替换满足以下条件的数据存储读取和写入模块:
它们跨越了条件执行子系统(如启用子系统、触发子系统或函数调用子系统)和 Stateflow 图的边界。
它们并不构成 If-Action 子系统的互斥分支。
它们跨越了变体的界限。
它们有多个输入或输出。
它们访问数组的一部分。
它们的执行速度各不相同。
它们位于不同的库子系统实例中,并且具有不同的相对执行顺序。
另请参阅
主题
- 重构模型
- 数据存储
- Data Stores in Generated Code (Simulink Coder)