Simulink DataStoreMemory:跨子系统全局数据共享实战指南
2026/9/11 15:20:03 网站建设 项目流程

1. 写在前面:为什么需要 DataStoreMemory

在 Simulink 建模过程中,我们经常会遇到一个看似简单却容易绕弯的需求:多个子系统之间共享一份数据

初学阶段,大家习惯直接把信号线从一个模块连到另一个模块,这是最直观的方式。但当系统规模变大后,信号线会越来越密、交叉越来越多,模型可读性会迅速下降。到后期维护时,光是一根根信号线的追踪就得花掉不少时间。另一个典型场景是:整车控制器模型、电池管理系统模型或电机控制模型里,往往有一个全局性的状态量,比如“当前车速”“系统运行模式”“电池 SOC”,这些量需要被很多子系统同时读取甚至写入,如果每条线都手动连线,模型会变得非常庞杂。

这时候,Simulink 常用模块库中的DataStoreMemory(数据存储内存)模块就派上了用场。它相当于在模型中创建了一块全局共享内存区,配合 Data Store Read(数据读取)和 Data Store Write(数据写入)模块,可以让多个子系统在任意位置安全地访问同一份数据,而不需要把信号线一路拖过去。

本文将完整拆解 DataStoreMemory 模块的原理、配置方式、实战案例、常见报错与工程建议。无论你是刚接触 Simulink 的学生,还是在做模型开发与代码生成的工程师,都可以从本文获得一套可直接落地的使用思路。

2. DataStoreMemory 核心概念

2.1 它到底是什么

先给一个通俗的理解:DataStoreMemory 可以类比编程语言里的全局变量,只不过它活在 Simulink 的模型世界里。

在这个比喻下:

  • DataStoreMemory 模块负责“声明和存储”这个全局变量。
  • Data Store Read 模块负责“读取”该变量的当前值。
  • Data Store Write 模块负责“写入”新值到该变量。

把三者组合使用,相当于你给模型开辟了一块公共数据区。不同子系统之间不再需要把信号线绕来绕去,而是直接通过这块公共数据区完成数据交互。

专业一点说,DataStoreMemory 在 Simulink 中是一种数据存储对象,它拥有独立的存储空间和生命周期,并且可以在整个模型层次结构中被解析。它可以在子系统内部、模型引用层次、甚至生成的 C 代码中映射为一块真实内存区域。

2.2 三个模块的分工

先认识一下这三个模块在模块库中的位置:

  • Simulink 库浏览器中,路径为Simulink / Signal Attributes / Data Store Memory
  • Data Store ReadData Store Write同样位于Simulink / Signal Attributes下。

它们的分工非常清晰:

模块作用必须条件
Data Store Memory声明一块数据存储区,并配置数据类型、初始值、存储类型一个模型中至少有一个
Data Store Read读取该存储区当前值,输出到下游模块必须关联到某个 Data Store Memory / 数据存储对象
Data Store Write将输入端口的数据写入该存储区必须关联到某个 Data Store Memory / 数据存储对象

需要注意的是,DataStoreMemory 本身不负责数据的“写入逻辑”,它只是存储容器。真正产生“写”动作的是 Data Store Write 模块,真正产生“读”动作的是 Data Store Read 模块。只要同一模型中没有同名的另一个存储区域,这些 Read 和 Write 都能自动匹配到对应的 DataStoreMemory 上。

2.3 与普通信号线的区别

很多初学者会问:“既然已经有信号线,为什么还要用 DataStoreMemory?”

这张表可以帮你快速理清差异:

对比项信号线(Signal Line)DataStoreMemory
连接方式需要通过 Goto/From 或直接连线跨越子系统边界无需连线,通过模块名称关联
适用场景局部信号传递、流程清晰的小模型全局数据共享、多子系统同步访问
可维护性线多时模型混乱模块化清晰,但需要管理命名
代码生成局部变量可映射为全局变量
调试通过 Signal Logging 查看同样可以通过 Data Store Logging 查看

这里有一个非常关键的点:DataStoreMemory 不是用来取代所有信号线的。它适合“少量但多访问点”的数据,比如系统状态、模式字、使能标志、标定值等。如果你把大量连续计算的中间信号也塞进 DataStoreMemory,反而会破坏模型的层级关系,增加耦合度。

3. 环境准备与版本说明

本文所有操作基于常见 MATLAB / Simulink 环境。由于不同 MATLAB 版本之间界面布局有一些差异,本文不会把某个具体版本的全部细节写死,而是展示通用操作路径。

  • 操作系统:Windows 10 / 11,或 Linux、macOS 均适用。
  • 软件环境:MATLAB 与 Simulink,建议 R2020a 之后的版本(不同版本中模块位置基本一致)。
  • 需要安装工具箱:Simulink 基础环境即可,不强制要求额外工具箱。
  • 辅助工具:Simulink Scope、Simulink Signal Logging 等基础模块。

如果你的版本较老,比如 R2016a 以下,DataStoreMemory 模块的配置对话框布局可能会有差异,但核心参数是基本一致的。

版本确认方式:在 MATLAB 命令行窗口输入以下命令,可以查看当前版本信息。

ver('simulink')

输出结果中包含 Version 和 Release 信息。例如:

Simulink Version 10.6 (R2022a)

如果你是学生或评估用户,也可以直接使用 MATLAB Online 进行练习,DataStoreMemory 相关操作是一致的。

4. DataStoreMemory 模块参数详解

4.1 从模块库中拖入模型

打开 Simulink 库浏览器:

simulink

在弹出的 Library Browser 中,定位到:

Simulink / Signal Attributes / Data Store Memory

直接拖拽到模型画布中即可。同样的方式,在 Signal Attributes 库中还可以找到 Data Store Read 和 Data Store Write。

如果你更喜欢用命令行方式快速添加模块,可以在 MATLAB 命令行中执行脚本,例如:

% 创建新模型 new_system('demo_dsm'); open_system('demo_dsm'); % 添加 Data Store Memory add_block('simulink/Signal Attributes/Data Store Memory', ... 'demo_dsm/DataStoreMemory1'); % 添加 Data Store Read add_block('simulink/Signal Attributes/Data Store Read', ... 'demo_dsm/DataStoreRead1'); % 添加 Data Store Write add_block('simulink/Signal Attributes/Data Store Write', ... 'demo_dsm/DataStoreWrite1');

这种方式适合需要批量搭建模型或做模型自动化的用户。

4.2 核心参数设置

双击 DataStoreMemory 模块,打开参数对话框,主要关注以下配置项。

数据存储名称(Data store name)

这是最重要的参数。Data Store Read 和 Data Store Write 通过这个名字自动关联到相应的 DataStoreMemory。命名建议使用有业务含义的英文标识符,例如VehicleSpeedBatterySOCSystemMode

初始值(Initial value)

该数据区域在仿真开始时的默认值。支持写成 MATLAB 表达式,例如0[0 0 0]ones(4,1)等。如果留空,则使用数据类型的默认值,但工程上建议显式指定初始值,避免不可控行为。

数据类型(Data type)

可以是内置类型,例如doublesingleint32boolean,也可以指定总线类型Bus: xxx,或者使用Simulink.AliasType自定义的别名类型。对于控制逻辑模型,推荐根据实际需求选择合适位宽,不要一律用 double。

信号属性(Signal Attributes)

这里可以指定存储类型(Storage Class),比如:

  • Auto:由 Simulink 自动决定。
  • SimulinkGlobal:映射为生成的 C 代码中全局变量。
  • ExportedGlobal:导出为外部可访问的全局变量。

在普通仿真阶段,通常保持 Auto 即可。在做 Embedded Coder 代码生成时,才会用到 Storage Class 相关配置。

作用域(Scope)

DataStoreMemory 可以放在模型的顶层,也可以放在子系统内部。两者区别在于可见范围

  • 放在顶层时,整个模型及其所有子系统都能访问。
  • 放在某个子系统内部时,默认情况下,该子系统及其下层子系统可以访问,但模型其他部分不能直接读。

如果不希望全局共享,建议把 DataStoreMemory 放在所需子系统内部,缩小作用域,降低耦合。

4.3 Data Store Read / Write 的关联逻辑

Data Store Read 和 Data Store Write 模块的参数对话框中,同样需要填写 Data store name。只要名称一致,Simulink 就会自动建立关联。

在一个模型中,允许存在多个 Read 和多个 Write 对应同一个 DataStoreMemory。也就是说,读取点可以有多个,写入点也可以有多个。但在同一仿真时刻、同一数据存储区域上,如果有多个 Write 同时写入,可能出现数据竞争问题,Simulink 会报错或产生不确定结果。具体见第 7 节。

4.4 Data Store Memory 模块外观显示

当模型中有多个 Data Store Read / Write 模块时,建议打开模块的名称显示,方便追踪。选中模块后,按键盘快捷键Ctrl+Shift+F或右键选择 Format,可以调整名称显示方式。

另外,DataStoreMemory 模块默认会显示一个带有“信号线”风格的端口图标。我们可以通过Display / Blocks / Port Values来开启模块端口的实时值显示,这在调试时非常有用。

5. 工作原理与数据流分析

5.1 数据写读的先后关系

在 Simulink 中,Data Store Write 和 Data Store Read 的执行顺序不是随意的,它由模型的数据依赖关系决定。如果 Read 模块直接依赖 Write 模块的输入,那么 Simulink 会在同一仿真步内先执行 Write,再执行 Read。

考虑下面一个场景:

  • 子系统 A 中有一个 Data Store Write,写入SystemMode = 1
  • 子系统 B 中有一个 Data Store Read,读取SystemMode并送入显示模块。

如果 A 和 B 之间没有任何直接信号连接,Simulink 会尝试通过数据依赖关系自动推断排序。但这里有一个常见坑点:如果多个 Write 在同一个仿真步内以无依赖的顺序执行,Simulink 将无法判断哪一个值最终生效,从而报错或产生随机结果。

因此,在设计阶段就要想清楚写入逻辑,尽量保证同一存储区在同一个仿真步内只有一个写入源。

5.2 仿真过程中的内存行为

从仿真角度理解,DataStoreMemory 的值在仿真开始时被初始化为你设定的 Initial value。每个仿真步内,如果有 Data Store Write 执行,则该存储区的值被更新。Data Store Read 读到的值,是当前仿真步中已经更新后的值,或在没有写入时读取初始值。

我们可以用下面这个简单的数据流来理解:

[子系统A] --Data Store Write--> [DataStoreMemory] --Data Store Read--> [子系统B]

这个过程中,DataStoreMemory 本身并不参与计算,它只是一块“共享内存”。

5.3 示例:物理世界中的类比

我们在做整车模型时经常用 DataStoreMemory 存储“当前车速”。底盘子系统根据轮速计算车速,写入 DataStoreMemory;仪表显示子系统、车身控制子系统、动力控制子系统都通过 Data Store Read 读取这个车速值。

这种模式下,各子系统之间不需要连接复杂的信号线。只要定义了统一的 Data Store 名称和数据类型,任何一个子系统都能获取到当前车速值。这也是 DataStoreMemory 在大型模型中最常见的用途之一。

6. 完整实战案例:电机控制系统中的工作模式共享

下面我们通过一个完整的案例,演示 DataStoreMemory 从建模到仿真的全过程。

6.1 案例需求

假设我们要搭建一个简单的电机控制模型,包含三个部分:

  1. 模式决策子系统:根据外部输入决定电机工作模式(0 表示停机,1 表示正转,2 表示反转)。
  2. 功率计算子系统:根据工作模式和输入转速,计算当前输出功率。
  3. 结果显示区:通过 Display 模块查看工作模式与功率。

在这个模型中,MotorMode将由模式决策子系统写入 DataStoreMemory,而功率计算子系统和结果显示区分别通过 Data Store Read 读取该值。

6.2 创建模型与添加模块

首先创建新模型:

new_system('demo_motor_dsm'); open_system('demo_motor_dsm');

然后添加以下模块:

  • 一个 Constant 模块作为模式源输入。
  • 一个 Data Store Memory,命名MotorMode
  • 一个 Data Store Write,用于写入模式。
  • 一个 Data Store Read,用于读取模式。
  • 一个 Constant 模块作为转速输入。
  • 一个 Product(乘法)模块计算功率。
  • 两个 Display 模块分别显示模式与功率。
  • 一个子系统(Subsystem),里面包含 Data Store Write 和其输入逻辑。

为了让操作更清晰,这里直接用脚本搭建模型底框:

% 添加常量模块:模式指令 add_block('simulink/Sources/Constant', 'demo_motor_dsm/ModeCmd'); set_param('demo_motor_dsm/ModeCmd', 'Value', '1'); % 添加常量模块:转速 add_block('simulink/Sources/Constant', 'demo_motor_dsm/Speed'); set_param('demo_motor_dsm/Speed', 'Value', '200'); % 添加 Data Store Memory add_block('simulink/Signal Attributes/Data Store Memory', ... 'demo_motor_dsm/MotorModeMem'); set_param('demo_motor_dsm/MotorModeMem', 'DataStoreName', 'MotorMode'); set_param('demo_motor_dsm/MotorModeMem', 'InitialValue', '0'); % 添加 Data Store Write add_block('simulink/Signal Attributes/Data Store Write', ... 'demo_motor_dsm/MotorModeWrite'); set_param('demo_motor_dsm/MotorModeWrite', 'DataStoreName', 'MotorMode'); % 添加 Data Store Read add_block('simulink/Signal Attributes/Data Store Read', ... 'demo_motor_dsm/MotorModeRead'); set_param('demo_motor_dsm/MotorModeRead', 'DataStoreName', 'MotorMode'); % 添加 Product 模块:功率 = 模式系数 * 转速 add_block('simulink/Math Operations/Product', 'demo_motor_dsm/PowerCalc'); % 添加 Display 模块 add_block('simulink/Sinks/Display', 'demo_motor_dsm/ModeDisplay'); add_block('simulink/Sinks/Display', 'demo_motor_dsm/PowerDisplay');

6.3 完成信号连接

上面的脚本生成的是未连接的模块。要完成实际模型,可以直接在 Simulink 窗口中连线,也可以使用add_line命令连线。

从连线角度,我们需要建立以下关系:

  1. ModeCmd常量输出连接到MotorModeWrite的输入。
  2. MotorModeWrite输出连接到MotorModeRead的输入(用于在顶层拉通数据流,实际上 Data Store Read 并不需要物理输入,但为了模型层次完整,可以这样安排,也可以直接用 Display 接收 Read 输出)。
  3. MotorModeRead输出连接到ModeDisplay
  4. Speed常量输出连接到PowerCalc的第一个输入。
  5. MotorModeRead输出连接到PowerCalc的第二个输入(用模式值作为功率系数)。
  6. PowerCalc输出连接到PowerDisplay

使用命令补齐部分连线:

add_line('demo_motor_dsm', 'ModeCmd/1', 'MotorModeWrite/1', 'autorouting', 'on'); add_line('demo_motor_dsm', 'MotorModeWrite/1', 'MotorModeRead/1', 'autorouting', 'on'); add_line('demo_motor_dsm', 'MotorModeRead/1', 'ModeDisplay/1', 'autorouting', 'on'); add_line('demo_motor_dsm', 'Speed/1', 'PowerCalc/1', 'autorouting', 'on'); add_line('demo_motor_dsm', 'MotorModeRead/1', 'PowerCalc/2', 'autorouting', 'on'); add_line('demo_motor_dsm', 'PowerCalc/1', 'PowerDisplay/1', 'autorouting', 'on');

如果不习惯命令行建图,直接在图窗中拖拽连线也可以。连线完成后,模型结构大致如下:

  • 左侧是控制信号源。
  • 中间是 DataStoreMemory 及其读写模块。
  • 右侧是显示与计算模块。

6.4 运行仿真与验证

设置仿真停止时间,比如10,然后运行:

set_param('demo_motor_dsm', 'StopTime', '10'); sim('demo_motor_dsm');

仿真结束后,观察ModeDisplayPowerDisplay。由于ModeCmd恒为 1,MotorMode被写为 1,所以ModeDisplay显示 1。转速恒为 200,功率则等于MotorMode * Speed = 1 * 200 = 200,因此PowerDisplay显示 200。

这个案例虽然简单,但已经完整展示了 DataStoreMemory 的读写流程。你可以将ModeCmd改为 Pulse Generator 等动态信号源,观察模式值在仿真过程中的动态变化。

6.5 添加数据记录

如果需要记录数据存储的值,可以在 DataStoreMemory 模块上右键,选择Properties,然后在日志记录(Logging)选项卡中勾选记录数据存储数据。也可以用命令设置:

set_param('demo_motor_dsm/MotorModeMem', 'DataLogging', 'on');

仿真后,获取记录结果:

out = sim('demo_motor_dsm');

out返回的结果中,可以通过日志变量查看到MotorMode的变化序列。这对于分析与调试非常有帮助。

7. 常见问题与排查思路

在实际使用中,DataStoreMemory 相关报错出现频率很高。下面整理了几个常见问题。

问题现象常见原因解决思路
模型报错:Data store memory not foundData Store Read/Write 中填写的名称在模型中没有对应的 DataStoreMemory检查名称拼写与大小写,确认 DataStoreMemory 是否在模型的当前层次结构或上层结构中
报错:Multiple writes to the same data store同一个仿真步内多个 Write 模块写同一个存储区,且无法确定执行顺序梳理写入逻辑,保证同一存储区同一时间只有一个写入源;必要时合并写入点
Data Store Read 读到的初始值不变Write 模块没有执行;或者 Write 与 Read 之间存在执行顺序错误检查 Write 模块是否在 enabled 子系统内部且子系统未触发;检查是否存在数据依赖关系
代码生成时出现全局变量冲突Data Store 的 Storage Class 设置与其他模块变量重名在 Embedded Coder 中设置合理的 Storage Class 与命名空间
DataStoreMemory 放在子系统内但其他子系统读取不到作用域限制导致将 DataStoreMemory 放到模型顶层,或使用模型级数据存储对象
初始值设置后提示类型不匹配初始值字符串与数据类型不兼容将初始值字符串改为明确类型匹配的表达式,例如uint8(0)
仿真速度异常变慢且有大量数据记录打开了过多 Data Store 的日志记录只对需要分析的数据存储开启 DataLogging

7.1 排查示例:初始值一直不更新

一个比较典型的排查过程如下。

现象:模型中 ModeDisplay 一直显示 0,但 ModeCmd 已经改为 1。

排查步骤:

  1. 双击 DataStore Write 模块,确认 Data store name 拼写正确。
  2. 检查 DataStore Write 的输入是否正确连接。
  3. 检查 DataStore Write 是否处于 enabled 子系统内,以及子系统是否被触发。
  4. 在仿真前将 StopTime 设为合适值,打开 Data Store Logging,查看实际写入值。
  5. 如果发现某个仿真步确实没有写入,就需要检查子系统外层是否被 disable。

通过这种逐步排查,大多数“读取不到新值”的问题都能定位到触发条件或连接错误上。

7.2 多写入点冲突的解决思路

如果模型要求允许多个模块写入同一个状态,可以采用“仲裁”设计:

  • 将所有写入请求集中到同一个 Data Store Write 模块,由上游模块先完成逻辑运算,再用最终值写入。
  • 或者把一个状态拆分为多个独立 Data Store,例如MotorModeCmdMotorModeActual,在不同阶段分别写入。

这种设计能规避 Simulink 对多写点的限制,也让模型逻辑更清晰。

8. 进阶应用:与代码生成、数据字典的配合

8.1 代码生成中的数据存储

如果使用 Simulink Coder / Embedded Coder 生成 C 代码,DataStoreMemory 会对应生成一个全局变量。默认情况下,生成的变量名通常基于 Data store 名称,经过一定规范化。例如,名为MotorMode的 DataStoreMemory,生成的变量可能类似rtDW_MotorMode或直接为MotorMode,具体取决于配置。

在模型配置参数中:

Code Generation > Interface > Data Store

可以调整数据存储的存储类型、全局变量命名规则等。如果希望变量在生成代码中保持易读的名字,建议 Data store 名称遵循 C 语言标识符规范,不要包含中文或特殊字符。

8.2 利用数据字典统一管理

在大型项目中,通常不建议把 DataStoreMemory 直接散落在模型的各个层面,而是通过 Simulink 数据字典(.sldd)统一管理数据存储对象。

在数据字典中,可以创建一个Simulink.Signal对象,并勾选Data Store相关的属性,然后在模型中使用Data Store Memory时选择引用该对象。这样便于统一数据类型、初始值、存储类型,方便团队协作和版本管理。

具体操作路径:

  1. 使用Simulink.DataDictionary.create创建或打开已有字典。
  2. 在字典中添加Simulink.Signal对象,命名MotorMode
  3. 设置其 DataType、InitialValue。
  4. 在模型中的 DataStoreMemory 模块中,勾选“从数据字典解析名称”。
  5. 将数据字典关联到模型的 Model Properties 中。

这样当多个模型共享同一个数据字典时,DataStoreMemory 的定义可以被复用,避免每个模型各自维护一份初始值,一致性更好。

8.3 在模型引用(Model Reference)中的注意事项

如果你的项目使用了 Model Reference,也就是将多个子模型作为独立模型引用,那么 DataStoreMemory 的作用域管理就变得更加重要。

  • 被引用模型内部定义的 DataStoreMemory,默认只能在该模型内部使用,外部模型不可见。
  • 如果希望在不同模型之间共享数据,应使用数据字典定义数据存储对象。
  • 建议被引用模型的接口尽量通过输入输出端口传递数据,DataStoreMemory 只用于模型内部共享状态,避免跨模型的数据耦合。

这些细节在实际项目开发中直接影响编译与集成效率。

9. 最佳实践与工程建议

DataStoreMemory 用得好,模型会非常清爽;用不好,模型会出现隐晦的数据竞争和维护难题。下面几条经验来自实际开发中的沉淀。

9.1 命名规范

Data Store 的名称本质上是全局标识符。推荐使用“模块前缀 + 业务含义”的命名方式,例如:

  • Ctrl_MotorMode
  • Ctrl_VehicleSpeed
  • BMS_SOC
  • VCU_SystemState

建议方案:

  • 使用英文,不包含中文。
  • 统一使用驼峰或者下划线风格,不要混用。
  • 在命名中包含所属系统缩写,避免多个系统之间重名。
  • 禁止使用data1temp这类无意义名称。

9.2 合理控制作用域

不在模型顶层放置过多的 DataStoreMemory。只在真正需要跨子系统共享的数据上使用。如果一个数据只在某个子系统内部使用,就把它定义在该子系统内部。

这样做的好处是:

  • 降低模型耦合度。
  • 避免误写导致的全局状态污染。
  • 让模型在代码生成时更容易优化。

9.3 显式设置初始值与数据类型

不要依赖默认值,每个 DataStoreMemory 都应显式设置:

  • DataType 与源数据保持一致。
  • InitialValue 根据业务逻辑定义,不能留空。
  • 存储类型按代码生成需求设置。

对于不同的系统状态,建议为每个 DataStoreMemory 写一行注释,说明:

  • 该数据由谁来写入。
  • 该数据被哪些模块读取。
  • 取值范围与含义。

9.4 避免同一个存储区多个写入点

在多写入点不可避免时,建议通过中间计算模块统一合并。例如,将多个触发条件下的数据写入请求先经过逻辑运算,得到唯一的最终值,再通过一个 Data Store Write 写入。这样可以规避顺序问题。

如果从架构上无法合并,则要考虑使用 Function-Call 子系统或 Stateflow 来管理写入顺序,保证同一时刻只有一个模块写同一个 DataStoreMemory。

9.5 利用日志与可视化调试

调试阶段,建议开启关键 DataStoreMemory 的 Data Logging,导出曲线查看变化规律。Simulink 中 Data Store Read 模块的输出也可以直接连接到 Scope 模块,实时观察。定位问题时,建议按下面的顺序排查:

  1. 确认 Data Store 名称与大小写。
  2. 确认初始值是否合理。
  3. 确认 Write 模块是否执行。
  4. 确认 Write 与 Read 的执行顺序。
  5. 确认存储作用域是否覆盖目标模块。

9.6 模型评审时多问几个问题

在代码评审或模型评审时,可以针对 DataStoreMemory 问几个问题:

  • 这个数据除了 Write 和 Read,还有没有人悄悄修改?
  • 如果初始值改掉,会不会影响其他模块?
  • 生成的代码中,这个变量是全局变量,是否有重名风险?
  • 是否可以用普通信号线或 Bus 代替?

这几个问题能帮助你判断 DataStoreMemory 的使用是否合理。

10. 总结与下一步学习方向

本文围绕 Simulink 常用模块库中的 DataStoreMemory 模块,从概念、参数、工作原理到实战案例,完成了完整的拆解。你现在应该能够理解:

  • DataStoreMemory、Data Store Read、Data Store Write 三者的角色划分。
  • 如何配置一个 DataStoreMemory 并完成跨子系统数据共享。
  • 如何排查多写冲突、初始值不更新等常见问题。
  • 如何在代码生成和数据字典管理中使用 DataStoreMemory。

下一步,你可以继续学习这些相关内容:

  • Simulink 子系统封装与模块库自定义。
  • Stateflow 状态机与 DataStoreMemory 的配合使用。
  • Bus 对象与数据字典综合建模。
  • Simulink Coder 代码生成中 Storage Class 的配置。

动手练习时,建议从今天这个电机控制案例开始,尝试把模式源改为信号发生器,观察数据存储的动态变化;再尝试在同一个模型中建立两个不同名称的 DataStoreMemory,分别测试作用域差异。只有亲手改过、跑过、报错过,对 DataStoreMemory 的理解才会真正沉淀下来。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询