В Simulink ® можно создать собственные библиотеки блоков, чтобы повторно использовать функциональные возможности блоков или подсистем в одной или нескольких моделях. Аналогично, можно повторно использовать набор алгоритмов Stateflow ®, инкапсулируя функциональные возможности в библиотечную диаграмму.
Как и в других библиотеках блоков Simulink, каждый экземпляр блоков библиотеки диаграмм в модели можно специализировать на использовании различных типов данных, времени выборки и других свойств. Экземпляры библиотеки, наследующие те же свойства, могут повторно использовать созданный код.
Дополнительные сведения о библиотеках блоков Simulink см. в разделе Пользовательские библиотеки (Simulink).
Экземпляры диаграмм наследуют свойства ведения журнала из библиотечной диаграммы, с которой они связаны. В экземпляре можно переопределить свойства ведения журнала, но только для сигналов, выбранных в библиотеке. Невозможно выбрать дополнительные сигналы для регистрации из экземпляра.
Чтобы переопределить свойства регистрируемых сигналов в экземплярах диаграммы, используйте один из следующих подходов.
| Подход | Как использовать |
|---|---|
| Диалоговое окно выбора регистрации сигналов Simulink | См. раздел Переопределение свойств ведения журнала с помощью селектора ведения журнала |
| Интерфейс командной строки | См. раздел Переопределение свойств ведения журнала с помощью API командной строки |
Модель sf_atomic_sensor_pair моделирует избыточную пару датчиков как атомарные подшаблоны Sensor1 и Sensor2 в диаграмме RedundantSensors. Каждая атомарная вложенная диаграмма содержит экземпляры состояний Fail, FailOnce, и OK из диаграммы библиотеки sf_atomic_sensor_lib.
Открытие библиотеки примеров sf_atomic_sensor_lib.
Разблокируйте библиотеку. На вкладке Моделирование (Simulation) щелкните Заблокированная библиотека (Locked Library).
В редакторе Simulink выберите поток состояния SingleSensor диаграмма. На вкладке Моделирование (Simulation) щелкните Состояние журнала из списка (Log States from List).
В диалоговом окне «Регистрация сигналов статофлоу» задайте следующие свойства регистрации и нажмите кнопку «ОК».
| Для сигнала: | Что указать: |
|---|---|
Fail |
|
FailOnce |
|
OK |
|
Открытие модели sf_atomic_sensor_pair. Эта модель содержит два экземпляра библиотечной диаграммы.
Откройте диалоговое окно Параметры конфигурации модели (Model Configuration Parameters).
На панели Импорт/экспорт данных (Data Import/Export) щелкните Настроить сигналы для регистрации (Configure Signals to Log), чтобы открыть селектор регистрации сигналов Simulink.
На панели Иерархия модели (Model Hierarchy) разверните RedundantSensorsи нажмите Sensor1 и Sensor2.
Каждый экземпляр наследует свойства ведения журнала из диаграммы библиотеки. Например:

Теперь переопределите некоторые свойства ведения журнала для Sensor1:
На панели Иерархия модели (Model Hierarchy) выберите Sensor1.
Изменить режим ведения журнала на Override signals.
Селектор снимает все флажки DataLogging для модели.
Включить ведение журнала только для Fail и FailOnce состояния в Sensor1:
Выберите DataLogging для этих двух сигналов. Оставить значение DataLogging сброшенным для OK сигнал.
Добавление текста Sensor1 в имена журналов для Fail и FailOnce:
Дважды щелкните по именам регистрации сигналов Fail и FailOnceи переименуйте их LogFailSensor1 и LogFailOnceSensor1соответственно.
Настройки должны выглядеть следующим образом:

Открытие библиотеки примеров sf_atomic_sensor_lib.
Регистрировать сигналы Fail, FailOnce, и OK в SingleSensor диаграмма с использованием следующих команд:
% 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 |
Открытие модели sf_atomic_sensor_pair. Эта модель содержит два экземпляра библиотечной диаграммы.
Создать ModelLoggingInfo объект для модели.
Этот объект содержит вектор Signals хранит все зарегистрированные сигналы.
mi = Simulink.SimulationData.ModelLoggingInfo. ... createFromModel('sf_atomic_sensor_pair') |
Результат:
mi =
Simulink.SimulationData.ModelLoggingInfo
Package: Simulink.SimulationData
Properties:
Model: 'sf_atomic_sensor_pair'
LoggingMode: 'OverrideSignals'
LogAsSpecifiedByModels: {}
Signals: [1x6 Simulink.SimulationData.SignalLoggingInfo] |
Signals вектор содержит сигналы, отмеченные для регистрации в библиотечной диаграмме:
Экземпляры библиотеки Fail, FailOnce, и OK состояния в атомарном подграфе Sensor1
Экземпляры библиотеки Fail, FailOnce, и OK состояния в атомарном подграфе Sensor2
Убедитесь, что LoggingMode равняется 'OverrideSignals'.
Создайте путь блокировки для каждого зарегистрированного сигнала, свойства которого требуется переопределить.
Для доступа к сигналам внутри диаграмм Stateflow используйте Simulink.SimulationData.BlockPath(paths, subpath), где subpath представляет сигнал внутри диаграммы.
Создание контуров блоков для сигналов Fail, FailOnce, и OK в атомарном подграфе Sensor1 в RedundantSensors диаграмма:
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') |
Получение индекса каждого зарегистрированного сигнала в Simulink.SimulationData.BlockPath объект.
Получение индекса для сигналов Fail, FailOnce, и OK:
failidx = mi.findSignal(failPath); failOnceidx = mi.findSignal(failOncePath); OKidx = mi.findSignal(OKPath); |
Переопределить некоторые свойства регистрации для сигналов в Sensor1:
Деактивизация регистрации сигнала OK:
mi.Signals(OKidx).LoggingInfo.DataLogging = 0;
Добавление текста Sensor1 в имена журналов для Fail и 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'; |
Применить изменения:
set_param(bdroot, 'DataLoggingOverride', mi);Simulink.SimulationData.BlockPath (Simulink) | Simulink.SimulationData.ModelLoggingInfo (Симулинк)