Регистрируйте симуляцию Вывод для состояний и данных

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

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

  2. Сконфигурируйте состояния и данные для журналирования сигнала. Смотрите Конфигурируют состояния и Данные для Журналирования.

  3. Моделируйте график.

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

Включите журналирование сигнала

Журналирование сигнала включено по умолчанию для моделей и графиков. Отключить или повторно включить журналирование сигнала:

  1. Откройте диалоговое окно Model Configuration Parameters.

  2. Выберите Data Import/Export.

  3. В панели Signals установите флажок Signal logging, чтобы позволить регистрировать для графика. Чтобы отключить журналирование, снимите флажок.

  4. (Необязательно) Задайте пользовательское имя для объекта журналирования сигнала. Именем по умолчанию является logsout. Используя этот объект, можно получить доступ к данным о регистрации в переменной рабочего пространства MATLAB.

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

    • Array

    • Structure

    • Structure with time

    • Dataset

    Настройкой по умолчанию является Dataset. Для получения дополнительной информации смотрите Время, состояние и Формат Выходных данных (Simulink).

  6. Нажмите OK.

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

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

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

Сконфигурируйте свойства журналирования для одного состояния или объекта данных за один раз через Property Inspector, Model Explorer или диалоговое окно свойств для состояния или объекта данных. Выберите вкладку Logging и измените свойства по мере необходимости. Для получения дополнительной информации смотрите Logging Properties.

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

  1. Откройте график Hotel.

  2. Откройте окно Symbols путем выбора View> Symbols.

  3. Откройте Property Inspector путем выбора View> Property Inspector.

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

    1. В окне Symbols выберите service.

    2. В Property Inspector, на вкладке Logging, устанавливают флажок Log signal data.

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

    1. На редакторе Stateflow выберите состояние Dining_area.

    2. В Property Inspector, на вкладке Logging, устанавливают флажок Log self activity.

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

Регистрируйте несколько сигналов

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

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

  1. Откройте график Hotel.

  2. Откройте диалоговое окно Stateflow Signal Logging путем выбора Simulation> Output> Log Chart Signals.

  3. Установите флажки рядом с состоянием Check_in.Checked_in.Executive_suite.Dining_area и локальной переменной service.

  4. Поменяйте имя журналирования Check_in.Checked_in.Executive_suite.Dining_area к пользовательскому имени Dining Room.

  5. Нажмите OK.

Регистрируйте сигналы графика при помощи API командной строки

Сконфигурируйте свойства журналирования для состояний и объектов данных программно из командной строки. Чтобы позволить регистрировать для состояния или объект данных, получите указатель для объекта и установите его свойство LoggingInfo.DataLogging на 1. Для получения дополнительной информации о Stateflow Программируемый Интерфейс смотрите Logging Properties.

Например, в модели 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, регистрирующем объект. Именем по умолчанию объекта журналирования сигнала является logsout.

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

Просмотрите записанные данные через инспектора данных моделирования

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

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

  2. Осмотрите и сравните сигналы, регистрируемые во время симуляции. Смотрите Инспектора Данных моделирования.

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

  1. Чтобы получить доступ к объекту журналирования сигнала, в команде MATLAB запрашивают, введите:

    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. Можно получить доступ к регистрируемым элементам по наименованию, индексу или блоку path.

    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);

Регистрируйте многомерные данные

Stateflow регистрирует каждое обновление многомерного сигнала как одно изменение. Например, обновляя два элемента матричного A отдельно

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

Ограничения на регистрацию данных

Когда имитационные модели в режиме external mode, журналирование данных Stateflow не поддержано.

Если вы регистрируете действие состояния, или данные из графика с Fast Restart включили, любой выполняется после копий первого показа первые точки записанных данных. Когда вы запускаете алгоритмы, которые обрабатывают эти точки данных, необходимо объяснить это дублирование.

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

| | | |

Похожие темы