Main Content

Log Data in Library Charts

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 (Simulink).

How Library Log Settings Influence Linked Instances

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.

Override Logging Properties in Atomic Subcharts

The model sf_atomic_sensor_pair simulates a redundant sensor pair by using the 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.

Override Logging Properties by Using the Stateflow User Interface

  1. Open the example library sf_atomic_sensor_lib.

    openExample("sf_atomic_sensor_lib")
  2. In the Library tab, click Locked Library to unlock the library.

  3. Open the chart.

  4. In the Library tab, under Prepare, click Property Inspector.

  5. Enable and customize logging for each state in the chart:

    1. Select the state.

    2. In the Property Inspector, select Log self activity.

    3. In the Property Inspector, in the Logging Name drop-down list, select Custom.

      In the text field, enter Log followed by the state name. For example, LogOK, LogFail, and LogFailOnce.

  6. Open the model sf_atomic_sensor_pair. This model contains two instances of the library chart.

    openExample("sf_atomic_sensor_pair")
  7. Open the Configuration Parameters dialog box.

  8. In the Data Import/Export pane, click Configure Signals to Log to open the Simulink Signal Logging Selector.

  9. In the Simulink Signal Login Selector window, in the Model Hierarchy pane, expand RedundantSensors, and click Sensor1.

    The library instance inherits the logging properties from the library chart.

    Simulink signal logging selector that shows logging properties inherited from the library chart.

  10. Override the logging properties for Sensor1:

    1. At the top of the window, change Logging Mode to Override signals. In the Contents of pane, the selector clears the values of the DataLogging check boxes for both library charts.

    2. Enable logging for the Fail and FailOnce states by selecting the check box in the DataLogging column.

    3. Double-click the values in the LoggingName column for the signals Fail and FailOnce, and rename them LogFailSensor1 and LogFailOnceSensor1, respectively.

    Simulink signal logging selector that shows different logging properties than the library chart.

Override Logging Properties with the Command-Line API

  1. Open the example library sf_atomic_sensor_lib.

    openExample("sf_atomic_sensor_lib")
  2. Unlock the library.

    library = find(sfroot,"-isa","Stateflow.Machine", ...
        Name="sf_atomic_sensor_lib");
    library.Locked = false;
  3. Create an array that contains every state in the library chart. Log the signals for each state.

    states = find(library,"-isa","Stateflow.State");
    
    for i = 1: length(states)
       states(i).LoggingInfo.DataLogging = true;
    end
  4. Open the model sf_atomic_sensor_pair. This model contains two instances of the library chart.

    open_system("sf_atomic_sensor_pair")
  5. Create a ModelLoggingInfo object for the model. This object contains an array named Signals that stores all logged signals.

    logInfo = Simulink.SimulationData.ModelLoggingInfo.createFromModel('sf_atomic_sensor_pair')
    logInfo = 
    
      ModelLoggingInfo with properties:
    
                         Model: 'sf_atomic_sensor_pair'
                   LoggingMode: 'OverrideSignals'
        LogAsSpecifiedByModels: {}
                       Signals: [1×6 Simulink.SimulationData.SignalLoggingInfo]

    The Signals array contains the signals marked for logging in the library chart, including:

    • The library instances of Fail, FailOnce, and OK states in atomic subchart Sensor1

    • The library instances of Fail, FailOnce, and OK states in atomic subchart Sensor2

  6. Create a block path to the logged signals whose properties you want to override.

    To access signals inside Stateflow charts, use the Simulink.SimulationData.BlockPath object. For more information, see Simulink.SimulationData.BlockPath (Simulink).

    For example, to create block paths for the signals Fail, FailOnce, and OK in the atomic subchart Sensor1 in the RedundantSensors chart, enter:

    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");
  7. Get the index of each logged signal in the Simulink.SimulationData.BlockPath object.

    failidx = logInfo.findSignal(failPath);
    failOnceidx = logInfo.findSignal(failOncePath);
    OKidx = logInfo.findSignal(OKPath);
  8. Override the logging properties for the signals in Sensor1:

    1. Disable logging for signal OK.

      logInfo.Signals(OKidx).LoggingInfo.DataLogging = false;
    2. Enable and set custom names.

      logInfo.Signals(failidx).LoggingInfo.NameMode = true;
      logInfo.Signals(failOnceidx).LoggingInfo.NameMode = true;
      
      logInfo.Signals(failidx).LoggingInfo.LoggingName = "LogFailSensor1";
      logInfo.Signals(failOnceidx).LoggingInfo.LoggingName = "LogFailOnceSensor1";
  9. Apply the changes.

    set_param(bdroot,DataLoggingOverride=logInfo);

See Also

(Simulink) | (Simulink)