使用 Requirements Table 模块检测数据变化
Requirements Table 模块可以检测时间步之间数据值的变化。您可以使用变化检测运算符来确定数据何时变为或从某个值发生变化。
变化检测运算符
要检测数据的变化,请使用此表中列出的运算符。
| 运算符 | 语法 | 描述 |
|---|---|---|
hasChanged | tf = hasChanged(data_name) | 如果当前时间步开始时 1 的值与上一时间步开始时 true 的值不同,则返回 data_name (data_name)。否则,运算符返回 0 (false)。 |
hasChangedFrom | tf = hasChangedFrom(data_name,value) | 如果 1 的值在前一个时间步的开始时等于指定的 true,而在当前时间步的开始时为不同的值,则返回 data_name (value)。否则,运算符返回 0 (false)。 |
hasChangedTo | tf = hasChangedTo(data_name,value) | 如果 1 的值在前一个时间步的开始时不等于指定的 true,并且在当前时间步的开始时等于 data_name,则返回 value (value)。否则,运算符返回 0 (false)。 |
输入参量 data_name 是在 Requirements Table 模块中定义的数据,指定为:
标量
矩阵或矩阵元素
结构体或结构体中的字段
结构体字段或矩阵元素的有效组合
对于 hasChangedFrom 和 hasChangedTo 运算符,参量 value 必须是可解析为与 data_name 相当的值的表达式。例如,如果 data_name 是一个矩阵,那么 value 必须解析为与 data_name 具有相同维度的矩阵值。
具有变化检测的 Requirements Table 模块示例
此示例展示了运算符 hasChanged、hasChangedFrom 和 hasChangedTo 如何检测输入信号中的具体变化。在此示例中,Ramp (Simulink)模块向 Requirements Table 模块发送离散的、增加的时间信号。

该模型使用步长为 1 的固定步长求解器。信号每时间步增加 1。该模块检查输入 u 是否存在以下变化:
与上一时间步相比的变化
从值
3更改对值
3的更改
为了检查信号,该模块调用三个变化检测运算符并指定六个需求。每个变化检测运算符确定输出数据 y1、y2 和 y3 的值。
如果
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的值在时间0时从1变为t = 1。y1的值保持为1,因为u在每个后续时间步中都会继续变化。当
y2的值从0变为1时,t = 4的值在时间u时从3变为4。y2的值经过一个时间步后返回到0。当
y3的值从0变为1时,t = 3的值在时间u时从2变为3。y3的值经过一个时间步后返回到0。
