使用 Requirements Table 模块检测数据变化
Requirements Table 模块可以检测时间步之间数据值的变化。您可以使用变化检测运算符来确定数据何时变为或从某个值发生变化。
变化检测运算符
要检测数据的变化,请使用此表中列出的运算符。
运算符 | 语法 | 描述 |
---|---|---|
hasChanged | tf = hasChanged(data_name) | 如果当前时间步开始时 data_name 的值与上一时间步开始时 data_name 的值不同,则返回 1 (true )。否则,运算符返回 0 (false )。 |
hasChangedFrom | tf = hasChangedFrom(data_name,value) | 如果 data_name 的值在前一个时间步的开始时等于指定的 value ,而在当前时间步的开始时为不同的值,则返回 1 (true )。否则,运算符返回 0 (false )。 |
hasChangedTo | tf = hasChangedTo(data_name,value) | 如果 data_name 的值在前一个时间步的开始时不等于指定的 value ,并且在当前时间步的开始时等于 value ,则返回 1 (true )。否则,运算符返回 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
的值在时间t = 1
时从0
变为1
。y1
的值保持为1
,因为u
在每个后续时间步中都会继续变化。当
u
的值从3
变为4
时,y2
的值在时间t = 4
时从0
变为1
。y2
的值经过一个时间步后返回到0
。当
u
的值从2
变为3
时,y3
的值在时间t = 3
时从0
变为1
。y3
的值经过一个时间步后返回到0
。