В этом примере показано, как использовать и регистрировать локальные хранилища данных. Это также показывает, как задать, используйте и регистрируйте хранилища глобальных данных, чтобы совместно использовать глобальные данные среди моделей, на которые ссылаются.
Откройте модели в качестве примера. Топ-модель sldemo_mdlref_dsm
модели sldemo_mdlref_dsm_bot
ссылок и
sldemo_mdlref_dsm_bot2
. Логгирование хранилищ данных включено для sldemo_mdlref_dsm
на панели Импорта/Экспорта Данных диалогового окна Configuration Parameters.
Образец модели 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
свойства к ненаследованным настройкам. 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
объект. 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.
Data Store Memory | Data Store Read | Data Store Write