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

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

Откройте примеры моделей

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

Определите глобальное хранилище данных с использованием объекта Simulink ® Signal

Чтобы указать в Simulink, что модель верхней части и обе ссылочные модели используют одну и ту же память для хранилища данных с именем ErrorCond в каждой модели создайте образец Simulink.Signal объект с именем ErrorCond в рабочей области или словаре данных, который виден каждой модели. Поскольку этот объект виден каждой модели, его возможности охватывают отдельные модели и подразумевает, что существует один глобальные данные хранилище этого имени, которое совместно используется моделями. Обратите внимание, что ни одна из трех моделей не содержит блок Data Store Memory с именем хранилища данных 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 объект. The 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 массив. Например, блочный путь блока 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.

См. также

| |

Похожие темы