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