В этом примере показано, как использовать и регистрировать локальные хранилища данных. В нем также показано, как определять, использовать и регистрировать глобальные хранилища данных для обмена глобальными данными между ссылочными моделями.
Откройте примеры моделей. Модель верхнего уровня sldemo_mdlref_dsm
ссылается на модели sldemo_mdlref_dsm_bot
и sldemo_mdlref_dsm_bot2
. Логгирование хранилищ данных включено для sldemo_mdlref_dsm
на панели Импорт/Экспорт данных диалогового окна Параметры конфигурации.
Образец модели sldemo_mdlref_dsm_bot
усиливает входной сигнал на 5, если сигнал положителен, или на 2, если сигнал отрицателен, и записывает значение этого сигнала в локальное хранилище данных RefSignalVal
. Это локальное хранилище данных настроено для регистрации всех записанных значений в рабочей области после симуляции. Параметры регистрации для этого локального хранилища данных управляются вкладкой Logging диалогового окна параметров блоков.
Образец модели sldemo_mdlref_dsm_bot2
устанавливает значение глобального логического хранилища данных с именем ErrorCond
true, если значение его входного сигнала находится вне области значений (-0,8, 0,8). Верхняя часть модели также контролирует хранилище данных ErrorCond
и переключается между выходами двух ссылочных моделей в зависимости от значения этого хранилища данных.
Чтобы указать в Simulink, что модель верхней части и обе ссылочные модели используют одну и ту же память для хранилища данных с именем ErrorCond
в каждой модели создайте образец Simulink.Signal
объект с именем ErrorCond
в рабочей области или словаре данных, который виден каждой модели. Поскольку этот объект виден каждой модели, его возможности охватывают отдельные модели и подразумевает, что существует один глобальные данные хранилище этого имени, которое совместно используется моделями. Обратите внимание, что ни одна из трех моделей не содержит блок Data Store Memory с именем хранилища данных ErrorCond
. Если бы какая-либо модель содержала такой блок, этот блок задавал бы локальное хранилище данных для модели, которое затеняло бы глобальные данные хранилище.
Поскольку объект ErrorCond
определяет хранилище глобальных данных, он должен явным образом определять DataType
, Complexity
, и Dimensions
свойства к неунаследованным параметрам. SampleTime
и StorageClass
могут быть оставлены в качестве их унаследованных значений или явно заданы.
Пример включает MAT-файл с именем sldemo_mdlref_dsm_data.mat
который содержит Simulink.Signal
ErrorCond объекта
. Функция предварительной загрузки модели sldemo_mdlref_dsm
загружает этот MAT-файл, вызывая загрузку объекта в базовом рабочем пространстве. Можно просмотреть этот объект, выбрав базовое рабочее пространство в Model Explorer. Можно также создать этот объект из командной строки MATLAB ®. Следующие команды определяют объект, используемый в этом примере:
ErrorCond = Simulink.Signal; ErrorCond.Description = 'Use to signal that subsystem output is invalid'; ErrorCond.DataType = 'boolean'; ErrorCond.Complexity = 'real'; ErrorCond.Dimensions = 1; ErrorCond.SampleTime = 0.1; ErrorCond.LoggingInfo.DataLogging = true;
Чтобы войти в журнал всех значений, записанных в хранилище глобальных данных, установите DataLogging
свойство LoggingInfo
свойство Simulink.Signal
объект. The LoggingInfo
свойство также позволяет задавать другие параметры логгирования, такие как десятикратное уменьшение и максимальные точки.
Simulink.LoggingInfo (handle) DataLogging: 1 NameMode: 0 LoggingName: '' DecimateData: 0 Decimation: 2 LimitDataPoints: 0 MaxPoints: 5000
Теперь можно симулировать sldemo_mdlref_dsm
для просмотра выхода. Область образца модели sldemo_mdlref_dsm_bot
записывает данные в хранилище данных ErrorCond
в то время как верхняя часть sldemo_mdlref_dsm
считывает из хранилища данных. Синяя линия представляет вход в sldemo_mdlref_dsm_bot
; зеленая линия представляет выход блока Switch. Обратите внимание, что выход переключается, когда величина входного сигнала падает за пределы области значений.
Оба глобальных данных магазина ErrorCond
и локальное хранилище данных RefSignalVal
сконфигурированы для регистрации всех записанных значений после симуляции. Эти записанные результаты хранятся в базовом рабочем пространстве в dsmout
переменная.
dsmout = Simulink.SimulationData.Dataset 'dsmout' with 2 elements Name BlockPath ____________ ________________________________________ 1 [1x1 DataStoreMemory] ErrorCond '' 2 [1x1 DataStoreMemory] RefSignalVal ...dlref_dsm/A|sldemo_mdlref_dsm_bot/DSM - Use braces { } to access, modify, or add elements using index.
Для доступа к данным, хранящимся в локальном хранилище данных, используйте getElement
функция для получения правильного элемента хранилища данных на основе имени RefSignalVal
.
>> dsmout.getElement('RefSignalVal')
Simulink.SimulationData.DataStoreMemory Package: Simulink.SimulationData Properties: Name: 'RefSignalVal' BlockPath: [1x1 Simulink.SimulationData.BlockPath] Scope: 'local' DSMWriterBlockPaths: [1x2 Simulink.SimulationData.BlockPath] DSMWriters: [101x1 uint32] Values: [1x1 timeseries]
Данные хранятся в timeseries
в рамках Values
поле.
>> plot(dsmout.getElement('RefSignalVal').Values);
Чтобы определить, какой блок записан в хранилище данных в установленное время, используйте DSMWriters
свойство. Этот массив содержит список индексов в DSMWriterBlockPaths
массив. Например, блочный путь блока Data Store Write, который записал 5-е значение в хранилище данных, может быть получен следующим образом:
>> dsm = dsmout.getElement('RefSignalVal'); >> dsm.DSMWriterBlockPaths(dsm.DSMWriters(5))
Simulink.SimulationData.BlockPath Package: Simulink.SimulationData Block Path: 'sldemo_mdlref_dsm/A' 'sldemo_mdlref_dsm_bot/PositiveSS/DSW' Use the getBlock method to access block path character vectors from this object.
Data Store Memory | Data Store Read | Data Store Write