Main Content

hasChanged

检测自上一时间步以来的数据更改

描述

示例

如果当前时间步开始时 data 的值不同于前一时间步开始时 data 的值,则 tf = hasChanged(data) 返回 1 (true)。否则,运算符返回 0 (false)。

示例

全部展开

如果矩阵 M 中的任一元素自上一时间步或输入事件以来已更改值,则发生转出状态的转移。

[hasChanged(M)]

Stateflow chart that uses the hasChanged operator in a transition.

如果矩阵 M 的第 1 行和第 3 列中的元素自上一时间步或输入事件以来已更改值,则发生转出状态的转移。

在使用 MATLAB® 作为动作语言的图中,请使用:

[hasChanged(M(1,3))]

Stateflow chart that uses the hasChanged operator in a transition.

在使用 C 语言作为动作语言的图中,请使用:

[hasChanged(M[0][2])]

Stateflow chart that uses the hasChanged operator in a transition.

如果结构体 struct 中的任一字段自上一时间步或输入事件以来已更改值,则发生转出状态的转移。

[hasChanged(struct)]

Stateflow chart that uses the hasChanged operator in a transition.

如果字段 struct.field 自上一时间步或输入事件以来已更改值,则发生转出状态的转移。

[hasChanged(struct.field)]

Stateflow chart that uses the hasChanged operator in a transition.

输入参数

全部展开

Stateflow® 数据,指定为:

  • 标量

  • 矩阵或矩阵的元素

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

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

如果 data 是矩阵,当运算符检测到 data 的元素之一发生变化时,它将返回 true。您还可以通过使用计算结果为整数的数字或表达式对矩阵的元素进行索引。请参阅Stateflow 中向量和矩阵的运算

如果 data 是结构体,当运算符检测到 data 的字段之一发生变化时,它将返回 true。您还可以使用圆点表示法对结构体中的字段进行索引。请参阅对 Stateflow 结构体进行索引并赋值

参数 data 不能为非平凡表达式或自定义代码变量。

MATLAB 中的独立图不支持对矩阵的元素或结构体中的字段进行更改检测。

提示

  • 如果多个输入事件在同一时间步内发生,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 中推出