Осмотрите и сравните данные программно

Можно использовать возможности Инспектора Данных моделирования из командной строки MATLAB® с помощью Инспектора Данных моделирования API.

Инспектор Данных моделирования организует данные в выполнениях и сигналах, присваивая уникальную числовую идентификацию каждому выполнению и сигналу. Некоторый Инспектор Данных моделирования API-функции использует выполнение и идентификаторы сигнала к справочным данным, вместо того, чтобы принять выполнение или сам сигнал как вход. Чтобы получить доступ к идентификаторам выполнения в рабочей области, можно использовать Simulink.sdi.getAllRunIDs или Simulink.sdi.getRunIDByIndex. Можно получить доступ к идентификаторам сигнала через объект Simulink.sdi.Run с помощью метода Simulink.sdi.Run.getSignalIDByIndex.

Simulink.sdi.Run и классы Simulink.sdi.Signal обеспечивают доступ к вашим данным и позволяют вам просматривать и изменять выполнение и метаданные сигнала. Можно изменить Инспектора Данных моделирования настройки с помощью функций как Simulink.sdi.setSubPlotLayout, Simulink.sdi.setRunNamingRule и Simulink.sdi.setMarkersOn. Чтобы восстановить настройки по умолчанию Инспектора Данных моделирования, используйте Simulink.sdi.clearPreferences.

Создайте выполнение и просмотрите данные

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

Создайте данные для выполнения

Этот пример создает объекты timeseries для синуса и косинуса. Чтобы визуализировать ваши данные, Инспектор Данных моделирования требует, по крайней мере, временного вектора, который соответствует вашим данным.

% Generate timeseries data
time = linspace(0, 20, 100);

sine_vals = sin(2*pi/5*time);
sine_ts = timeseries(sine_vals, time);
sine_ts.Name = 'Sine, T=5';

cos_vals = cos(2*pi/8*time);
cos_ts = timeseries(cos_vals, time);
cos_ts.Name = 'Cosine, T=8';

Создайте запущенного инспектора данных моделирования и добавьте свои данные

Чтобы предоставить Инспектора Данных моделирования доступ к вашим данным, используйте метод create и создайте выполнение. Этот пример изменяет некоторые свойства выполнения помочь идентифицировать данные. Можно легко просмотреть выполнение и предупредить о свойствах с Инспектором Данных моделирования.

% Create a run
sinusoidsRun = Simulink.sdi.Run.create;
sinusoidsRun.Name = 'Sinusoids';
sinusoidsRun.Description = 'Sine and cosine signals with different frequencies';

% Add timeseries data to run
sinusoidsRun.add('vars', sine_ts, cos_ts);

Отобразите свои данные на графике Используя объект Simulink.sdi.Signal

Метод getSignalByIndex возвращает объект Simulink.sdi.Signal, который может использоваться, чтобы построить сигнал в Инспекторе Данных моделирования. Можно также программно управлять аспектами внешнего вида графика, такими как цвет и стиль строки, представляющей сигнал. Этот пример настраивает размещение подграфика и характеристики сигнала.

% Get signal, modify its properties, and change Checked property to true
sine_sig = sinusoidsRun.getSignalByIndex(1);
sine_sig.LineColor = [0 0 1];
sine_sig.LineDashed = '-.';
sine_sig.Checked = true;

% Add another subplot for the cosine signal
Simulink.sdi.setSubPlotLayout(2, 1);

% Plot the cosine signal and customize its appearance
cos_sig = sinusoidsRun.getSignalByIndex(2);
cos_sig.LineColor = [0 1 0];
cos_sig.plotOnSubPlot(2, 1, true);

% View the signal in the Simulation Data Inspector
Simulink.sdi.view

Закройте инспектора данных моделирования и сохраните свои данные

Simulink.sdi.close('sinusoids.mat')

Сравните сигналы в рамках выполнения симуляции

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

% Load model slexAircraftExample and mark signals for streaming
load_system('slexAircraftExample')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Pilot',1,'on')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',4,'on')

% Simulate model slexAircraftExample
sim('slexAircraftExample')

% Get run IDs for most recent run
allIDs = Simulink.sdi.getAllRunIDs;
runID = allIDs(end);

% Get Run object
aircraftRun = Simulink.sdi.getRun(runID);

% Get signal IDs
signalID1 = aircraftRun.getSignalIDByIndex(1);
signalID2 = aircraftRun.getSignalIDByIndex(2);

if (aircraftRun.isValidSignalID(signalID1))
    % Change signal tolerance
    signal1 = Simulink.sdi.getSignal(signalID1);
    signal1.AbsTol = 0.1;
end

if (aircraftRun.isValidSignalID(signalID1) && aircraftRun.isValidSignalID(signalID2))
    % Compare signals
    sigDiff = Simulink.sdi.compareSignals(signalID1,signalID2);

    % Check whether signals match within tolerance
    match = sigDiff.match
end
match = logical
   0

Сравните инспектора данных моделирования выполнения программно

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

Сгенерируйте выполнения данных моделирования

Моделируйте модель с различными значениями Desired relative slip, чтобы создать выполнения данных моделирования, чтобы анализировать с Инспектором Данных моделирования программируемый интерфейс.

% Open model
load_system('ex_sldemo_absbrake')

% Set the desired slip ratio to 0.24 and simulate
set_param('ex_sldemo_absbrake/Desired relative slip','Value','0.24')
sim('ex_sldemo_absbrake');

% Change the desired slip ratio to 0.25 and simulate
set_param('ex_sldemo_absbrake/Desired relative slip','Value','0.25')
sim('ex_sldemo_absbrake');

Сравните выполнения с глобальным допуском

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

% Get run IDs for last two runs
runIDs = Simulink.sdi.getAllRunIDs;
runID1 = runIDs(end - 1);
runID2 = runIDs(end);

% Compare runs
runResult = Simulink.sdi.compareRuns(runID1,runID2,'reltol',0.2,'timetol',0.5);

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

Используйте объект Simulink.sdi.DiffRunResult, который вы создали на предыдущем шаге с Simulink.sdi.compareRuns, чтобы получить доступ к данным для результата сигнала Ww построить его в фигуре.

% Plot the |Ww| signal difference
signalResult_Ww = runResult.getResultByIndex(1);
figure(1)
plot(signalResult_Ww.Diff)

Анализируйте данные моделирования с допусками сигнала

Можно изменить значения допуска на основе сигнала сигналом, чтобы оценить эффект изменения параметра модели. Этот пример использует модель slexAircraftExample и Инспектора Данных моделирования, чтобы оценить эффект изменения временной константы для фильтра нижних частот после входа управления.

Настройка

Загрузите модель и отметьте q, rad/sec и сигналы alpha, rad для журналирования. Затем моделируйте модель, чтобы создать базовое выполнение.

% Load example model
load_system('slexAircraftExample')

% Mark the q, rad/sec and alpha, rad signals for logging
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',3,'on')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',4,'on')

% Simulate system
sim('slexAircraftExample')

Измените параметр модели

Измените параметр модели Ts в рабочем пространстве модели, чтобы изменить временную константу входного фильтра нижних частот.

% Change input filter time constant
modelWorkspace = get_param('slexAircraftExample','modelworkspace');
modelWorkspace.assignin('Ts',1)

% Simulate again
sim('slexAircraftExample')

Сравните выполнения и осмотрите результаты

Используйте функцию Simulink.sdi.compareRuns, чтобы сравнить данные из симуляций. Затем осмотрите свойство match результата сигнала видеть, находились ли сигналы в пределах допуска по умолчанию 0.

% Get run data
runIDs = Simulink.sdi.getAllRunIDs;
runID1 = runIDs(end - 1);
runID2 = runIDs(end);

% Compare runs
diffRun1 = Simulink.sdi.compareRuns(runID1,runID2);

% Get signal result
sig1Result1 = diffRun1.getResultByIndex(1);
sig2Result1 = diffRun1.getResultByIndex(2);

% Check whether signals matched
sig1Result1.Match
ans = logical
   0

sig2Result1.Match
ans = logical
   0

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

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

% Get signal object for sigID1
run1 = Simulink.sdi.getRun(runID1);
sigID1 = run1.getSignalIDByIndex(1);
sigID2 = run1.getSignalIDByIndex(2);

sig1 = Simulink.sdi.getSignal(sigID1);
sig2 = Simulink.sdi.getSignal(sigID2);

% Set tolerances for q, rad/sec
sig1.AbsTol = 0.1;
sig1.TimeTol = 0.6;

% Set tolerances for alpha, rad
sig2.AbsTol = 0.2;
sig2.TimeTol = 0.8;

% Run the comparison again
diffRun2 = Simulink.sdi.compareRuns(runID1,runID2);
sig1Result2 = diffRun2.getResultByIndex(1);
sig2Result2 = diffRun2.getResultByIndex(2);

% Check the result
sig1Result2.Match
ans = logical
   1

sig2Result2.Match
ans = logical
   1

Сгенерируйте инспектора данных моделирования отчет программно

Этот пример показывает, как создать отчеты с помощью Инспектора Данных моделирования программируемый интерфейс. Можно создать отчет для нанесенных на график сигналов в Осмотреть панели или для данных о сравнении в Сравнить панели. Этот пример сначала генерирует данные путем симуляции модели, затем показывает, как создать отчет Inspect Signals. Чтобы запустить пример точно как показано, гарантируйте, что Инспектор Данных моделирования репозиторий запускает пустой с функции Simulink.sdi.clear.

Сгенерируйте данные

Этот пример генерирует данные с помощью модели ex_sldemo_absbrake с двумя различными желаемыми отношениями промаха.

% Ensure Simulation Data Inspector is empty
Simulink.sdi.clear

% Open model
load_system('ex_sldemo_absbrake')

% Set slip ratio and simulate model
set_param('ex_sldemo_absbrake/Desired relative slip','Value','0.24')
sim('ex_sldemo_absbrake')
ans = 
  Simulink.SimulationOutput:

     sldemo_absbrake_output: [1x1 Simulink.SimulationData.Dataset] 

         SimulationMetadata: [1x1 Simulink.SimulationMetadata] 
               ErrorMessage: [0x0 char] 

% Set new slip ratio and simulate model again
set_param('ex_sldemo_absbrake/Desired relative slip','Value','0.25')
sim('ex_sldemo_absbrake')
ans = 
  Simulink.SimulationOutput:

     sldemo_absbrake_output: [1x1 Simulink.SimulationData.Dataset] 

         SimulationMetadata: [1x1 Simulink.SimulationMetadata] 
               ErrorMessage: [0x0 char] 

Постройте сигналы в осмотреть панели

Отчет Inspect Signals включает в себя все сигналы, построенные в графической области просмотра Осмотреть панели и всех отображенных метаданных для нанесенных на график сигналов.

% Get Simulink.sdi.Run objects
runIDs = Simulink.sdi.getAllRunIDs;
runID1 = runIDs(end-1);
runID2 = runIDs(end);

run1 = Simulink.sdi.getRun(runID1);
run2 = Simulink.sdi.getRun(runID2);

% Get Simulink.sdi.Signal objects for slp signal
run1_slp = run1.getSignalByIndex(4);
run2_slp = run2.getSignalByIndex(4);

% Plot slp signals
run1_slp.plotOnSubPlot(1, 1, true)
run2_slp.plotOnSubPlot(1, 1, true)

Создайте отчет сигналов, нанесенных на график в, осматривают панель

Можно включать больше данных в отчет путем добавления большего количества столбцов с помощью Инспектора Данных моделирования пользовательский интерфейс, или можно указать информацию, вы хотите в отчете программно с Парами "имя-значение" и классом перечисления Simulink.sdi.SignalMetaData. Этот пример показывает, как задать данные в отчете программно.

% Specify report parameters
reportType = 'Inspect Signals';
reportName = 'Data_Report.html';


signalMetadata = [Simulink.sdi.SignalMetaData.Run, ...
    Simulink.sdi.SignalMetaData.Line, ... 
    Simulink.sdi.SignalMetaData.BlockName, ...
    Simulink.sdi.SignalMetaData.SignalName];

Simulink.sdi.report('ReportToCreate', reportType, 'ReportOutputFile', ...
    reportName, 'ColumnsToReport', signalMetadata);

Сохраните и восстановите набор регистрируемых сигналов

Этот пример показывает возможность использования объекта Simulink.HMI.InstrumentedSignals сохранить набор регистрируемых сигналов восстановить после выполнения симуляции с различным набором сигналов.

Модель загрузки и сохраняет начальную настройку

Загрузите модель sldemo_fuelsys и сохраните начальный набор регистрируемых сигналов.

% Load model
load_system sldemo_fuelsys

% Get Simulink.HMI.InstrumentedSignals object
initSigs = get_param('sldemo_fuelsys', 'InstrumentedSignals');

% Save logging configuration to file for future use
save initial_instSigs.mat initSigs

Удалите все значки журналирования

Возвратитесь к базовой линии никаких регистрируемых сигналов, таким образом, можно легко выбрать различную настройку сигналов регистрировать.

% Clear all logging signals
set_param('sldemo_fuelsys', 'InstrumentedSignals', [])

Восстановите сохраненную настройку журналирования

После работы с различным набором регистрируемых сигналов можно легко восстановить сохраненную настройку с объектом Simulink.HMI.InstrumentedSignals.

% Load the saved configuration
load initial_instSigs.mat

% Restore logging configuration
set_param('sldemo_fuelsys', 'InstrumentedSignals', initSigs)

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

Похожие темы