В этом примере показано, как использовать и регистрировать локальные хранилища данных. В нем также показано, как определять, использовать и регистрировать глобальные хранилища данных для совместного использования глобальных данных ссылочными моделями.
Откройте примеры моделей. Верхняя модель sldemo_mdlref_dsm ссылочные модели sldemo_mdlref_dsm_bot и sldemo_mdlref_dsm_bot2. Регистрация хранилищ данных включена для sldemo_mdlref_dsm на панели Импорт/экспорт данных (Data Import/Export) диалогового окна Параметры конфигурации (Configuration Parameters).
Ссылочная модель sldemo_mdlref_dsm_bot усиливает входящий сигнал на 5, если сигнал положительный, или на 2, если сигнал отрицательный, и записывает значение этого сигнала в локальное хранилище данных RefSignalVal. Это локальное хранилище данных настроено для регистрации всех записанных значений в рабочей области после моделирования. Параметры ведения журнала для этого локального хранилища данных управляются на вкладке «Ведение журнала» диалогового окна параметров блока.
Ссылочная модель sldemo_mdlref_dsm_bot2 задает значение глобального логического хранилища данных с именем ErrorCond true, если значение его входного сигнала выходит за пределы диапазона (-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-файл, в результате чего объект загружается в базовую рабочую область. Этот объект можно просмотреть, выбрав базовое рабочее пространство в обозревателе моделей. Этот объект также можно создать из командной строки 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 массив. Например, путь блока записи хранилища данных, который записал пятое значение в хранилище данных, может быть получен следующим образом:
>> 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.
Память хранилища данных | Чтение хранилища данных | Запись в хранилище данных