Используя хранилища данных через многоуровневые модели

В этом примере показано, как использовать и регистрировать локальные хранилища данных. Это также показывает, как задать, используйте и регистрируйте хранилища глобальных данных, чтобы совместно использовать глобальные данные среди моделей, на которые ссылаются.

Откройте модели в качестве примера

Откройте модели в качестве примера. Топ-модель 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® Signal Object

Чтобы указать к 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.