主要内容

金宝appSimulink.sdi.compareRuns

比较两次模拟运行中的数据

描述

例子

diffResult= 金宝appSimulink.sdi.compareRuns (runID1runID2比较对应的运行中的数据runID1而且runID2中返回的结果金宝appSimulink.sdi.DiffRunResult对象diffResult.比较使用仿真数据检查器比较算法。有关该算法的详细信息,请参见模拟数据检查器如何比较数据

例子

diffResult= 金宝appSimulink.sdi.compareRuns (runID1runID2名称,值比较对应的模拟运行runID1而且runID2使用一个或多个指定的选项名称,值对参数。有关选项如何影响比较的详细信息,请参见模拟数据检查器如何比较数据

例子

全部折叠

这个示例展示了如何比较模拟数据的运行,然后使用模拟数据检查器编程接口分析和保存结果。

创建模拟数据

首先,通过模拟记录数据的模型来创建模拟数据。本例使用ex_sldemo_absbrake建模并分析了改变的效果期望相对滑移价值。

加载模型。使用set_param函数指定相对滑移的初始值并模拟模型。

load_system (“ex_sldemo_absbrake”) set_param ('ex_sldemo_absbrake/期望的相对滑移'“价值”“0.24”) out_1 = sim(“ex_sldemo_absbrake”);

使用set_param函数为相对滑移指定不同的值并再次模拟模型。

set_param ('ex_sldemo_absbrake/期望的相对滑移'“价值”“0.25”) out_2 = sim(“ex_sldemo_absbrake”);

使用全局公差值比较运行

首先,使用金宝appSimulink.sdi.getAllRunIDs函数获取与最后两次模拟运行相对应的运行id。

runIDs = 金宝appSimulink.sdi.getAllRunIDs;runID1 = runid (end - 1);runID2 = runIDs(end);

现在,使用金宝appSimulink.sdi.compareRuns函数来比较运行情况。指定的全局相对公差值0.2的全局时间容忍值0.5

runResult = 金宝appSimulink.sdi.compareRuns(runID1,runID2,“reltol”, 0.2,“timetol”, 0.5);

检查总结返回者的财产金宝appSimulink.sdi.DiffRunResult对象。

runResult。总结
ans =带字段的结构:OutOfTolerance: 2 withtolerance: 2 Unaligned: 0 UnitsMismatch: 0 Empty: 0 cancelled: 0 EmptySynced: 0 DataTypeMismatch: 0 TimeMismatch: 0 StartStopMismatch: 0 Uns金宝appupported: 0

两次信号比较在公差范围内,两次信号比较超出公差范围。

地块对比结果

您可以使用图表来分析比较结果。控件的信号结果Ww信号来自DiffRunResult对象,该对象包含使用getResultByIndex函数。检查状态的属性金宝appSimulink.sdi.DiffSignalResult对象。

signalResult_Ww = getResultByIndex(runResult,1)
signalResult_Ww = DiffSignalResult,属性:Name: 'yout. 'Ww' Status: OutOfTolerance AlignBy: 'Path' SignalID1: 144229 SignalID2: 144275 MaxDifference: 12.4878 Sync1: [1x1 timeseries] Sync2: [1x1 timeseries] Diff: [1x1 timeseries]
signalResult_Ww。状态
ans = out toftolerance

Ww信号比较结果超差。绘制差分信号,分析结果。

图(1)情节(signalResult_Ww.Diff)

保存比较结果

您可以将比较结果保存到MLDATX文件中,以便以后分析或与同事共享。使用saveResult函数保存运行数据和比较结果。

saveResult (runResult“desiredSlipResults”

MLDATX文件desiredSlipResults在工作目录中创建。使用金宝appSimulink.sdi.load函数或开放函数查看MLDATX文件中的结果。

使用“模拟数据检查器”编程接口,可以指定要在比较中使用的信号容差值。本例使用slexAircraftExample模型和仿真数据检查器,以评估在控制输入之后改变低通滤波器的时间常数的效果。

配置模型

加载模型并标记感兴趣的信号以进行日志记录。的日志数据而且α信号。

load_system (“slexAircraftExample”) 金宝appSimulink.sdi.markSignalForStreaming ('slexAircraftExample/飞机动力学模型'3,“上”) 金宝appSimulink.sdi.markSignalForStreaming ('slexAircraftExample/飞机动力学模型'4“上”

运行模拟

使用不同的低通滤波器时间常数运行模拟以生成结果进行比较。的slexAircraftExample模型在模型工作区中存储与模型相关的变量。要修改时间常数值,请访问模型工作区并使用assignin函数。

Out1 = sim(“slexAircraftExample”);modelWorkspace = get_param(“slexAircraftExample”“modelworkspace”);assignin (modelWorkspace“t”,1) out2 = sim(“slexAircraftExample”);

访问和比较仿真结果

使用“仿真数据检查器”编程接口访问仿真结果。每个模拟在模拟数据检查器中创建一个具有唯一运行ID的运行。您可以使用运行id来比较模拟结果。

runIDs = 金宝appSimulink.sdi.getAllRunIDs;runIDTs1 = runIDs(end-1);runIDTs2 = runIDs(end);

使用金宝appSimulink.sdi.compareRuns函数比较来自模拟的数据。然后检查状态属性,以查看信号是否落在默认容差为0的范围内。

diffRun1 = 金宝appSimulink.sdi.compareRuns(runIDTs1,runIDTs2);sig1Result1 = getResultByIndex(diffRun1,1);sig2Result1 = getResultByIndex(diffRun1,2);sig1Result1。状态
ans = out toftolerance
sig2Result1。状态
ans = out toftolerance

比较运行与信号公差

默认情况下,使用信号0对于所有公差值,因此当信号不相同时,比较返回超出公差的结果。为了进一步分析时间常数变化的影响,指定信号的容差值。属性的属性指定编程比较的公差金宝appSimulink.sdi.Signal您比较的运行中的对象。比较使用为基线指定的公差信号对象。这个例子指定了时间公差和绝对公差的组合。

要指定公差,首先访问金宝appSimulink.sdi.Signal与要比较的运行中的每个信号对应的对象。

run1 = 金宝appSimulink.sdi.getRun(runIDTs1);sigID1 = getSignalIDByIndex(run1,1);sigID2 = getSignalIDByIndex(run1,2);sig1 = 金宝appSimulink.sdi.getSignal(sigID1);sig2 = 金宝appSimulink.sdi.getSignal(sigID2);

检查的名字属性来标识每个信号对象。

sig1。的名字
Ans = 'q, rad/sec'
sig2。的名字
Ans = 'alpha, rad'

指定的绝对公差0.1和时间的容忍度0.6信号使用AbsTol而且TimeTol的属性基线运行中的信号对象。

sig1。AbsTol = 0.1;sig1。时间Tol = 0.6;

指定的绝对公差0.2和时间的容忍度0.8α信号使用AbsTol而且TimeTol的属性α基线运行中的信号对象。

sig2。AbsTol = 0.2;sig2。时间Tol = 0.8;

再次比较运行并访问结果。

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

检查状态属性,以确定比较结果是否落在规定的公差范围内。

sig1Result2。状态
不宽容
sig2Result2。状态
不宽容

您可以使用金宝appSimulink.sdi.compareRuns函数比较信号数据和元数据,包括数据类型和开始和停止时间。单个比较可以检查一个或多个元数据片段中的不匹配。检查信号元数据中的不匹配时,总结的属性金宝appSimulink.sdi.DiffRunResult对象可能与基本比较不同,因为状态属性。金宝appSimulink.sdi.DiffSignalResult对象可以指示元数据不匹配。属性配置比较金宝appSimulink.sdi.compareRuns函数用于导入的数据和从模拟中记录的数据。

此示例配置了从工作空间数据创建的运行的比较,以显示如何总结DiffSignalResult对象可以提供有关信号不匹配的特定信息。

创建工作区数据

金宝appSimulink.sdi.compareRuns函数比较时间序列数据。控件创建要用作基线信号的正弦波数据timeseries格式。给timeseries这个名字波数据

时间= 0:0.1:20;Sig1vals = sin(2*pi/5*time);Sig1_ts =时间序列(sig1vals,时间);sig1_ts。Name =“波数据”

创建第二个正弦波与基线信号进行比较。使用稍微不同的时间矢量并衰减信号,这样两个信号就不相同了。类型的信号数据转换为数据类型。也给这个命名timeseries对象波数据.仿真数据检查器比较算法将对齐这些信号,以便使用名称进行比较。

Time2 = 0:0.1:22;Sig2vals = single(0.98*sin(2*pi/5*time2));Sig2_ts =时间序列(sig2vals,time2);sig2_ts。Name =“波数据”

在模拟数据检查器中创建和比较运行

金宝appSimulink.sdi.compareRuns函数中包含的数据进行比较金宝appSimulink.sdi.Run对象。使用金宝appSimulink.sdi.createRun函数在模拟数据检查器中为数据创建运行。的金宝appSimulink.sdi.createRun函数返回每次创建的运行的运行ID。

runID1 = 金宝appSimulink.sdi.createRun(“基线运行”“var”, sig1_ts);runID2 = 金宝appSimulink.sdi.createRun(“比较运行”“var”, sig2_ts);

您可以使用金宝appSimulink.sdi.compareRuns函数来比较运行情况。比较算法将信号数据转换为数据类型,并在计算差分信号之前同步信号数据。

basic_DRR = 金宝appSimulink.sdi.compareRuns(runID1,runID2);

检查总结返回者的财产金宝appSimulink.sdi.DiffRunResult对象查看比较的结果。

basic_DRR。总结
ans =带字段的结构:OutOfTolerance: 1 withtolerance: 0 Unaligned: 0 UnitsMismatch: 0 Empty: 0 cancelled: 0 EmptySynced: 0 DataTypeMismatch: 0 TimeMismatch: 0 StartStopMismatch: 0 Uns金宝appupported: 0

信号之间的差异超出了容忍范围。

比较运行并检查数据类型匹配

根据您的系统需求,您可能希望比较的信号的数据类型匹配。您可以使用金宝appSimulink.sdi.compareRuns函数配置比较算法,以检查和报告数据类型不匹配。

dataType_DRR = 金宝appSimulink.sdi.compareRuns(runID1,runID2,“数据类型”“MustMatch”);dataType_DRR。总结
ans =带字段的结构:OutOfTolerance: 0 withtolerance: 0 Unaligned: 0 UnitsMismatch: 0 Empty: 0 cancelled: 0 EmptySynced: 0 DataTypeMismatch: 1 TimeMismatch: 0 StartStopMismatch: 0 Uns金宝appupported: 0

信号比较的结果是DataTypeMismatch因为基线信号的数据是数据类型,而信号与基线比较的数据为数据类型。

比较运行并检查开始和停止时间是否匹配

您可以使用金宝appSimulink.sdi.compareRuns函数配置比较算法,以检查对齐的信号是否具有相同的开始和停止时间。

startStop_DRR = 金宝appSimulink.sdi.compareRuns(runID1,runID2,“起止”“MustMatch”);startStop_DRR。总结
ans =带字段的结构:OutOfTolerance: 0 withtolerance: 0 Unaligned: 0 UnitsMismatch: 0 Empty: 0 cancelled: 0 EmptySynced: 0 DataTypeMismatch: 0 TimeMismatch: 0 StartStopMismatch: 1 Uns金宝appupported: 0

信号比较结果为StartStopMismatch因为在工作空间中创建的信号具有不同的停止时间。

这个例子展示了如何使用您想要的标准来比较运行,以便在运行之间对齐信号。

生成模拟数据进行比较

首先加载slexAircraftExample系统和标记感兴趣的测井信号。

load_system (“slexAircraftExample”) 金宝appSimulink.sdi.markSignalForStreaming (“slexAircraftExample /试点”, 1“上”) 金宝appSimulink.sdi.markSignalForStreaming ('slexAircraftExample/飞机动力学模型'...4,“上”

的两个模拟slexAircraftExample用变量的不同值进行建模Ts.使用get_param控件的模型工作区slexAircraftExample模型。然后,为变量赋值并运行第一个模拟。

modelWorkspace = get_param(“slexAircraftExample”“modelworkspace”);modelWorkspace.assignin (“t”, 0.1);Out_1 = sim(“slexAircraftExample”);

更改的值Ts然后进行第二次模拟。然后,

modelWorkspace.assignin (“t”, 0.2);Out_2 = sim(“slexAircraftExample”);

使用金宝appSimulink.sdi.getAllRunIDs函数访问模拟时创建的两个模拟运行的运行idslexAircraftExample模型。

runIDs = 金宝appSimulink.sdi.getAllRunIDs;runID1 = runid (end-1);runID2 = runIDs(end);

定义比较的对齐标准

在运行比较之前,定义您希望模拟数据检查器如何在运行之间对齐信号。这个例子根据信号的名称,然后是它们的块路径,然后是它们的Simulink标识符对齐信号。金宝app

alignMethods = [金宝appSimulink.sdi.AlignType.]信号的名字金宝appSimulink.sdi.AlignType.BlockPath金宝appSimulink.sdi.AlignType.SID];

将运行与指定的对齐标准进行比较

使用指定的对齐标准比较两次运行中的模拟数据。该比较使用了一个小的时间公差,以解释求解器使用的步长差异对方波输入转换的影响。

diffResults = 金宝appSimulink.sdi.compareRuns(runID1,runID2,“对齐”alignMethods,...“timetol”, 0.005);

检查对准信号的比较结果

您可以使用getResultByIndex方法访问所比较的运行中对齐信号的比较结果。您可以使用的属性金宝appSimulink.sdi.DiffRunResult对象来设置循环检查状态每个人的财产金宝appSimulink.sdi.DiffSignalResult对象。

numcomparison = diffResults.count;k = 1: numcomparison resultAtIdx = getResultByIndex(diffResults,k);sigID1 = resultAtIdx.signalID1;sigID2 = resultAtIdx.signalID2;sig1 = 金宝appSimulink.sdi.getSignal(sigID1);sig2 = 金宝appSimulink.sdi.getSignal(sigID2);displayStr ='信号%s和%s: %s \n';流(displayStr sig1.Name、sig2.Name resultAtIdx.Status);结束
信号alpha, rad和alpha, rad:不耐受信号Stick和Stick:不耐受

输入参数

全部折叠

比较中基线运行的数字标识符,指定为与模拟数据检查器中的运行相对应的运行ID。模拟数据检查器在创建运行时分配运行id。方法可以获取运行的运行IDID的属性金宝appSimulink.sdi.Run对象,金宝appSimulink.sdi.getAllRunIDs函数,或金宝appSimulink.sdi.getRunIDByIndex函数。

要比较的运行的数字标识符,指定为与模拟数据检查器中的运行相对应的运行ID。模拟数据检查器在创建运行时分配运行id。方法可以获取运行的运行IDID的属性金宝appSimulink.sdi.Run对象,金宝appSimulink.sdi.getAllRunIDs函数,或金宝appSimulink.sdi.getRunIDByIndex函数。

名称-值对参数

的可选逗号分隔对名称,值参数。的名字参数名称和价值对应的值。的名字必须出现在引号内。您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:abstol, x,“对齐”,alignOpts

信号对齐选项,指定为由逗号分隔的对组成“对齐”一个字符串数组或者字符向量数组。

数组,指定用于对来自正在比较的运行的信号的对齐选项。模拟数据检查器首先通过数组中的第一个元素对齐信号,然后通过数组中的第二个元素,以此类推。有关更多信息,请参见信号对齐

价值 对齐的
金宝appSimulink.sdi.AlignType.BlockPath 信号源块的路径
金宝appSimulink.sdi.AlignType.SID 金宝app®标识符金宝app动态仿真模块标识符
金宝appSimulink.sdi.AlignType.SignalName 信号的名字
金宝appSimulink.sdi.AlignType.DataSource 变量在MATLAB中的路径®工作空间

例子:[金宝appSimulink.sdi.AlignType.SignalName, Simulink.sdi.AlignType.SID]先按名称,再按SID指定信号对齐。

运行比较中用于所有信号的正值全局绝对容差,指定为由逗号分隔的对组成“AbsTol”一个标量。有关在比较中如何使用公差的更多信息,请参见公差规范

例子:0.5

数据类型:

运行比较中用于所有信号的正值全局相对容差,指定为由逗号分隔的对组成“RelTol”一个标量。相对公差表示为分数乘子。例如,0.1指定10%的公差。有关如何在模拟数据检查器中应用相对公差的详细信息,请参见公差规范

例子:0.1

数据类型:

运行比较中用于所有信号的正值全局时间容差,指定为由逗号分隔的对组成“TimeTol”一个标量。指定以秒为单位的时间公差。有关模拟数据检查器中公差的更多信息,请参见公差规范

例子:0.2

数据类型:

指定名称-值对“数据类型”、“MustMatch”当您希望比较对比较信号中的数据类型不匹配敏感时。指定此名称-值对时,算法会在同步和比较信号数据之前比较已对齐信号的数据类型。

金宝appSimulink.sdi.compareRuns函数不会比较对齐信号的数据类型,除非指定此名值对。比较算法可以比较不同数据类型的信号。

当信号数据类型不匹配时,状态的属性金宝appSimulink.sdi.DiffSignalResult对象的值DataTypeMismatch

如果指定数据类型必须匹配,并将比较配置为在第一次不匹配时停止,则数据类型不匹配将停止比较。停止比较可能无法计算所有信号的结果。

指定名称-值对“时间”、“MustMatch”当你希望比较对比较信号的时间向量中的不匹配敏感时。当指定此名称-值对时,算法会在同步和比较信号数据之前比较已对齐信号的时间向量。

比较对信号时间向量的差异不敏感,除非指定此名称-值对。对于对时间向量的差异不敏感的比较,比较算法在比较之前同步信号。有关同步工作方式的详细信息,请参见模拟数据检查器如何比较数据

当信号的时间向量不匹配时状态的属性金宝appSimulink.sdi.DiffSignalResult对象的值TimeMismatch

如果指定时间向量必须匹配,并将比较配置为在第一次不匹配时停止,则时间向量不匹配将停止比较。停止比较可能无法计算所有信号的结果。

指定名称-值对“起止”、“MustMatch”当您希望比较对信号开始和停止时间中的不匹配敏感时。指定此名称-值对时,算法在同步和比较信号数据之前比较对齐信号的开始和停止时间。

当开始时间和停止时间不匹配时,将状态的属性金宝appSimulink.sdi.DiffSignalResult对象的值StartStopMismatch

如果指定开始和停止时间必须匹配,并将比较配置为在第一次不匹配时停止,则开始或停止时间不匹配将停止比较。停止比较可能无法计算所有信号的结果。

比较是否停止,而不比较第一个检测到的不匹配上的剩余信号,指定为由逗号分隔的对组成“StopOnFirstMismatch”而且“元数据”“任何”.停止比较可能无法计算所有信号的结果,并且可能更快地返回不匹配的结果。

  • 元数据—对齐信号的元数据不匹配会导致比较停止。元数据比较发生在比较信号数据之前。

    仿真数据检查器总是对齐信号并比较信号单元。当您将比较配置为在第一次不匹配时停止时,未对齐的信号或不匹配的单元总是会导致比较停止。您可以指定额外的名称-值对来配置比较,以检查和停止额外元数据(如信号数据类型、开始和停止时间以及时间向量)的第一次不匹配。

  • 任何—对对齐信号的元数据或信号数据不匹配会导致比较停止。

输出参数

全部折叠

比较结果,返回为金宝appSimulink.sdi.DiffRunResult对象。

在R2011b中引入