Преобразование записанных данных в формат набора данных

Преобразование данных рабочей области в набор данных

В этом примере показано, как преобразовать MATLAB® данные timeseries в Dataset формат. myvdp_timeseries является vdp модель с двумя блоками To Workspace, настроенными для simout и simout1 данных логгирования в формате TIMESERIES MATLAB. Рассмотрите использование процедуры, подобной этой, если у вас есть модели, которые используют блоки To Workspace для регистрации данных в формате timeseries MATLAB.

Используйте Simulink.SimulationData.Dataset конструктор для преобразования данных timeseries MATLAB в Dataset форматировать и затем объединять два набора данных.

  1. Начиная с vdp model, добавьте два блока To Workspace к модели, как показано на рисунке.

  2. Установите параметр Save format для обоих блоков. Задайте Timeseries.

  3. Сохраните модель как myvdp_timeseries.

  4. Симулируйте модель.

    Симуляция регистрирует данные с помощью блоков To Workspace.

  5. Доступ к формату логгирования сигналов, logsout.

    logsout
    
    
    logsout = 
    
      Simulink.SimulationData.Dataset
      Package: Simulink.SimulationData
    
      Characteristics:
                  Name: 'logsout'
        Total Elements: 2
    
      Elements:
        1: 'x1'
        2: 'x2'
    
      -Use get or getElement to access elements by index or name.
      -Use addElement or setElement to add or modify elements.
    
      Methods, Superclasses
  6. Преобразуйте данные timeseries MATLAB из обоих блоков To Workspace в Dataset.

    ds = Simulink.SimulationData.Dataset(simout);
    ds1 = Simulink.SimulationData.Dataset(simout1);

    ds - имя переменной первых To Workspace блочных данных. ds1 - имя переменной данных второго To Workspace блока.

  7. Объедините оба набора данных в dsfinal. Обратите внимание, что формат dsfinal соответствует формату logsout.

    dsfinal = ds.concat(ds1)
    dsfinal = 
    
      Simulink.SimulationData.Dataset
      Package: Simulink.SimulationData
    
      Characteristics:
                  Name: 'simout'
        Total Elements: 2
    
      Elements:
        1: 'x1'
        2: 'x2'
    
      -Use get or getElement to access elements by index or name.
      -Use addElement or setElement to add or modify elements.
    
      Methods, Superclasses

Преобразуйте структуру без времени в набор данных

В этом примере показано, как преобразовать структуру без временных данных в Dataset формат. myvdp_structure является vdp модель с двумя блоками To Workspace, сконфигурированными для моделирования и логгирования данных simout1 в формате структуры, как показано на рисунке.

Если у вас есть модели, которые используют блоки To Workspace для регистрации данных в формате структуры, рассмотрите использование такой процедуры, как эта, чтобы преобразовать их в Dataset формат.

  1. Начиная с vdp model, добавьте два блока To Workspace к модели, как показано на рисунке.

  2. В Save format параметре обоих блоков выберите Structure.

  3. Включите регистрацию сигналов для двух сигналов, идущих в два блока To Workspace, чтобы войти в Ds формат.

  4. Сохраните модель как myvdp_structure.

  5. Симулируйте модель.

    Симуляция регистрирует данные с помощью блоков To Workspace.

  6. Преобразуйте структурные данные из обоих блоков To Workspace в Dataset.

    ds = Simulink.SimulationData.Dataset(simout);
    ds1 = Simulink.SimulationData.Dataset(simout1);

    simout - имя переменной первых To Workspace блочных данных. simout1 - имя переменной данных второго To Workspace блока.

    При преобразовании структуры без времени или массива время начинается с t = 0 и увеличивается на 1.

  7. Получите значения первого элемента в ds.

    ds.get(1).Values.Time
    ans =
    
         0
         1
         2
         3
         .
         .
         .
        61
        62
        63
  8. Получите значения времени первого элемента из логгирования сигнала.

    logsout.get(1).Values.Time
    ans =
    
             0
        0.0001
        0.0006
        0.0031
        .
        .
        .
       19.2802
       19.6802
       20.0000
  9. Наблюдайте несоответствие временных меток между

    • Данные, зарегистрированные в структуре без времени, которое вы преобразовываете в Dataset формат

    • Данные, зарегистрированные в Dataset формат

Программный доступ к записанным данным в формате набора данных

Когда вы используете Dataset по умолчанию формат логгирования сигналов, Simulink® сохраняет данные журнала в Simulink.SimulationData.Dataset объект. Для получения информации об извлечении данных о сигнале из этого объекта смотрите Simulink.SimulationData.Dataset страница с описанием.

The Simulink.SimulationData.Dataset объект содержит Simulink.SimulationData.Signal объект для каждого зарегистрированного сигнала.

Для сигналов шины, Simulink.SimulationData.Signal объект содержит структуру MATLAB timeseries объекты.

The Simulink.SimulationData.Dataset класс предоставляет два метода доступа к данным логгирования сигналов и связанной с ними информации.

Имя

Описание

get

Можно также использовать getElement метод, который разделяет синтаксис и поведение как get способ.

Получите элемент или коллекцию элементов из набора данных на основе индекса, имени или пути блока.

numElements

Получите количество элементов в наборе данных.

Для примера доступа к данным логгированиям сигнала, который использует Dataset формат, см. Simulink.SimulationData.Dataset.

Доступ к массиву данных логгирования сигналов шин

Данные логгирования сигналов для массива шин используют Dataset формат логгирования сигналов.

Общий подход к доступу к данным для определенного сигнала в массиве шин:

  1. Использование Simulink.SimulationData.Dataset.get (или getElement) метод для доступа к определенному сигналу в записанных данных (по умолчанию logsout переменная).

  2. Чтобы получить значения, индексируйте в массиве шин.

  3. Еще раз проиндексируйте, чтобы получить данные для определенной шины.

Для примера получить данные логгирования сигнала для блока Constant6 в ex_log_nested_aob модель, для topBus сигнал, который подает блок Terminator:

logsout.getElement('topBus').Values.a(2,2).firstConst.data

Вот дополнительные примеры доступа к массиву данных логгирования сигналов шин. Для другого примера, который показывает, как логгировать массив данных шин, смотрите sldemo_mdlref_bus.

 Простой массив шин

 Массив шин в шине

 Вложенные массивы шин

Доступ к данным для сигналов с повторяющимся именем

Для модели с несколькими сигналами, которые имеют то же имя сигнала, данные логгирования сигнала включают в себя Simulink.SimulationData.Signal объект для каждого сигнала, который имеет повторяющееся имя.

Для доступа к конкретному сигналу, который имеет повторяющееся имя, используйте один из следующих подходов:

  • Чтобы найти данные для конкретного сигнала, визуально осмотрите отображаемый выход Simulink.SimulationData.Signal объекты.

  • Используйте Simulink.SimulationData.Dataset.getElement метод, задающий путь блока для исходного блока сигнала.

  • Чтобы выполнить итерацию сигналов с повторяющимся именем сигнала, создайте скрипт с помощью Simulink.SimulationData.Dataset.getElement метод с аргументом индекс.

  • Используйте диалоговое окно Свойств сигнала», чтобы задать другое имя. Рассмотрите использование этого подхода, когда сигналы с повторяющимся именем не появляются в нескольких образцы ссылочной модели в режиме normal mode.

    1. В модели щелкните правой кнопкой мыши сигнал.

    2. В контекстном меню выберите Properties.

    3. В диалоговом окне Свойства установите Logging name равным Custom и задайте имя, отличное от имени сигнала.

    4. Симулируйте модель и используйте Simulink.SimulationData.Dataset.getElement метод с аргументом имя.

Совет

Также можно использовать селектор логгирования для доступа к определенному сигналу. Для получения дополнительной информации смотрите Override Signal Logging Settings with Signal Logging Selector.

Обработка символов новой строки в данных логгированию сигналов

Чтобы обработать символы новой строки в именах логгирования в данных логгированию сигналов, которые используют Dataset формат, использование sprintf команда в getElement вызов. Для примера:

topOut.getElement(sprintf('INCREMENT\nBUS'))

См. также

Похожие темы