hasChanged
检测 Stateflow 图中自上一时间步以来的数据更改
描述
如果当前时间步开始时 data
的值不同于唤醒 Stateflow 图的上一时间步开始时 data
的值,则
返回 tf
= hasChanged(data
)1
(true
)。否则,运算符返回 0
(false
)。
示例
输入参数
限制
无法在 Stateflow 真值表中使用。
提示
如果多个输入事件在同一时间步内发生,
hasChanged
运算符可以检测输入事件之间数据值的更改。如果图写入数据对象,但不更改数据值,则
hasChanged
运算符返回false
。Stateflow 图的类型确定更改检测运算符支持的数据的作用域:
MATLAB 中的独立 Stateflow 图:仅限局部
在 Simulink® 模型中,使用 MATLAB 作为动作语言的图:仅限输入
在 Simulink 模型中,使用 C 语言作为动作语言的图:输入、输出、局部或数据存储内存
在 MATLAB 中的独立图中,更改检测运算符可以检测在对
step
函数的调用中指定的数据更改,因为这些更改发生在当前时间步开始之前。例如,如果x
等于零,则当您使用以下命令执行图ch
时,表达式hasChanged(x)
返回true
:相比之下,更改检测运算符无法检测由同一时间步中的状态或转移动作中的赋值引起的数据更改。此时,运算符在下一个时间步开始时检测值的更改。step(ch,x=1);
在 Simulink 模型的图中,如果启用图选项每次图唤醒时初始化输出,则使用输出作为
hasChanged
运算符的参量将始终返回false
。有关详细信息,请参阅每次图唤醒时初始化输出。在使用
hasChanged
的图中启用行优先数组布局时,代码生成会产生错误。在使用hasChanged
的图中生成代码之前,请启用列优先数组布局。请参阅Select Array Layout for Matrices in Generated Code。
版本历史记录
在 R2007a 中推出