主要内容

数据传输表示和处理

什么是数据传输?

数据传输发生在表示可调用函数的模块之间,通过信号线交换数据。模型中数据传输的表示取决于模型是基于速率的模型还是导出函数模型。如果模型是基于速率的模型,则表示取决于连接的模块是否使用相同的采样率。单速率数据传输和导出函数之间的数据传输表示为连接函数的信号线。

下图显示函数调用子系统之间的单速率数据传输。两个函数调用子系统都配置为使用 1.0 秒的采样率。

多速率数据传输是配置为使用不同采样率的函数模块之间的数据传输。您通过配置 Simulink® 以自动插入 Rate Transition 模块或手动在连接函数模块的信号线上插入该模块来表示模型中的数据传输。

下图显示函数调用子系统之间的多速率数据传输。一个函数调用子系统配置为使用 1.0 秒的采样率,另一个函数调用子系统配置为使用 2.0 秒的采样率。

数据传输注意事项

在设计多速率模型时,对于每个数据传输,请考虑以下各项的重要性:

  • 数据完整性

  • 确定性

  • 延迟

  • 内存使用量

数据完整性

数据传输的数据完整性包括数据传输和处理过程中数据的准确性、一致性和完备性。当模块的输入在模块执行期间发生变化以及发生抢占时,数据完整性可能受到损害。

请考虑以下示例场景:

  • 一个较快模块向一个较慢模块提供输入。

  • 较慢模块从较快模块读取输入值 V1,并使用该值开始计算。

  • 较快模块的另一个执行抢占了较慢模块的计算并计算出新输出值 V2

  • 当较慢模块恢复执行时,出现数据完整性问题。较慢模块继续使用新输入值 V2 进行计算。

这种类型的数据传输是未受保护的。有关未受保护的数据传输的描述,请参阅Fast-to-Slow Periodic Rate Transitions During Generated Code Execution

对于受保护的数据传输,会保存较快模块的输出 V1,直到较慢模块完成执行。

确定性

如果数据传输的时序在给定以下信息的情况下完全可预测,则数据传输是确定性的:

  • 数据的可用性

  • 所连接模块的采样率

  • 数据传输的输出信号目标模块开始执行的时间相对于数据传输的输入信号源模块结束执行的时间。

延迟

数据传输的延迟是传输的数据到达接收模块过程中产生的时滞。根据您的应用要求,您可能需要优先考虑最小化数据传输延迟而不是数据完整性和确定性。

内存使用量

根据您的应用要求,您可能需要优先考虑最小化数据传输的内存使用量而不是数据完整性和确定性。

代码生成数据传输假设

在为函数之间的数据传输生成代码时,代码生成器将作出以下假设:

  • 数据传输发生在单个读取函数和单个写入函数之间。

  • 对一个字节大小的变量的读取或写入是原子级别的。

  • 当与函数关联的两个任务通过数据传输进行交互时,只有一个任务可以抢占另一个任务。如果您将这些函数部署到一个多核目标系统,关联的任务可以并发执行。

  • 对于周期函数,与速率较快函数关联的任务优先于与速率较慢函数关联的任务,并会抢占速率较慢任务。

  • 这些任务在单个处理器上运行。不允许分时。

  • 进程不会崩溃或重新启动(特别是在任务之间传输数据时)。

确保您的模型、代码和目标环境符合这些假设。

数据传输限制

  • Rate Transition 模块在配置为使用服务代码接口的导出函数模型中不受支持。

  • 代码生成器不会分离连接到可变大小信号或位于 For Each Subsystem 模块内部的 Rate Transition 模块的代码和数据。

另请参阅

主题