Main Content

本页采用了机器翻译。点击此处可查看英文原文。

使用 Requirements Table 模块检测数据变化

自 R2022a 起

Requirements Table 模块可以检测时间步之间数据值的变化。您可以使用变化检测运算符来确定数据何时变为或从某个值发生变化。

变化检测运算符

要检测数据的变化,请使用此表中列出的运算符。

运算符语法描述
hasChangedtf = hasChanged(data_name)如果当前时间步开始时 data_name 的值与上一时间步开始时 data_name 的值不同,则返回 1 (true)。否则,运算符返回 0 (false)。
hasChangedFromtf = hasChangedFrom(data_name,value)如果 data_name 的值在前一个时间步的开始时等于指定的 value,而在当前时间步的开始时为不同的值,则返回 1 (true)。否则,运算符返回 0 (false)。
hasChangedTotf = hasChangedTo(data_name,value)如果 data_name 的值在前一个时间步的开始时不等于指定的 value,并且在当前时间步的开始时等于 value,则返回 1 (true)。否则,运算符返回 0 (false)。

输入参量data_name 是在 Requirements Table模块中定义的数据,指定为:

  • 标量

  • 矩阵或矩阵元素

  • 结构体或结构体中的字段

  • 结构体字段或矩阵元素的有效组合

对于 hasChangedFromhasChangedTo 运算符,参量value 必须是可解析为与 data_name 相当的值的表达式。例如,如果 data_name 是一个矩阵,那么 value 必须解析为与 data_name 具有相同维度的矩阵值。

具有变化检测的 Requirements Table 模块示例

此示例展示了运算符 hasChangedhasChangedFromhasChangedTo 如何检测输入信号中的具体变化。在此示例中,Ramp (Simulink)模块向 Requirements Table 模块发送离散的、增加的时间信号。

该模型使用步长为 1 的固定步长求解器。信号每时间步增加1。该模块检查输入 u 是否存在以下变化:

  • 与上一时间步相比的变化

  • 从值 3 更改

  • 对值 3 的更改

为了检查信号,该模块调用三个变化检测运算符并指定六个需求。每个变化检测运算符确定输出数据 y1y2y3 的值。

  • 如果 hasChanged(u)true,则 y1 等于 1。否则,y1 等于 0

  • 如果 hasChangedFrom(u,3)true,则 y2 等于 1。否则,y2 等于 0

  • 如果 hasChangedTo(u,3)true,则 y3 等于 1。否则,y3 等于 0

在仿真中,Scope (Simulink)模块显示该模块的输入和输出信号。

  • u 的值每时间步增加 1

  • y1 的值在时间 t = 1 时从 0 变为 1y1 的值保持为 1,因为 u 在每个后续时间步中都会继续变化。

  • u 的值从 3 变为 4 时,y2 的值在时间 t = 4 时从 0 变为 1y2 的值经过一个时间步后返回到 0

  • u 的值从 2 变为 3 时,y3 的值在时间 t = 3 时从 0 变为 1y3 的值经过一个时间步后返回到 0

另请参阅

相关主题