Когда вы симулируете график Stateflow® в модели Simulink®, можно регистрировать значения для локальной переменной, вывести, и активные данные состояния в Simulink.SimulationData.Dataset
объект. После симуляции можно получить доступ к этому объекту через Инспектора Данных моделирования или в рабочей области MATLAB®. Рабочий процесс для регистрации данных:
Включите логгирование сигнала для графика и выберите формат логгирования. Смотрите Включают Логгирование Сигнала.
Сконфигурируйте состояния и данные для логгирования сигнала. Смотрите Конфигурируют состояния и Данные для Логгирования.
Симулируйте график.
Доступ к записанным данным. Смотрите доступ к Сигналу Регистрировать Данные.
Логгирование сигнала включено по умолчанию для моделей и графиков. Отключить или повторно включить логгирование сигнала:
Откройте диалоговое окно Model Configuration Parameters.
Выберите Data Import/Export.
В панели Signals установите флажок Signal logging, чтобы позволить регистрировать для графика. Чтобы отключить логгирование, снимите флажок.
(Необязательно) Задайте пользовательское имя для объекта логгирования сигнала. Именем по умолчанию является logsout
. Используя этот объект, можно получить доступ к данным о регистрации в переменной рабочего пространства MATLAB.
(Необязательно) В поле Format, выберите формат логгирования сигнала. Опции включают:
Array
Structure
Structure with time
Dataset
Настройкой по умолчанию является Dataset
. Для получения дополнительной информации смотрите Время, состояние и Формат Выходных данных (Simulink).
Нажмите OK.
Можно установить свойства логгирования для состояний, локальных данных и выходных данных из графика, через диалоговое окно Stateflow Signal Logging, или программно из командной строки.
Сконфигурируйте свойства логгирования для одного состояния или объекта данных за один раз через Property Inspector, Model Explorer или диалоговое окно свойств для состояния или объекта данных. Выберите вкладку Logging и измените свойства по мере необходимости. Для получения дополнительной информации смотрите Logging Properties.
Например, в sf_semantics_hotel_checkin
модель:
Откройте Hotel
график.
Откройте панель Символов. Во вкладке Simulation нажмите Symbols Pane.
Откройте Property Inspector. Во вкладке Simulation нажмите Property Inspector
Сконфигурируйте service
локальные данные для логгирования.
В панели Символов выберите service
.
В Property Inspector, на вкладке Logging, устанавливают флажок Log signal data.
Сконфигурируйте Dining_area
состояние для логгирования.
На редакторе Stateflow выберите Dining_area
состояние.
В Property Inspector, на вкладке Logging, устанавливают флажок Log self activity.
По умолчанию имя логгирования для этого состояния является иерархическим именем сигнала Check_in.Checked_in.Executive_suite.Dining_area
. Чтобы присвоить более короткое имя к состоянию, в поле Logging Name, выбирают Custom
и введите Dining Room
.
Сконфигурируйте свойства логгирования для нескольких состояний и объектов данных через диалоговое окно Stateflow Signal Logging. Выберите который объекты диаграммы регистрировать из списка всех состояний, локальных, и выходных данных. Для получения дополнительной информации смотрите Logging Properties.
Например, в sf_semantics_hotel_checkin
модель:
Откройте Hotel
график.
Чтобы регистрировать несколько сигналов, нажмите и содержите сдвиг, чтобы выбрать состояния для логгирования. Во вкладке Simulation, под Prepare, выбирают Log Self Activity.
Метки значка логгирования регистрировали сигналы в модели.
Можно добавить выходной порт, чтобы контролировать действие графика. От редактора Stateflow, во вкладке Simulation, нажимают Add Output Port. Новый порт появляется на вашей диаграмме Stateflow. Соедините этот порт со средством просмотра, чтобы контролировать дочернее действие графика.
Сконфигурируйте свойства логгирования для состояний и объектов данных программно из командной строки. Чтобы позволить регистрировать для состояния или объект данных, получите указатель для объекта и установите его LoggingInfo.DataLogging
свойство к 1
. Для получения дополнительной информации о Stateflow Программируемый Интерфейс смотрите Логгирование.
Например, в sf_semantics_hotel_checkin
модель:
Откройте Hotel
график.
Получите указатель для Dining_area
состояние:
rt = sfroot; diningState = rt.find('-isa','Stateflow.State','Name','Dining_area');
Получите указатель для локальных данных service
:
serviceData = rt.find('-isa','Stateflow.Data','Name','service');
Позвольте регистрировать для Dining_area
состояние и service
данные:
diningState.LoggingInfo.DataLogging = 1; serviceData.LoggingInfo.DataLogging = 1;
Поменяйте имя логгирования 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.
Когда вы симулируете модель, Инспектор Данных моделирования, значок подсвечен, чтобы указать, что это имеет новые данные моделирования.
Чтобы открыть Инспектора Данных моделирования, во вкладке Simulation, кликают по значку.
Смотрите и сравните сигналы, регистрируемые в процессе моделирования. Смотрите Инспектора Данных моделирования.
Получить доступ к объекту логгирования сигнала, в командной строке 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
Чтобы получить доступ к регистрируемым элементам, используйте 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]
Чтобы получить доступ к записанным данным и время каждого регистрируемого элемента, используйте 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 включили, любой выполняется после копий первого показа первые точки записанных данных. Когда вы запускаете алгоритмы, которые обрабатывают эти точки данных, необходимо объяснить это дублирование.
Simulink.SimulationData.Dataset
| get
| plot
| table
| xlswrite