В этом примере показано, как использовать и регистрировать локальные хранилища данных. Это также показывает, как задать, используйте и регистрируйте хранилища глобальных данных, чтобы совместно использовать глобальные данные среди моделей, на которые ссылаются.
Откройте модели в качестве примера. Топ-модель 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
Размерности
, и SamplingMode
свойства к ненаследованным настройкам. 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.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.