Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

hasChangedTo

检测到指定值时的数据变化

描述

示例

如果 data 的值不等于在上一时间步开始时的 value 并且等于在当前时间步开始时的 value,则 tf = hasChangedTo(data,value) 返回 1 (true)。否则,运算符返回 0 (false)。

示例

全部展开

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

[hasChangedTo(M,matrixValue)]

Stateflow chart that uses the hasChangedTo operator in a transition.

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

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

[hasChangedTo(M(1,3),7)]

Stateflow chart that uses the hasChangedTo operator in a transition.

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

[hasChangedTo(M[0][2],7)]

Stateflow chart that uses the hasChangedTo operator in a transition.

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

[hasChangedTo(struct,structValue)]

Stateflow chart that uses the hasChangedTo operator in a transition.

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

[hasChangedTo(struct.field,5)]

Stateflow chart that uses the hasChangedTo operator in a transition.

输入参数

全部展开

Stateflow® 数据,指定为:

  • 标量

  • 矩阵或矩阵的元素

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

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

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

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

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

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

当前时间步的数据值,指定为与 data 相同的数据类型。value 必须是解析所得的值与 data 可比的表达式:

  • 如果 data 是标量,则 value 必须解析为标量。

  • 如果 data 是矩阵,则 value 必须解析为与 data 具有相同维度的矩阵。

    在使用 C 语言作为动作语言的图中,value 也可以解析为标量值。图通过标量扩展将 data 与一个矩阵进行比较,该矩阵的每个元素都等于 value 指定的值。请参阅为矩阵的所有元素赋值

  • 如果 data 是结构体,则 value 必须解析为一个字段设定与 data 完全匹配的结构体。

限制

  • 无法在 Stateflow 真值表中使用。

提示

  • 如果多个输入事件在同一时间步内发生,hasChangedTo 运算符可以检测输入事件之间数据值的更改。

  • 如果图写入数据对象,但不更改数据值,则 hasChangedTo 运算符返回 false

  • Stateflow 图的类型确定更改检测运算符支持的数据的作用域:

    • MATLAB 中的独立 Stateflow 图:仅限局部

    • 在 Simulink® 模型中,使用 MATLAB 作为动作语言的图:仅限输入

    • 在 Simulink 模型中,使用 C 语言作为动作语言的图:输入输出局部数据存储内存

  • 在 MATLAB 中的独立图中,更改检测运算符可以检测在对 step 函数的调用中指定的数据更改,因为这些更改发生在当前时间步开始之前。例如,如果 x 等于零,则当您使用以下命令执行图 ch 时,表达式 hasChangedTo(x,1) 返回 true

    step(ch,x=1);
    相比之下,更改检测运算符无法检测由同一时间步中的状态或转移动作中的赋值引起的数据更改。此时,运算符在下一个时间步开始时检测值的更改。

  • 在 Simulink 模型的图中,如果启用图选项每次图唤醒时初始化输出,则使用输出作为 hasChanged 运算符的参量将始终返回 false。有关详细信息,请参阅每次图唤醒时初始化输出

  • 在使用 hasChangedTo 的图中启用行优先数组布局时,代码生成会产生错误。在使用 hasChangedTo 的图中生成代码之前,请启用列优先数组布局。请参阅Select Array Layout for Matrices in Generated Code

版本历史记录

在 R2007a 中推出