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

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

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

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

Указывать к 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.

Смотрите также

| |

Похожие темы