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

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

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

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

Создайте запуск и просмотрите данные

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

Создайте данные для запуска

Создайте timeseries объекты содержать данные для синуса сигнализируют и сигнал косинуса. Дайте каждый timeseries возразите описательному имени.

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

Создайте запуск и добавьте данные

Используйте Simulink.sdi.view функционируйте, чтобы открыть Инспектора Данных моделирования.

Simulink.sdi.view

Чтобы импортировать данные в Инспектора Данных моделирования из рабочей области, создайте Simulink.sdi.Run объект с помощью Simulink.sdi.Run.create функция. Добавьте информацию о запуске к его метаданным с помощью Name и Description свойства Run объект.

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

Используйте add функция, чтобы добавить данные вы создали в рабочей области к пустому запуску.

add(sinusoidsRun,'vars',sine_ts,cos_ts);

Отобразите данные на графике в инспекторе данных моделирования

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

sine_sig = getSignalByIndex(sinusoidsRun,1);
sine_sig.LineColor = [0 0 1];
sine_sig.LineDashed = '-.';

cos_sig = sinusoidsRun.getSignalByIndex(2);
cos_sig.LineColor = [0 1 0];
cos_sig.LineDashed = '--';

Используйте Simulink.sdi.setSubPlotLayout функция, чтобы сконфигурировать 2- 1 размещение подграфика в Инспекторе Данных моделирования область графического вывода. Затем используйте plotOnSubplot функционируйте, чтобы построить сигнал синуса на главном подграфике и сигнал косинуса на более низком подграфике.

Simulink.sdi.setSubPlotLayout(2,1);

plotOnSubPlot(sine_sig,1,1,true);
plotOnSubPlot(cos_sig,2,1,true);

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

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

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

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

Этот пример использует slexAircraftExample модель, чтобы продемонстрировать, как сравнить сигналы ввода и вывода системы управления.

Сконфигурируйте и симулируйте модель

slexAircraftExample модель не делает данных логов. Загрузите модель и отметьте сигналы ввода и вывода для логгирования.

load_system('slexAircraftExample')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Pilot',1,'on')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',4,'on')

Симулируйте модель. Данные для регистрируемых сигналов регистрируют Инспектору Данных моделирования и к рабочей области.

out = sim('slexAircraftExample');

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

Используйте Инспектора Данных моделирования программируемый интерфейс, чтобы получить доступ к данным. Simulink.sdi.Run.getLatest функция возвращает последний раз созданный запуск в Инспекторе Данных моделирования репозиторий. Используйте getSignalIDByIndex функционируйте, чтобы получить доступ к идентификаторам сигнала для регистрируемых сигналов.

aircraftRun = Simulink.sdi.Run.getLatest;

signalID1 = getSignalIDByIndex(aircraftRun,1);
signalID2 = getSignalIDByIndex(aircraftRun,2);

Задайте значения допуска

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

signal1 = Simulink.sdi.getSignal(signalID1);
signal1.AbsTol = 0.1;

Сравните сигналы

Используйте Simulink.sdi.compareSignals функция, чтобы сравнить сигналы ввода и вывода. Этот пример использует isValidSignalID функция, чтобы проверить, что оба идентификатора сигнала все еще допустимы прежде, чем вызвать Simulink.sdi.compareSignals функция. ID сигнала становится недопустимым, когда сигнал удален от Инспектора Данных моделирования. После сравнения проверяйте состояние в Simulink.sdi.DiffSignalResult объект.

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

    match = sigDiff.Status
end
match = 
OutOfTolerance

Результат сравнения вне допуска. Можно использовать Simulink.sdi.view функция, чтобы смотреть и анализировать результаты сравнения.

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

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

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

Во-первых, создайте данные моделирования путем симуляции модели это данные логов. Этот пример использует ex_sldemo_absbrake модель и анализирует эффект изменения Desired relative slip значение.

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

load_system('ex_sldemo_absbrake')

set_param('ex_sldemo_absbrake/Desired relative slip','Value','0.24')
out_1 = sim('ex_sldemo_absbrake');

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

set_param('ex_sldemo_absbrake/Desired relative slip','Value','0.25')
out_2 = sim('ex_sldemo_absbrake');

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

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

runIDs = Simulink.sdi.getAllRunIDs;
runID1 = runIDs(end - 1);
runID2 = runIDs(end);

Теперь используйте Simulink.sdi.compareRuns функция, чтобы сравнить запуски. Задайте глобальное относительное значение допуска 0.2 и глобальное значение допуска времени 0.5.

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

Проверяйте Summary свойство возвращенного Simulink.sdi.DiffRunResult объект.

runResult.Summary
ans = struct with fields:
       OutOfTolerance: 2
      WithinTolerance: 2
            Unaligned: 0
        UnitsMismatch: 0
                Empty: 0
             Canceled: 0
          EmptySynced: 0
     DataTypeMismatch: 0
         TimeMismatch: 0
    StartStopMismatch: 0
          Unsupported: 0

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

Постройте результаты сравнения

Можно использовать графики анализировать результаты сравнения. Доступ к результату сигнала для Ww сигнал от DiffRunResult объект, который содержит результаты сравнения с помощью getResultByIndex функция. Проверяйте Status свойство Simulink.sdi.DiffSignalResult объект.

signalResult_Ww = getResultByIndex(runResult,1)
signalResult_Ww = 
  DiffSignalResult with properties:

           Status: OutOfTolerance
          AlignBy: 'Path'
        SignalID1: 43582
        SignalID2: 43628
    MaxDifference: 12.4878
            Sync1: [1x1 timeseries]
            Sync2: [1x1 timeseries]
             Diff: [1x1 timeseries]

signalResult_Ww.Status
ans = 
OutOfTolerance

Ww результаты сравнения сигнала вне допуска. Постройте сигнал различия анализировать результат.

figure(1)
plot(signalResult_Ww.Diff)

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

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

saveResult(runResult,'desiredSlipResults')

Файл MLDATX desiredSlipResults создается в рабочей директории. Используйте Simulink.sdi.load функционируйте или open функционируйте, чтобы просмотреть результаты в файле MLDATX.

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

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

Сконфигурируйте модель

Загрузите модель и отметьте представляющие интерес сигналы для логгирования. Этот пример данные логов для q и alpha сигналы.

load_system('slexAircraftExample')

Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',3,'on')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',4,'on')

Запустите симуляции

Запуститесь симуляции с различным lowpass фильтруют постоянные времени, чтобы сгенерировать результаты выдержать сравнение. slexAircraftExample модель хранит переменные, сопоставленные моделью в рабочем пространстве модели. Чтобы изменить значение постоянной времени, получите доступ к рабочему пространству модели и используйте assignin функция.

out1 = sim('slexAircraftExample');

modelWorkspace = get_param('slexAircraftExample','modelworkspace');
assignin(modelWorkspace,'Ts',1)

out2 = sim('slexAircraftExample');

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

Доступ к результатам симуляции с помощью Инспектора Данных моделирования программируемый интерфейс. Каждая симуляция создает запуск в Инспекторе Данных моделирования с уникальным ID запуска. Вы используете идентификаторы запуска, чтобы сравнить результаты симуляции.

runIDs = Simulink.sdi.getAllRunIDs;
runIDTs1 = runIDs(end-1);
runIDTs2 = runIDs(end);

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

diffRun1 = Simulink.sdi.compareRuns(runIDTs1,runIDTs2);

sig1Result1 = getResultByIndex(diffRun1,1);
sig2Result1 = getResultByIndex(diffRun1,2);

sig1Result1.Status
ans = 
OutOfTolerance
sig2Result1.Status
ans = 
OutOfTolerance

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

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

Задавать допуски, первый доступ Simulink.sdi.Signal объекты, которые соответствуют каждому сигналу в запусках, которые вы хотите сравнить.

run1 = Simulink.sdi.getRun(runIDTs1);
sigID1 = getSignalIDByIndex(run1,1);
sigID2 = getSignalIDByIndex(run1,2);

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

Проверяйте Name свойство идентифицировать каждый Signal объект.

sig1.Name
ans = 
'q, rad/sec'
sig2.Name
ans = 
'alpha, rad'

Задайте абсолютный допуск 0.1 и допуск времени 0.6 для q сигнал с помощью AbsTol и TimeTol свойства q предупредите об объекте в базовом запуске.

sig1.AbsTol = 0.1;
sig1.TimeTol = 0.6;

Задайте абсолютный допуск 0.2 и допуск времени 0.8 для alpha сигнал с помощью AbsTol и TimeTol свойства alpha предупредите об объекте в базовом запуске.

sig2.AbsTol = 0.2;
sig2.TimeTol = 0.8;

Сравните запуски снова и получите доступ к результатам.

diffRun2 = Simulink.sdi.compareRuns(runIDTs1,runIDTs2);
sig1Result2 = getResultByIndex(diffRun2,1);
sig2Result2 = getResultByIndex(diffRun2,2);

Проверяйте Status свойство каждого сигнала определить, находились ли результаты сравнения в пределах заданных допусков.

sig1Result2.Status
ans = 
WithinTolerance
sig2Result2.Status
ans = 
WithinTolerance

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

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

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

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

Simulink.sdi.clear

load_system('ex_sldemo_absbrake')

% Specify slip ratio and simulate model
set_param('ex_sldemo_absbrake/Desired relative slip','Value','0.24')
sim('ex_sldemo_absbrake');

% Specify new slip ratio and simulate model again
set_param('ex_sldemo_absbrake/Desired relative slip','Value','0.25')
sim('ex_sldemo_absbrake');

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

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

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

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

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

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


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

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

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

В этом примере показано, как использовать Simulink.HMI.InstrumentedSignals возразите, чтобы сохранить набор регистрируемых сигналов восстановить после выполнения симуляции с различной настройкой логгирования сигнала.

Сохраните начальную настройку логгирования сигнала

Этот пример использует sldemo_fuelsys модель, которая сконфигурирована, чтобы регистрировать 10 сигналов. Откройте модель и используйте get_param функция, чтобы получить Simulink.HMI.InstrumentedSignals объект, представляющий настройку логгирования сигнала.

load_system sldemo_fuelsys

initSigs = get_param('sldemo_fuelsys','InstrumentedSignals');

Можно сохранить начальную настройку логгирования сигнала в MAT-файле для дальнейшего использования.

save initial_instSigs.mat initSigs

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

Чтобы возвратиться к базовой линии никаких регистрируемых сигналов, можно использовать set_param функция, чтобы удалить все значки логгирования из сигналов в вашей модели. Затем можно легко выбрать различную настройку сигналов войти в систему Редактор Simulink™ или использование Simulink.sdi.markSignalForStreaming функция.

set_param('sldemo_fuelsys','InstrumentedSignals',[])

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

После работы с различным набором регистрируемых сигналов можно восстановить сохраненную настройку с помощью Simulink.HMI.InstrumentedSignals объект. Например, если вы сохраненный настройка логгирования к MAT-файлу, можно загрузить содержимое MAT-файла в рабочую область и использовать set_param функционируйте, чтобы восстановить ранее сохраненную настройку логгирования.

load initial_instSigs.mat

set_param('sldemo_fuelsys','InstrumentedSignals',initSigs)

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

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте