Когда вы моделируете график 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
.
Откройте окно Symbols путем выбора View> Symbols.
Откройте Property Inspector путем выбора View> Property Inspector.
Сконфигурируйте service
локальные данные для журналирования.
В окне Symbols выберите 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
.
Откройте диалоговое окно Stateflow Signal Logging путем выбора Simulation> Output> Log Chart Signals.
Установите флажки рядом с состоянием Check_in.Checked_in.Executive_suite.Dining_area
и локальной переменной service
.
Поменяйте имя журналирования Check_in.Checked_in.Executive_suite.Dining_area
к пользовательскому имени Dining Room
.
Нажмите OK.
Сконфигурируйте свойства журналирования для состояний и объектов данных программно из командной строки. Чтобы позволить регистрировать для состояния или объект данных, получите указатель для объекта и установите его свойство LoggingInfo.DataLogging
на 1
. Для получения дополнительной информации о Stateflow Программируемый Интерфейс смотрите Logging Properties.
Например, в модели 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.
Когда вы моделируете модель, Инспектор Данных моделирования, значок подсвечен, чтобы указать, что это имеет новые данные моделирования.
Чтобы открыть Инспектора Данных моделирования, кликните по значку.
Осмотрите и сравните сигналы, регистрируемые во время симуляции. Смотрите Инспектора Данных моделирования.
Чтобы получить доступ к объекту журналирования сигнала, в команде 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