In Simulink®, you can create your own block libraries as a way to reuse the functionality of blocks or subsystems in one or more models. Similarly, you can reuse a set of Stateflow® algorithms by encapsulating the functionality in a library chart.
As with other Simulink block libraries, you can specialize each instance of chart library blocks in your model to use different data types, sample times, and other properties. Library instances that inherit the same properties can reuse generated code.
For more information about Simulink block libraries, see Custom Libraries.
Chart instances inherit logging properties from the library chart to which they are linked. You can override logging properties in the instance, but only for signals you select in the library. You cannot select additional signals to log from the instance.
To override properties of logged signals in chart instances, use one of the following approaches.
Approach | How To Use |
---|---|
Simulink Signal Logging Selector dialog box | See Override Logging Properties with the Logging Selector |
Command-line interface | See Override Logging Properties with the Command-Line API |
The model sf_atomic_sensor_pair
simulates a redundant sensor pair as
atomic subcharts Sensor1
and Sensor2
in the chart
RedundantSensors
. Each atomic subchart contains instances of the states
Fail
, FailOnce
, and OK
from the
library chart sf_atomic_sensor_lib
.
Open the example library sf_atomic_sensor_lib
.
Unlock the library. In the Simulation tab, click Locked Library.
In the Simulink Editor, select the Stateflow
SingleSensor
chart. In the Simulation tab,
click Log States from List.
In Stateflow Signal Logging dialog box, set the following logging properties, then click OK.
For Signal: | What to Specify: |
---|---|
Fail |
|
FailOnce |
|
OK |
|
Open the model sf_atomic_sensor_pair
.
This model contains two instances of the library chart.
Open the Model Configuration Parameters dialog box.
In the Data Import/Export pane, click Configure Signals to Log to open the Simulink Signal Logging Selector.
In the Model Hierarchy pane, expand
RedundantSensors
, and click Sensor1
and
Sensor2
.
Each instance inherits logging properties from the library chart. For example:
Now, override some logging properties for Sensor1
:
In the Model Hierarchy pane, select
Sensor1
.
Change Logging Mode to Override
signals
.
The selector clears all DataLogging check boxes for the model.
Enable logging only for the Fail
and
FailOnce
states in Sensor1
:
Select DataLogging for these two signals. Leave
DataLogging cleared for the OK
signal.
Append the text Sensor1
to the logging names for
Fail
and FailOnce
:
Double-click the logging names for signals Fail
and
FailOnce
, and rename them LogFailSensor1
and LogFailOnceSensor1
, respectively.
The settings should look like this:
Open the example library sf_atomic_sensor_lib
.
Log the signals Fail
, FailOnce
, and
OK
in the SingleSensor
chart using these
commands:
% Get states in the SingleSensor chart rt=sfroot; states = rt.find('-isa', 'Stateflow.State'); % Enable logging for each state for i = 1: length(states) states(i).LoggingInfo.DataLogging = 1; end |
Open the model sf_atomic_sensor_pair
.
This model contains two instances of the library chart.
Create a ModelLoggingInfo
object for the model.
This object contains a vector Signals
that stores all logged
signals.
mi = Simulink.SimulationData.ModelLoggingInfo. ... createFromModel('sf_atomic_sensor_pair') |
The result is:
mi = Simulink.SimulationData.ModelLoggingInfo Package: Simulink.SimulationData Properties: Model: 'sf_atomic_sensor_pair' LoggingMode: 'OverrideSignals' LogAsSpecifiedByModels: {} Signals: [1x6 Simulink.SimulationData.SignalLoggingInfo] |
The Signals
vector contains the signals marked for logging in
the library chart:
Library instances of Fail
, FailOnce
,
and OK
states in atomic subchart
Sensor1
Library instances of Fail
, FailOnce
,
and OK
states in atomic subchart
Sensor2
Make sure that LoggingMode
equals
'OverrideSignals'
.
Create a block path to each logged signal whose properties you want to override.
To access signals inside Stateflow charts, use Simulink.SimulationData.BlockPath(paths,
subpath)
, where subpath
represents a signal inside the
chart.
To create block paths for the signals Fail
,
FailOnce
, and OK
in the atomic subchart
Sensor1
in the RedundantSensors
chart:
failPath = Simulink.SimulationData. ... BlockPath('sf_atomic_sensor_pair/RedundantSensors/Sensor1','Fail') failOncePath = Simulink.SimulationData. ... BlockPath('sf_atomic_sensor_pair/RedundantSensors/Sensor1','FailOnce') OKPath = Simulink.SimulationData. ... BlockPath('sf_atomic_sensor_pair/RedundantSensors/Sensor1','OK') |
Get the index of each logged signal in the
Simulink.SimulationData.BlockPath
object.
To get the index for the signals Fail
,
FailOnce
, and OK
:
failidx = mi.findSignal(failPath); failOnceidx = mi.findSignal(failOncePath); OKidx = mi.findSignal(OKPath); |
Override some logging properties for the signals in
Sensor1
:
Disable logging for signal OK
:
mi.Signals(OKidx).LoggingInfo.DataLogging = 0;
Append the text Sensor1
to the logging names for
Fail
and FailOnce
:
% Enable custom naming mi.Signals(failidx).LoggingInfo.NameMode = 1; mi.Signals(failOnceidx).LoggingInfo.NameMode = 1; % Enter the custom name mi.Signals(failidx).LoggingInfo.LoggingName = 'LogFailSensor1'; mi.Signals(failOnceidx).LoggingInfo.LoggingName = 'LogFailOnceSensor1'; |
Apply the changes:
set_param(bdroot, 'DataLoggingOverride', mi);
Simulink.SimulationData.BlockPath
| Simulink.SimulationData.ModelLoggingInfo