exponenta event banner

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

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

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

Откройте примеры моделей. Верхняя модель 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 ®

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

См. также

| |

Связанные темы