This model shows how to model a simple redundant sensor pair using a new Stateflow® feature called Atomic Subcharts. This feature allows you to compose a large chart from other charts which reside in a different library file.
The main Stateflow chart
RedundantSensors consists of two "linked atomic subcharts" called
Sensor1 is active. It reads input
u1 and sets the output
y. When it fails, we switch to
Sensor2 which reads input
u2 and sets the output
y. When both of them fail, we fall into the
Alarm state and produce a nominal zero output.
Sensor2 are "linked atomic subcharts". These look and behave just like normal Stateflow states except that the contents of the linked atomic subchart reside in a chart in another library model. In this case, both of the linked atomic subcharts correspond to the library chart
SingleSensor chart models a single sensor which accepts a sensor input
u and provides a filtered sensor output
y. It has logic built-in to detect out-of-range errors. By default the sensor is assumed to be in the state "OK". If the sensor reading goes out of range (which is modeled by the transition from "OK" to "FailOnce") and stays faulty for 0.5 seconds, then we transition to "Fail". In this case, the sensor outputs a constant 0. This allows the sensor to model faults but ignore very transient spikes in the sensor reading.
Notice the following:
The transition from "OK" to "FailOnce" relies on two Stateflow chart parameters "LOW" and "HIGH".
There is a top-level function called "inFailed" which is used to convey to the container chart whether the sensor is in a failed state.
Mapping Inputs, Outputs and Parameters
Notice that the main chart
RedundantSensors has two inputs
u2, while the library chart corresponding to the linked atomic subcharts has only a single input
u. In this case, we want the linked subchart
Sensor1 to access the chart input
u1 and the linked subchart
Sensor2 to access the chart input
u2. In order to accomplish this, we need to specify "Mappings" for each instance of the linked atomic subchart. For example, if you right-click on
Sensor1 and select the context menu item
Subchart Mappings, you will see the following dialog:
This dialog allows you to map symbols (inputs, outputs and parameters) from the main chart to symbols in the library chart. Notice how the input "u" is mapped to the main chart input "u1". Similarly, parameters defined in the library chart can be given different values amongst the various instances of the subchart.
In this case, the mappings for
Sensor2 are as follows:
If you simulate the model, you will notice the following behavior:
Initially, both inputs to the main chart are zero. Hence the output produced is zero.
When you vary the first input between, u1, between (-75, 75), the output will track u1.
As soon as u1 is outside these bounds, y begins to track u2.
When u2 falls outside the range (-100, 100), then y begins to produce a nominal zero output.