Сравните данные в двух запусках симуляции
сравнивает данные в запусках, которые соответствуют diffResult
= Simulink.sdi.compareRuns(runID1
,runID2
)runID1
и runID2
и возвращает результат в Simulink.sdi.DiffRunResult
diffResult объекта
. Для сравнения используется алгоритм сравнения Данные Моделирования Inspector. Для получения дополнительной информации об алгоритме см. Раздел «Как Данные моделирования Inspector сравнивает Данные».
сравнивает запуски симуляции, которые соответствуют diffResult
= Simulink.sdi.compareRuns(runID1
,runID2
,Name,Value
)runID1
и runID2
использование опций, заданных одним или несколькими Name,Value
аргументы в виде пар. Дополнительные сведения о том, как опции могут повлиять на сравнение, см. в разделе Как Данных моделирования Inspector сравнивает данные.
Можно задать значения глобальных допусков, которые будут использоваться при сравнении двух запусков симуляции. Значения глобального допуска применяются ко всем сигналам в запуск. В этом примере показано, как задать значения глобальных допусков для сравнения запусков и как анализировать и сохранить результаты сравнения.
Во-первых, загрузите файл сеанса, содержащий данные для сравнения. Файл сеанса содержит данные для четырех симуляций продольного контроллера самолета. В этом примере сравниваются данные из двух запусков, которые используют различные временные константы входного фильтра.
Simulink.sdi.load('AircraftExample.mldatx');
Для доступа к данным запуска для сравнения используйте 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: 0
WithinTolerance: 3
Unaligned: 0
UnitsMismatch: 0
Empty: 0
Canceled: 0
EmptySynced: 0
DataTypeMismatch: 0
TimeMismatch: 0
StartStopMismatch: 0
Unsupported: 0
Все три результата сравнения сигналов попали в заданный глобальный допуск.
Результаты сравнения можно сохранить в файле MLDATX с помощью saveResult
функция.
saveResult(runResult,'InputFilterComparison');
Можно программно задать значения допуска сигнала для использования в сравнениях, выполненных с помощью Данных моделирования Inspector. В этом примере вы сравниваете данные, собранные путем симуляции модели продольной системы управления рейсом самолета. Каждая симуляция использует разное значение для временной константы входного фильтра и регистрирует входные и выходные сигналы. Вы анализируете эффект изменения постоянной времени путем сравнения результатов с помощью Данные Моделирования Inspector и допусков сигнала.
Во-первых, загрузите файл сеанса, который содержит данные моделирования.
Simulink.sdi.load('AircraftExample.mldatx');
Файл сеанса содержит четыре запусков. В этом примере вы сравниваете данные первых двух запусков в файле. Доступ к Simulink.sdi.Run
объекты для первых двух запусков, загруженные из файла.
runIDs = Simulink.sdi.getAllRunIDs; runIDTs1 = runIDs(end-3); runIDTs2 = runIDs(end-2);
Теперь сравните эти два запусков, не задавая никаких допусков.
noTolDiffResult = Simulink.sdi.compareRuns(runIDTs1,runIDTs2);
Используйте getResultByIndex
функция для доступа к результатам сравнения для q
и alpha
сигналы.
qResult = getResultByIndex(noTolDiffResult,1); alphaResult = getResultByIndex(noTolDiffResult,2);
Проверьте Status
из каждого результата сигнала, чтобы увидеть, попадает ли результат сравнения в наш вне допуска.
qResult.Status
ans = OutOfTolerance
alphaResult.Status
ans = OutOfTolerance
В сравнении использовалось значение 0
для всех допусков, поэтому OutOfTolerance
результат означает, что сигналы не идентичны.
Можно дополнительно проанализировать эффект постоянной времени, задав значения допуска для сигналов. Задайте допуски путем установки свойств для Simulink.sdi.Signal
объекты, которые соответствуют сравниваемым сигналам. В сравнениях используются допуски, заданные для базовых сигналов. Этот пример задает временным допуском и абсолютной погрешностью.
Чтобы задать допуск, сначала получите доступ к Signal
объекты из запуска опорной структуры.
runTs1 = Simulink.sdi.getRun(runIDTs1); qSig = getSignalsByName(runTs1,'q, rad/sec'); alphaSig = getSignalsByName(runTs1,'alpha, rad');
Задайте абсолютную погрешность 0.1
и временной допуск 0.6
для q
сигнал с использованием AbsTol
и TimeTol
свойства.
qSig.AbsTol = 0.1; qSig.TimeTol = 0.6;
Задайте абсолютную погрешность 0.2
и временной допуск 0.8
для alpha
сигнал.
alphaSig.AbsTol = 0.2; alphaSig.TimeTol = 0.8;
Сравните результаты еще раз. Получите доступ к результатам сравнения и проверьте Status
свойство для каждого сигнала.
tolDiffResult = Simulink.sdi.compareRuns(runIDTs1,runIDTs2); qResult2 = getResultByIndex(tolDiffResult,1); alphaResult2 = getResultByIndex(tolDiffResult,2); qResult2.Status
ans = WithinTolerance
alphaResult2.Status
ans = WithinTolerance
Можно использовать Simulink.sdi.compareRuns
функция для сравнения сигнальных данных и метаданных, включая тип данных и начало и времена остановки. Одно сравнение может проверить несоответствие в одной или нескольких частях метаданных. Когда вы проверяете на несоответствие в метаданных сигнала, Summary
свойство Simulink.sdi.DiffRunResult
объект может отличаться от базового сравнения, потому что Status
свойство для Simulink.sdi.DiffSignalResult
объект может указывать на несоответствие метаданных. Можно сконфигурировать сравнения с помощью Simulink.sdi.compareRuns
функция для импортированных данных и данных, записанных из симуляции.
Этот пример конфигурирует сравнение запусков, созданных из данных рабочей области, тремя способами, чтобы показать, как Summary
от DiffSignalResult
объект может предоставить определенную информацию о несоответствии сигналов.
Создание данных рабочей области
The Simulink.sdi.compareRuns
функция сравнивает данные временных рядов. Создайте данные для синусоиды, которая будет использоваться в качестве базового сигнала, используя timeseries
формат. Отдайте timeseries
имя Wave Data
.
time = 0:0.1:20;
sig1vals = sin(2*pi/5*time);
sig1_ts = timeseries(sig1vals,time);
sig1_ts.Name = 'Wave Data';
Создайте вторую синусоиду, чтобы сравнить с базовым сигналом. Используйте немного другой временной вектор и ослабьте сигнал, чтобы эти два сигнала не были идентичными. Приведите данные сигнала к single
тип данных. Также назовите это timeseries
Wave Data объекта
. Алгоритм сравнения Данных моделирования Inspector выравнивает эти сигналы для сравнения с использованием имени.
time2 = 0:0.1:22;
sig2vals = single(0.98*sin(2*pi/5*time2));
sig2_ts = timeseries(sig2vals,time2);
sig2_ts.Name = 'Wave Data';
Создайте и сравните Запуски в Данные моделирования Inspector
The Simulink.sdi.compareRuns
функция сравнивает данные, содержащиеся в Simulink.sdi.Run
объекты. Используйте Simulink.sdi.createRun
функция для создания запусков в Данные моделирования Inspector для данных. The Simulink.sdi.createRun
функция возвращает идентификатор запуска для каждого созданного запуска.
runID1 = Simulink.sdi.createRun('Baseline Run','vars',sig1_ts); runID2 = Simulink.sdi.createRun('Compare to Run','vars',sig2_ts);
Можно использовать Simulink.sdi.compareRuns
функция для сравнения запусков. Алгоритм сравнения преобразует данные сигнала в double
тип данных и синхронизирует данные сигнала перед вычислением сигнала различия.
basic_DRR = Simulink.sdi.compareRuns(runID1,runID2);
Проверьте Summary
свойство возвращенного Simulink.sdi.DiffRunResult
объект, чтобы увидеть результат сравнения.
basic_DRR.Summary
ans = struct with fields:
OutOfTolerance: 1
WithinTolerance: 0
Unaligned: 0
UnitsMismatch: 0
Empty: 0
Canceled: 0
EmptySynced: 0
DataTypeMismatch: 0
TimeMismatch: 0
StartStopMismatch: 0
Unsupported: 0
Различие между сигналами вне допуска.
Сравнение запусков и проверка соответствия типа данных
В зависимости от ваших системных требований, можно хотеть, чтобы типы данных для сигналов, которые вы сравниваете, совпадали. Можно использовать Simulink.sdi.compareRuns
функция, чтобы сконфигурировать алгоритм сравнения, чтобы проверить и сообщить о несоответствии типов данных.
dataType_DRR = Simulink.sdi.compareRuns(runID1,runID2,'DataType','MustMatch'); dataType_DRR.Summary
ans = struct with fields:
OutOfTolerance: 0
WithinTolerance: 0
Unaligned: 0
UnitsMismatch: 0
Empty: 0
Canceled: 0
EmptySynced: 0
DataTypeMismatch: 1
TimeMismatch: 0
StartStopMismatch: 0
Unsupported: 0
Результат сравнения сигналов теперь DataTypeMismatch
потому что данные для базового сигнала double
тип данных, в то время как данные для сигнала по сравнению с базовой линией single
тип данных.
Сравнение Запусков и проверки на начало и Время остановки соответствия
Можно использовать Simulink.sdi.compareRuns
функция, чтобы сконфигурировать алгоритм сравнения, чтобы проверить, имеют ли выровненные сигналы одинаковые начало и времена остановки.
startStop_DRR = Simulink.sdi.compareRuns(runID1,runID2,'StartStop','MustMatch'); startStop_DRR.Summary
ans = struct with fields:
OutOfTolerance: 0
WithinTolerance: 0
Unaligned: 0
UnitsMismatch: 0
Empty: 0
Canceled: 0
EmptySynced: 0
DataTypeMismatch: 0
TimeMismatch: 0
StartStopMismatch: 1
Unsupported: 0
Результат сравнения сигналов теперь StartStopMismatch
потому что сигналы, созданные в рабочей области, имеют разные времена остановки.
При сравнении запусков с помощью Данных моделирования Inspector можно задать критерии выравнивания, которые определяют, как сигналы соединяются друг с другом для сравнения. Этот пример сравнивает данные из симуляций модели системы продольного управления самолета. В симуляциях использовался вход квадратной волны. В первой симуляции использовалась временная константа входного фильтра 0.1s
и во второй симуляции использовалась временная константа входного фильтра 0.5s
.
Во-первых, загрузите данные моделирования из файла сеанса, который содержит данные для этого примера.
Simulink.sdi.load('AircraftExample.mldatx');
Файл сеанса содержит данные для четырех симуляций. В этом примере сравниваются данные первых двух запусков. Доступ к идентификаторам выполнения для первых двух запусков, загруженных из файла сеанса.
runIDs = Simulink.sdi.getAllRunIDs; runIDTs1 = runIDs(end-3); runIDTs2 = runIDs(end-2);
Перед началом сравнения задайте, как Данные моделирования Inspector должен выровнять сигналы между запусками. Этот пример выравнивает сигналы по их имени, затем по пути блока, а затем по идентификатору Simulink.
alignMethods = [Simulink.sdi.AlignType.SignalName Simulink.sdi.AlignType.BlockPath Simulink.sdi.AlignType.SID];
Сравните данные моделирования в два запусков с помощью заданных критериев выравнивания. Сравнение использует небольшой временной допуск, чтобы учесть эффект различий в размере шага, используемом решателем на переходе квадратного входа волны.
diffResults = Simulink.sdi.compareRuns(runIDTs1,runIDTs2,'align',alignMethods,... 'timetol',0.005);
Можно использовать getResultByIndex
функция для доступа к результатам сравнения для выровненных сигналов в запуски, которую вы сравнивали. Можно использовать Count
свойство Simulink.sdi.DiffRunResult
объект для настройки for
цикл, чтобы проверить Status
свойство для каждого Simulink.sdi.DiffSignalResult
объект.
numComparisons = diffResults.count; for k = 1:numComparisons resultAtIdx = getResultByIndex(diffResults,k); sigID1 = resultAtIdx.signalID1; sigID2 = resultAtIdx.signalID2; sig1 = Simulink.sdi.getSignal(sigID1); sig2 = Simulink.sdi.getSignal(sigID2); displayStr = 'Signals %s and %s: %s \n'; fprintf(displayStr,sig1.Name,sig2.Name,resultAtIdx.Status); end
Signals q, rad/sec and q, rad/sec: OutOfTolerance Signals alpha, rad and alpha, rad: OutOfTolerance Signals Stick and Stick: WithinTolerance
runID1
- Базовый идентификатор запускаЧисловой идентификатор для запуска базовой линии в сравнении, заданный как идентификатор запуска, который соответствует запуску в Данные моделирования Inspector. Инспектор Данных моделирования присваивает идентификаторы запуска при создании запусков. Вы можете получить идентификатор запуска для запуска, используя ID
свойство Simulink.sdi.Run
объект, Simulink.sdi.getAllRunIDs
функции, или Simulink.sdi.getRunIDByIndex
функция.
runID2
- Идентификатор для выполнения для сравненияЧисловой идентификатор сравниваемого запуска, заданный как идентификатор запуска, который соответствует запуску в Данные моделирования Inspector. Инспектор Данных моделирования присваивает идентификаторы запуска при создании запусков. Вы можете получить идентификатор запуска для запуска, используя ID
свойство Simulink.sdi.Run
объект, Simulink.sdi.getAllRunIDs
функции, или Simulink.sdi.getRunIDByIndex
функция.
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'abstol',x,'align',alignOpts
'Align'
- Опции выравнивания сигналаОпции выравнивания сигнала, заданные как разделенная разделенными запятой парами, состоящая из 'Align'
и строковые массивы или массив векторов символов.
Массив, задающий опции выравнивания для использования для сопряжения сигналов от сравниваемых запусков. Данные моделирования Inspector выравнивают сигналы сначала первым элементом в массиве, затем вторым элементом в массиве и так далее. Для получения дополнительной информации смотрите Выравнивание.
Значение | Выравнивает по |
---|---|
Simulink.sdi.AlignType.BlockPath | Путь к исходному блоку для сигнала |
Simulink.sdi.AlignType.SID | Simulink® Идентификаторы Simulink |
Simulink.sdi.AlignType.SignalName | Имя сигнала |
Simulink.sdi.AlignType.DataSource | Путь переменной в MATLAB® рабочая область |
Пример: [Simulink.sdi.AlignType.SignalName,Simulink.sdi.AlignType.SID]
задает выравнивание сигнала по имени, а затем по SID.
'AbsTol'
- Абсолютная погрешность для сравнения0
(по умолчанию) | скаляромПоложительная глобальная абсолютная погрешность, используемый для всех сигналов в сравнении запусков, заданный как разделенная разделенными запятой парами, состоящая из 'AbsTol'
и скаляром. Для получения дополнительной информации о том, как допуски используются при сравнении, см. «Спецификация допусков».
Пример: 0.5
Типы данных: double
'RelTol'
- Относительная погрешность для сравнения0
(по умолчанию) | скаляромПоложительная глобальная относительная погрешность, используемый для всех сигналов в сравнении запусков, заданный как разделенная разделенными запятой парами, состоящая из 'RelTol'
и скаляром. Относительная погрешность выражается как дробный множитель. Для примера, 0.1
задает 10-процентный допуск. Дополнительные сведения о том, как относительная погрешность применяется в Данные моделирования Inspector, см. в разделе Спецификации допуска.
Пример: 0.1
Типы данных: double
'TimeTol'
- Допуск по времени для сравнения0
(по умолчанию) | скаляромПоложительный глобальный временной допуск, используемый для всех сигналов в сравнении запуска, заданный как разделенная разделенными запятой парами, состоящая из 'TimeTol'
и скаляром. Задайте допуск по времени в единицах секунд. Дополнительные сведения о допусках в Данные моделирования Inspector см. в разделе Спецификации допусков.
Пример: 0.2
Типы данных: double
'DataType'
- Чувствительность сравнения к типам данных сигналов'MustMatch'
Задайте пару "имя-значение" 'DataType','MustMatch'
когда вы хотите, чтобы сравнение было чувствительным к несоответствиям типов данных в сравниваемых сигналах. Когда вы задаете эту пару "имя-значение", алгоритм сравнивает типы данных для выровненных сигналов перед синхронизацией и сравнением данных сигнала.
Simulink.sdi.compareRuns
функция не сравнивает типы данных выровненных сигналов, если вы не задаете эту пару "имя-значение". Алгоритм сравнения может сравнивать сигналы с различными типами данных.
Когда типы данных сигнала не совпадают, Status
свойство Simulink.sdi.DiffSignalResult
объекту для результата задано значение DataTypeMismatch
.
Когда вы задаете, что типы данных должны совпадать и конфигурировать сравнение, чтобы остановить первое несоответствие, несоответствие типов данных останавливает сравнение. Остановленное сравнение может не вычислить результаты для всех сигналов.
'Time'
- Чувствительность сравнения с временными векторами сигнала'MustMatch'
Задайте пару "имя-значение" 'Time','MustMatch'
когда вы хотите, чтобы сравнение было чувствительным к несоответствиям во временных векторах сравниваемых сигналов. Когда вы задаете эту пару "имя-значение", алгоритм сравнивает временные векторы выровненных сигналов перед синхронизацией и сравнением данных о сигнале.
Сравнения не чувствительны к различиям во временных векторах сигнала, если вы не задаете эту пару "имя-значение". Для сравнений, которые не чувствительны к различиям во временных векторах, алгоритм сравнения синхронизирует сигналы до сравнения. Для получения дополнительной информации о том, как работает синхронизация, смотрите Как Данные моделирования Inspector сравнивают Данные.
Когда временные векторы для сигналов не совпадают, Status
свойство Simulink.sdi.DiffSignalResult
объекту для результата задано значение TimeMismatch
.
Когда вы задаете, что временные векторы должны совпадать и конфигурировать сравнение, чтобы остановить первое несоответствие, несоответствие временных векторов останавливает сравнение. Остановленное сравнение может не вычислить результаты для всех сигналов.
'StartStop'
- Чувствительность сравнения к времени запуска и остановки сигнала'MustMatch'
Задайте пару "имя-значение" 'StartStop','MustMatch'
когда вы хотите, чтобы сравнение было чувствительным к несоответствиям во времени начала и остановки сигнала. Когда вы задаете эту пару "имя-значение", алгоритм сравнивает начало и времена остановки для выровненных сигналов перед синхронизацией и сравнением данных сигнала.
Когда время начала и времена остановки не совпадают, Status
свойство Simulink.sdi.DiffSignalResult
объекту для результата задано значение StartStopMismatch
.
Когда вы задаете, что время запуска и остановки должно совпадать и конфигурировать сравнение, чтобы остановить первое несоответствие, несоответствие времени начала или остановки останавливает сравнение. Остановленное сравнение может не вычислить результаты для всех сигналов.
'StopOnFirstMismatch'
- Останавливает ли сравнение при первом обнаруженном несоответствии'Metadata'
| 'Any'
Останавливается ли сравнение, не сравнивая оставшиеся сигналы при первом обнаруженном несоответствии, заданном как разделенная разделенными запятой парами, состоящая из 'StopOnFirstMismatch'
и 'Metadata'
или 'Any'
. Остановленное сравнение может не вычислить результаты для всех сигналов и может вернуть несоответствующий результат быстрее.
Metadata
- Несоответствие метаданных для выровненных сигналов приводит к остановке сравнения. Сравнение метаданных происходит перед сравнением данных о сигнале.
Данные моделирования Inspector всегда выравнивают сигналы и сравнивает модули сигнала. Когда вы конфигурируете сравнение, чтобы остановить первое несоответствие, несоответствующий сигнал или несоответствующие модули всегда заставляют сравнение останавливаться. Можно задать дополнительные пары имя-значение, чтобы сконфигурировать сравнение, чтобы проверить и остановить первое несоответствие для дополнительных метаданных, таких как тип данных сигнала, время запуска и остановки и временные векторы.
Any
- Несоответствие в метаданных или данных о сигнале для выровненных сигналов заставляет сравнение останавливаться.
diffResult
- Результаты сравненияSimulink.sdi.DiffRunResult
Результаты сравнения, возвращенные как Simulink.sdi.DiffRunResult
объект.
Инспектор Данных моделирования не поддерживает сравнение:
Сигналы типов данных int64
или uint64
.
Сигналы переменного размера.
getResultByIndex
| Simulink.sdi.compareSignals
| Simulink.sdi.DiffRunResult
| Simulink.sdi.DiffSignalResult
| Simulink.sdi.getRunCount
| Simulink.sdi.getRunIDByIndex
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.