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