exponenta event banner

Выходные данные моделирования журнала для состояний и данных

При моделировании диаграммы Stateflow ® в модели Simulink ® можно регистрировать значения локальных, выходных и активных данных состояния в Simulink.SimulationData.Dataset объект. После моделирования доступ к этому объекту можно получить с помощью инспектора данных моделирования, логического анализатора или в рабочей области MATLAB ®. Рабочий процесс для регистрации данных:

  1. Включите ведение журнала сигналов для диаграммы и выберите формат ведения журнала. См. раздел Включение регистрации сигналов.

  2. Конфигурирование состояний и данных для регистрации сигналов. См. раздел Настройка состояний и данных для ведения журнала.

  3. Смоделировать диаграмму.

  4. Доступ к записанным данным. См. раздел Доступ к данным регистрации сигналов.

Включить регистрацию сигналов

Регистрация сигналов включена по умолчанию для моделей и диаграмм. Для отключения или повторного включения регистрации сигналов:

  1. Откройте диалоговое окно Параметры конфигурации модели (Model Configuration Parameters).

  2. Выберите Импорт/экспорт данных.

  3. На панели Сигналы (Signals) установите флажок Регистрация сигналов (Signal logging), чтобы включить ведение журнала для диаграммы. Чтобы отключить ведение журнала, снимите флажок.

  4. (Необязательно) Укажите пользовательское имя для объекта регистрации сигналов. Имя по умолчанию: logsout. С помощью этого объекта можно получить доступ к данным регистрации в переменной рабочей области MATLAB. Дополнительные сведения см. в разделе Экспорт данных сигнала с помощью регистрации сигнала (Simulink).

  5. (Необязательно) В поле Формат выберите формат регистрации сигнала. Варианты включают в себя:

    • Array

    • Structure

    • Structure with time

    • Dataset

    Значение по умолчанию: Dataset. Дополнительные сведения см. в разделе Время, состояние и формат выходных данных (Simulink).

  6. Нажмите кнопку ОК.

Настройка состояний и данных для ведения журнала

Можно задать свойства ведения журнала для состояний, локальных данных и выходных данных внутри диаграммы, в диалоговом окне Регистрация сигналов статофлоу (Stateflow Signal Logging) или программно в командной строке.

Регистрировать отдельные состояния и данные

Настройте свойства ведения журнала для одного состояния или объекта данных одновременно с помощью инспектора свойств, обозревателя моделей или диалогового окна свойств для состояния или объекта данных. Выберите вкладку «Ведение журнала» и при необходимости измените свойства. Дополнительные сведения см. в разделе Свойства ведения журнала.

Например, в sf_semantics_hotel_checkin модель:

  1. Откройте окно Hotel диаграмма.

  2. Откройте панель «Символы». На вкладке Моделирование (Simulation) в разделе Подготовка (Prepare) щелкните Панель символов (Symbols Pane).

  3. Откройте инспектор свойств. На вкладке «Моделирование» в разделе «Подготовка» выберите «Инспектор свойств».

  4. Сконфигурируйте service локальные данные для ведения журнала.

    1. На панели «Символы» выберите service.

    2. В инспекторе свойств в разделе «Ведение журнала» установите флажок «Регистрировать данные сигнала».

  5. Сконфигурируйте Dining_area состояние для ведения журнала.

    1. В редакторе потока состояний выберите Dining_area состояние.

    2. На вкладке Моделирование (Simulation) в разделе Подготовка (Prepare) выберите Журнал самостоятельной деятельности (Log Self Activity). Либо в Инспекторе свойств в разделе Ведение журнала установите флажок Вести журнал для самостоятельной работы.

    3. По умолчанию имя регистрации для этого состояния является именем иерархического сигнала Check_in.Checked_in.Executive_suite.Dining_area. Чтобы назначить состояние с более коротким именем, задайте для параметра Имя регистрации значение Custom и введите Dining Room.

Регистрация нескольких сигналов

Настройте свойства ведения журнала для нескольких состояний и объектов данных с помощью диалогового окна Ведение журнала сигналов потока состояний (Stateflow Signal Logging). Выберите объекты диаграммы для регистрации в списке всех состояний, локальных и выходных данных. Дополнительные сведения см. в разделе Свойства ведения журнала.

Например, в sf_semantics_hotel_checkin модель:

  1. Откройте окно Hotel диаграмма.

  2. Для регистрации нескольких сигналов нажмите и удерживайте клавишу shift для выбора состояний регистрации. На вкладке Моделирование (Simulation) в разделе Подготовка (Prepare) выберите Журнал самостоятельной деятельности (Log Self Activity).

  3. Значок регистрации помечает записанные сигналы в модели.

Добавление выходного порта

Для контроля активности диаграммы можно добавить выходной порт. В редакторе Stateflow на вкладке Simulation щелкните Add Output Port. На диаграмме Stateflow появится новый порт. Подключите этот порт к средству просмотра, чтобы отслеживать дочернюю активность диаграммы.

Регистрация сигналов диаграммы с помощью API командной строки

Настройте свойства ведения журнала для состояний и объектов данных программным способом из командной строки. Чтобы включить ведение журнала для состояния или объекта данных, получите дескриптор для объекта и задайте его LoggingInfo.DataLogging свойство для 1. Дополнительные сведения о программном интерфейсе Stateflow см. в разделе Обзор API Stateflow.

Например, в sf_semantics_hotel_checkin модель:

  1. Откройте окно Hotel диаграмма.

  2. Получить дескриптор для Dining_area состояние:

    rt = sfroot;
    diningState = rt.find('-isa','Stateflow.State','Name','Dining_area');

  3. Получение дескриптора для локальных данных service:

    serviceData = rt.find('-isa','Stateflow.Data','Name','service');

  4. Включить ведение журнала для Dining_area состояние и service данные:

    diningState.LoggingInfo.DataLogging = 1;
    serviceData.LoggingInfo.DataLogging = 1;

  5. Изменение имени регистрации Dining_area состояние для пользовательского имени Dining Room:

    % Enable custom naming
    diningState.LoggingInfo.NameMode = 'Custom';
    
    % Enter the custom name
    diningState.LoggingInfo.LoggingName = 'Dining Room';

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

Во время моделирования Stateflow сохраняет записанные данные в Simulink.SimulationData.Dataset (Simulink) объект регистрации сигналов.

Например, предположим, что вы настраиваете sf_semantics_hotel_checkin модель для регистрации service локальные данные и деятельность Dining_area состояние. После запуска моделирования необходимо зайти в отель, переключив первый переключатель и несколько раз заказав обслуживание номеров, переключив второй переключатель. После остановки моделирования можно просмотреть зарегистрированные данные с помощью инспектора данных моделирования, Logic Analyzer или в рабочей области MATLAB.

Просмотр зарегистрированных данных с помощью инспектора данных моделирования

При моделировании модели значок «Инспектор расчетных данных» подсвечивается, указывая на наличие новых расчетных данных.

  1. Чтобы открыть инспектор данных моделирования, на вкладке Моделирование щелкните значок.

  2. Проверьте и сравните сигналы, зарегистрированные во время моделирования. См. раздел Инспектор данных моделирования (Simulation Data Inspector, Simulink).

Просмотр зарегистрированных данных с помощью логического анализатора

При моделировании модели значок Logic Analyzer подсвечивается, указывая на наличие новых данных моделирования. Для использования логического анализатора необходимо иметь системный Toolbox™ DSP или Blockset™ SoC.

  1. Чтобы открыть Logic Analyzer, на вкладке Simulation (Моделирование) щелкните значок.Logic Analyzer icon

  2. Просмотр, измерение и сравнение состояний, зарегистрированных во время моделирования. См. Logic Analyzer (панель инструментов системы DSP).

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

  1. Для доступа к объекту регистрации сигналов в командной строке MATLAB введите:

    logsout = out.logsout
    logsout = 
    
    Simulink.SimulationData.Dataset 'logsout' with 2 elements
    
                            Name         BlockPath                        
                            ___________  ________________________________ 
        1  [1x1 State]      Dining Room  sf_semantics_hotel_checkin/Hotel
        2  [1x1 Data ]      service      sf_semantics_hotel_checkin/Hotel
    

  2. Для доступа к записанным в журнал элементам используйте get (Simulink) метод. Доступ к записанным в журнал элементам можно получить по имени, индексу или пути блокировки.

    diningLog = logsout.get('Dining Room')
    diningLog = 
    
      Stateflow.SimulationData.State
      Package: Stateflow.SimulationData
    
      Properties:
             Name: 'Dining Room'
        BlockPath: [1×1 Simulink.SimulationData.BlockPath]
           Values: [1×1 timeseries]
    
    serviceLog = logsout.get('service')
    serviceLog = 
    
      Stateflow.SimulationData.Data
      Package: Stateflow.SimulationData
    
      Properties:
             Name: 'service'
        BlockPath: [1×1 Simulink.SimulationData.BlockPath]
           Values: [1×1 timeseries]
    

  3. Для доступа к зарегистрированным данным и времени каждого зарегистрированного элемента используйте Values.Data и Values.Time свойства. Например:

    • Упорядочить зарегистрированные данные в табличной форме с помощью table функция.

      T1 = table(diningLog.Values.Time,diningLog.Values.Data);
      T1.Properties.VariableNames = {'Time','Data'}
      T1 =
      
        6×2 table
      
             Time       Data
          __________    ____
      
                   0     0  
          1.8607e+06     1  
          1.9653e+06     0  
          1.9653e+06     1  
          1.9653e+06     0  
          2.2912e+06     1  
      
      T2 = table(serviceLog.Values.Time,serviceLog.Values.Data);
      T2.Properties.VariableNames = {'Time','Data'}
      T2 =
      
        6×2 table
      
             Time       Data
          __________    ____
          1.7076e+06     0  
          1.8607e+06     1  
          1.9653e+06     2  
          1.9653e+06     3  
          1.9653e+06     4  
          2.2912e+06     5  
      

    • Просмотр зарегистрированных данных в окне рисунка с помощью plot функция.

      X = serviceLog.Values.Time;
      Y = serviceLog.Values.Data;
      plot(X,Y,'-o')
      xlabel('Time')
      ylabel('Data')

    • Экспорт зарегистрированных данных в электронную таблицу Excel ® путем передачи массива зарегистрированных значений вxlswrite функция:

      A = [double(diningLog.Values.Time) double(diningLog.Values.Data)];
      xlswrite('dining_log.xls',A);

Протоколирование многомерных данных

Поток состояний регистрирует каждое обновление многомерного сигнала как одно изменение. Например, обновление двух элементов матрицы A отдельно

A[1][1] = 1;
A[1][2] = 1;
приводит к двум различным изменениям в записанных данных. Напротив, обновление матрицы A в одной команде
A = 1;
создает одно изменение в записанных данных, даже если команда подразумевает A[i][j] = 1 для всех значений i и j.

Ограничения на ведение журнала данных

При моделировании моделей во внешнем режиме регистрация данных Stateflow не поддерживается.

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

См. также

| | | | | (Simulink) | (Симулинк)

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