hasChangedFrom - Detect change in data from specified value in Stateflow
chart - MATLAB ([original](https://www.mathworks.com/help/stateflow/ref/haschangedfrom.html)) ([raw](?raw))
Detect change in data from specified value in Stateflow chart
Syntax
Description
`tf` = hasChangedFrom(`data`,`value`)
returns 1
(true
) if the value ofdata
is equal to 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
).
Examples
Transition out of state if the previous value of the matrixM
was equal to matrixValue
and any element of M
has changed value since the last time step or input event.
[hasChangedFrom(M,matrixValue)]
Transition out of state if the element in row 1 and column 3 of the matrixM
has changed from the value 7
since the last time step or input event.
In charts that use MATLAB® as the action language, use:
[hasChangedFrom(M(1,3),7)]
In charts that use C as the action language, use:
[hasChangedFrom(M[0][2],7)]
Transition out of state if the previous value of the structurestruct
was equal to structValue
and any field of struct
has changed value since the last time step or input event.
[hasChangedFrom(struct,structValue)]
Transition out of state if the field struct.field
has changed from the value 5
since the last time step or input event.
[hasChangedFrom(struct.field,5)]
Input Arguments
Stateflow® data, specified as a:
- Scalar
- Matrix or an element of a matrix
- Structure or a field in a structure
- Valid combination of structure fields or matrix elements
If data
is a matrix, the operator returns true
when it detects a change in one of the elements of data
. You can also index elements of a matrix by using numbers or expressions that evaluate to an integer. SeeOperations for Vectors and Matrices in Stateflow.
If data
is a structure, the operator returns true
when it detects a change in one of the fields of data
. You can also index fields in a structure by using dot notation. See Index and Assign Values to Stateflow Structures.
The argument data
cannot be a nontrivial expression or a custom code variable.
Standalone charts in MATLAB do not support change detection on an element of a matrix or a field in a structure.
Value of the data at previous time step, specified as the same data type of data
. value
must be an expression that resolves to a value that is comparable with data:
- If
data
is a scalar, thenvalue
must resolve to a scalar. - If
data
is a matrix, thenvalue
must resolve to a matrix with the same dimensions asdata
.
Alternatively, in a chart that uses C as the action language,value
can resolve to a scalar value. The chart uses scalar expansion to comparedata
to a matrix whose elements are all equal to the value specified byvalue
. SeeAssign Values to All Elements of a Matrix. - If
data
is a structure, thenvalue
must resolve to a structure whose field specification matchesdata
exactly.
Limitations
- Unable to be used within a Stateflow truth table.
Tips
- 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 returnsfalse
. - 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
, orData Store Memory
- Standalone Stateflow charts in MATLAB:
- 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, ifx
is equal to zero, the expressionhasChangedFrom(x,0)
returnstrue
when you execute the chartch
with the command:
In contrast, a change detection operator cannot detect changes in data caused by assignments in state or transition actions in the same time step. Instead, the operator detects the change in value at the start of the next time step. - 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 returnsfalse
. For more information, see Initialize outputs every time chart wakes up. - When row-major array layout is enabled in charts that use
hasChangedFrom
, code generation produces an error. Before generating code in charts that usehasChangedFrom
, enable column-major array layout. See Select Array Layout for Matrices in Generated Code.
Version History
Introduced in R2007a