主要内容

检测数据和表达式值的变化

Stateflow®图表可以检测数据和表达式的值变化之间的时间步骤。您可以:

  • 利用变化检测运营商来决定当一个变量发生变化或从一个值。

  • 使用边缘检测算子来决定当一个表达高于或低于一个阈值。

生成一个隐式的本地事件表设置一个变量的值时,使用改变操作符。有关更多信息,请参见控制图的行为通过使用隐式事件

变化检测运营商

检测Stateflow变化数据,使用这个表中列出的运营商。

操作符 语法 描述 例子
焕然一新 tf =焕然一新(data_name) 返回1 (真正的如果的价值)data_name在当前时间步是不同的价值data_name在前面的时间步的开始。否则,操作符返回0 ()。

转换的状态如果任何元素的矩阵改变了自从上次步骤或输入事件的价值。

(改变了(M))

转换的状态如果元素在第1行和列3的矩阵改变了自从上次步骤或输入事件的价值。

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

[焕然一新(M (1、3)))

图表中使用C作为行动的语言,使用:

[焕然一新(M [0] [2]))
hasChangedFrom tf = hasChangedFrom (data_name值) 返回1 (真正的如果的价值)data_name等于指定的吗价值开始之前的时间步,是一个不同的值在当前时间步的开始。否则,操作符返回0 ()。

转换的状态如果结构的前一个值结构体等于structValue和任何领域结构体改变了自从上次步骤或输入事件的价值。

[hasChangedFrom (struct structValue)]
hasChangedTo tf = hasChangedTo (data_name值) 返回1 (真正的如果的价值)data_name并不等于指定的价值开始之前的时间步,等于价值在当前时间步的开始。否则,操作符返回0 ()。

如果结构域转换的状态struct.field改变了价值5自从上次时间步或输入事件。

[hasChangedTo struct.field, 5)]

请注意

如果多个输入事件发生在相同的时间步,这些操作符可以检测输入事件之间的数据值的变化。

图表进行变化检测的例子

这个模型显示了运营商焕然一新,hasChangedFrom,hasChangedTo检测特定的输入信号的变化。在这个例子中,一个斜坡(万博1manbetx模型)阻止发送一个离散,增加时间信号图。

解决模型使用一个固定的步长为1。信号的增量1每个时间步。图表分析了输入信号u这些变化:

  • 任何变化从以前的时间步

  • 改变为3的值

  • 的变化值3

检查信号,表调用三个变化检测运营商转型行动。图表输出返回值日元,y2,y3

在模拟过程中,范围(万博1manbetx模型)块图表显示了输入和输出信号。

  • 的价值u每次增加1的步骤。

  • 的价值日元从0到1的时间变化t = 1。的价值日元是1,因为u在每个后续时间步继续改变。

  • 的价值y2从0到1的时间变化t = 4时的值u3点到4点的变化。的价值y2一个时间步后返回0。

  • 的价值y3从0到1的时间变化t = 3时的值u改变从2到3。的价值y3一个时间步后返回0。

变化检测的局限性

Stateflow图表的类型决定了变化检测的数据支持范围:万博1manbetx

  • 独立在MATLAB Stateflow图表:当地的只有

  • 图表在仿真软件万博1manbetx®使用MATLAB作为行动的语言:输入只有

  • 图表模型,使用C作为万博1manbetx行动的语言:输入,输出,当地的,或数据存储内存

这个论点data_name可以是:

  • 一个标量变量。

  • 一个矩阵或矩阵的一个元素。

    • 如果data_name是一个矩阵,运算符返回真正的当它检测到的任何元素的变化data_name

    • 指数矩阵的元素通过使用数字或表达式,表达式的计算结果为一个常数整数。看到Stateflow向量和矩阵的操作

  • 一个结构或一个字段结构。

    • 如果data_name是一个结构,变化检测操作符返回真正的当它检测到任何领域的变化data_name

    • 通过使用点符号索引字段的结构。看到Stateflow结构指数和赋值

  • 任何有效的结合结构域或矩阵元素。

这个论点data_name不能一个非凡的表达式或一个自定义代码变量。

请注意

独立的图表在MATLAB不支持变化检测矩阵的一个元素或者一个字段结构。万博1manbetx

hasChangedFromhasChangedTo运营商的论点价值可以是任何表达式解析为一个值,比得上吗data_name

  • 如果data_name是一个标量,然后呢价值必须解决一个标量值。

  • 如果data_name是一个矩阵,然后呢价值必须解决一个矩阵值相同的尺寸吗data_name

    或者,在一个图表,使用C作为行动的语言,价值能解决一个标量值。图表使用标量扩张比较data_name一个矩阵的元素都等于指定的值价值。看到赋值矩阵的所有元素

  • 如果data_name是一个结构,那么价值必须解决结构的字段值规范比赛data_name完全正确。

如果你从一个图表,使用生成代码变化检测运营商和启用行阵列布局,代码生成会产生一个错误。在生成代码之前,使列为主的阵列布局。看到选择阵列布局的矩阵生成的代码

边缘检测算子

决定当一个表达高于或低于阈值,则使用此表中列出的运营商。

操作符 语法 描述 例子
穿越 tf =穿越(表达式)

返回1 (真正的)如果:

  • 的前一个值表达式是积极的和它的当前值是零或消极。

  • 的前一个值表达式是零和它的当前值是零。

  • 的前一个值表达式是负面的和它的当前值是零或积极。

否则,操作符返回0 ()。

这个操作符模仿的行为触发(万博1manbetx模型)块与触发类型设置为要么

转换的状态如果输入数据的价值信号穿过一个阈值为2.5。

(穿越(信号- 2.5))

检测到的边缘时,表达式的值信号- 2.5从正到负变化,从消极到积极的,从零到零,或者从零到零。

下降 tf =下跌(表达式)

返回1 (真正的)如果:

  • 的前一个值表达式是积极的和它的当前值是零或消极。

  • 的前一个值表达式是零和它的当前值是负的。

否则,操作符返回0 ()。

这个操作符模仿的行为触发(万博1manbetx模型)块与触发类型设置为下降

转换的状态如果输入数据的价值信号低于一个阈值为2.5。

[下降(信号- 2.5)]

检测到下降沿时,表达式的值信号- 2.5从正到负变化,积极为零,或从0到负面的。

不断上升的 tf =上升(表达式)

返回1 (真正的)如果:

  • 的前一个值表达式是负面的和它的当前值是零或积极。

  • 的前一个值表达式是零和它的当前值是正的。

否则,操作符返回0 ()。

这个操作符模仿的行为触发(万博1manbetx模型)块与触发类型设置为不断上升的

转换的状态如果输入数据的价值信号高于阈值为2.5。

((信号- 2.5)上涨)

不断上升的边缘检测时,表达式的值信号- 2.5从消极到积极的变化,从负到零,或从零到正的。

请注意

就像触发块,这些操作符检测时一个边缘表达式参数变化值从积极到0到-或-连续三次零到积极的步骤。边缘出现在表达式的值变成了零。

图表与边缘检测的例子

这个模型显示了运营商穿越,下降,不断上升的检测输入信号的边缘。在这个例子中,一个脉冲发生器(万博1manbetx模型)图块发送一个方波。

解决模型使用一个固定的步长为1。输入信号的值u每两个时间步交替0到5之间。图表分析了输入信号u对这些边缘:

  • 下降或上升边越过阈值为2.5

  • 2.5优势超过阈值的上升

  • 2.5阈值以下的优势下降

检查信号,表调用三个边缘检测算子过渡行动。图表输出返回值日元,y2,y3

在模拟过程中,范围(万博1manbetx模型)块图表显示了输入和输出信号。

  • 的价值u0到5之间的交替在每一个时间步。

  • 的价值日元从0到1的时间变化t = 1,3,5,7时,表达式的值u - 2.5改变的迹象。的价值日元一个时间步后返回0。

  • 的价值y2从0到1的时间变化t = 15时,表达式的值u - 2.5从消极变为积极。的价值y2一个时间步后返回0。

  • 的价值y3从0到1的时间变化t = 37时,表达式的值u - 2.5从正到负的变化。的价值y3一个时间步后返回0。

边缘检测的局限性

边缘检测是只支持Stateflow图万博1manbetx表在仿真软件模型。万博1manbetx

这个论点表达式:

  • 必须是一个纯量值的表情吗

  • 可以结合图表输入数据,常数,nontunable参数、连续时间本地数据,从基于仿真软件的状态和状态数据吗万博1manbetx

  • 可以包括加法、减法、乘法标量变量,矩阵元素,字段的结构,或任何有效的组合结构字段和矩阵元素

指数矩阵的元素通过使用数字或表达式,表达式的计算结果为一个常数整数。

边缘检测对连续时间本地数据和状态数据模型支持基于状态转换条件。万博1manbetx万博1manbetx

在原子子图表,地图中所有输入数据使用边缘检测表达式输入数据或nontunable参数在主图。这些输入数据映射到输出数据,本地数据,或可调参数可能导致未定义的行为。

Stateflow图表,使用边缘检测运营商不支持操作点。万博1manbetx

变化和边缘检测的实现

图表检测图表数据和表情的变化通过评估值在时间步的界限。图表比较了价值的开始之前执行与当前执行的价值开始的一步。

例如,当你调用焕然一新运营商的论点x,Stateflow图表应用了双缓冲的值x在局部变量。

本地缓冲 描述
x_prev

值的数据x在最后一次一步的开始

x_start

值的数据x在当前时间步的开始

检测变化,应用了双缓冲的图表数据值一个事件触发图之前图表开始执行。如果值的x上一页x开始匹配,变化检测算子的回报表明没有发生变化;否则,它将返回真正的表示变化。这个图的地方这些任务的上下文中图表生命周期。

流程图详细变化检测的双缓冲的数据值。

边缘检测算子以类似的方式,除了他们比较一个表达式的值开始步骤(最后一次x上一页)和其当前值(x)。的差异实现允许连续时间在本地数据图表来检测边缘小时间步。

本地数据瞬时值变化

变化检测运营商试图过滤瞬态变化本地图变量通过评估它们的值只有在时间的界限。局部变量只在指定的图表来评估执行的最后一步。的返回值变化检测运营商保持不变,即使局部变量的值波动在一个给定的时间步长。例如,假设在当前时间步,局部变量临时变化从以前的时间步,但是其价值然后恢复到原始值。操作员焕然一新(临时)返回在接下来的时间步,表明没有发生变化。

相比之下,边缘检测算子可以检测边缘连续时间本地数据在较小的时间步长。例如,假设p是一个连续时间的负导数的局部变量。然后操作员下降(p)返回真正的在较小的时间步p从正到负变化迹象。

检测输入事件或超级一步迭代之间的价值变化

当多个输入事件发生在相同的时间步,或者当你启用超级一步语义,图表更新x上一页x开始每次它执行缓冲区。图表检测变化值之间的输入事件和超级一步迭代即使变化不止一次在一个给定的时间步长。有关更多信息,请参见使用事件来执行图表超级一步语义

另请参阅

||||||

相关的话题