Detect change in data from specified value
tf = hasChangedFrom(
returns 1 (data_name
,value
)true
) if the value of data_name
was
equal to the specified value
at the beginning of the previous
time step and is a different value at the beginning of the current time step.
Otherwise, the operator returns 0 (false
).
The argument data_name
can be:
A scalar variable.
A matrix or an element of a matrix.
If data_name
is a matrix, the operator
returns true
when it detects a change in any
element of data_name
and the previous value
of data_name
was equal to
value
.
Index elements of a matrix by using numbers or expressions that evaluate to a constant integer. See Supported Operations for Vectors and Matrices.
A structure or a field in a structure.
If data_name
is a structure, the change
detection operator returns true
when it
detects a change in any element of data_name
and the previous value of data_name
was equal
to value
.
Index fields in a structure by using dot notation. See Index and Assign Values to Stateflow Structures.
Any valid combination of structure fields or matrix elements.
The argument data_name
cannot be a nontrivial expression or a custom
code variable.
Note
Standalone charts in MATLAB® do not support change detection on an element of a matrix or a field in a structure.
The argument value
can be any expression that resolves to a
value that is comparable with data_name
:
If data_name
is a scalar, then
value
must resolve to a scalar value.
If data_name
is a matrix, then
value
must resolve to a matrix value with the
same dimensions as data_name
.
Alternatively, in a chart that uses C as the action language,
value
can resolve to a scalar value. The chart
uses scalar expansion to compare data_name
to a
matrix whose elements are all equal to the value specified by
value
. See Assign Values to All Elements of a Matrix.
If data_name
is a structure, then
value
must resolve to a structure value whose
field specification matches data_name
exactly.
If multiple input events occur in the same time step, the
hasChangedFrom
operator can detect changes in data value
between input events.
If the chart writes to the data object but does not change the data value, the
hasChangedFrom
operator returns
false
.
The type of Stateflow® chart determines the scope of the data supported by the change detection operators:
Standalone Stateflow charts in MATLAB: Local
only
In Simulink® models, charts that use MATLAB as the action language:
Input
only
In Simulink models, charts that use C as the action language:
Input
,
Output
,
Local
, or Data Store
Memory
In a standalone chart in MATLAB, a change detection operator can detect changes in data specified
in a call to the step
function because these changes occur
before the start of the current time step. For example, if x
is equal to zero, the expression hasChangedFrom(x,0)
returns
true
when you execute the chart ch
with the
command:
step(ch,'x',1);
In a chart in a Simulink model, if you enable the chart option Initialize Outputs
Every Time Chart Wakes Up, using an output as the argument of the
hasChanged
operator always returns
false
. For more information, see Initialize outputs every time chart wakes up.