Этот пример показывает, как использовать и регистрировать локальные хранилища данных. Это также показывает, как задать, используйте и регистрируйте хранилища глобальных данных, чтобы совместно использовать глобальные данные среди моделей, на которые ссылаются.
Откройте модели в качестве примера. Топ-модель модели ссылок 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 к истине, если значение ее входящего сигнала за пределами области значений (-0.8, 0.8). Топ-модель также контролирует хранилище данных ErrorCond и переключается между выходными параметрами двух моделей, на которые ссылаются, в зависимости от значения того хранилища данных.
Чтобы указать к Simulink, что топ-модель и обе из моделей, на которые ссылаются, используют ту же память для Хранилища данных под названием ErrorCond в каждой модели, создайте экземпляр объекта Simulink.Signal
под названием ErrorCond в базовом рабочем пространстве. Поскольку этот объект видим к каждой модели, ее осциллограф охватывает отдельные модели и подразумевает, что существует одно хранилище глобальных данных того имени, которое является общим для модели. Обратите внимание на то, что ни одна из этих трех моделей не содержит Блок памяти Хранилища данных с именем хранилища данных ErrorCond. Если бы какая-либо модель содержала такой блок, тот блок задал бы хранилище данных, локальное для модели, которая была бы тень хранилище глобальных данных.
Поскольку объект ErrorCond задает хранилище глобальных данных, он должен явным образом задать DataType
, Complexity
, Dimensions
и свойства SamplingMode
к ненаследованным настройкам. SampleTime
и StorageClass
можно оставить как их наследованные значения, или явным образом установить.
Пример включает MAT-файл под названием sldemo_mdlref_dsm_data.mat
, который содержит объект Simulink.Signal
ErrorCond. Функция предварительной нагрузки образцового sldemo_mdlref_dsm
загружает этот MAT-файл, заставляющий объект загрузиться в базовом рабочем пространстве. Можно просмотреть этот объект путем выбора базового рабочего пространства в Образцовом Проводнике. Можно также создать этот объект из командной строки MATLAB®. Следующие команды задают объект, используемый в этом примере:
ErrorCond = Simulink.Signal; ErrorCond.Description = 'Use to signal that subsystem output is invalid'; ErrorCond.DataType = 'boolean'; ErrorCond.Complexity = 'real'; ErrorCond.Dimensions = 1; ErrorCond.SamplingMode='Sample based'; ErrorCond.SampleTime = 0.1; ErrorCond.LoggingInfo.DataLogging = true;
Чтобы регистрировать все значения, записанные в хранилище глобальных данных, установите свойство DataLogging
свойства LoggingInfo
объекта Simulink.Signal
. Свойство 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
. Например, блок path блока 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.