主要内容

以编程方式检查和比较数据

您可以利用仿真数据检查器的能力从MATLAB®命令行,使用仿真数据检查器API。

模拟数据检查器组织运行和信号中的数据,为每个运行和信号分配一个唯一的数字标识。一些Simulation Data Inspector API函数使用运行和信号id来引用数据,而不是接受运行或信号本身作为输入。要访问工作区中的运行id,可以使用金宝appSimulink.sdi.getAllRunIDs金宝appsimulink.sdi.getrunidbyIndex..您可以通过金宝appSimulink.sdi.Run对象使用getSignalIDByIndex方法。

金宝appSimulink.sdi.Run金宝appSimulink.sdi.Signal类提供对数据的访问,并允许您查看和修改运行和信号元数据。您可以使用如下函数修改Simulation Data Inspector首选项金宝appsimulink.sdi.setsubplotlayout.金宝appSimulink.sdi.setRunNamingRule,金宝appSimulink.sdi.setMarkersOn.若要恢复模拟数据检查器的默认设置,请使用金宝appSimulink.sdi.clearPreferences

创建运行并查看数据

这个例子展示了如何创建一个运行,向它添加数据,然后在Simulation data Inspector中查看数据。

为运行创建数据

创建timeseries对象,以包含正弦信号和余弦信号的数据。给每个timeseries对象的描述性名称。

时间= linspace (0, 20100);sine_vals =罪(2 * 5π/ *时间);sine_ts = timeseries (sine_vals、时间);sine_ts。Name ='正弦,T = 5';cos_vals = cos(2 * pi / 8 *时间);cos_ts = timeereries(cos_vals,时间);cos_ts.name =.“余弦,T = 8”

创建运行和添加数据

使用金宝appSimulink.sdi.view函数以打开仿真数据检查器。

金宝appSimulink.sdi.view

要从工作区导入数据到Simulation data Inspector,请创建金宝appSimulink.sdi.Run对象使用金宝appSimulink.sdi.Run.create函数。使用run添加有关运行的信息的名字描述的属性运行对象。

sinusoidsRun = 金宝appSimulink.sdi.Run.create;sinusoidsRun。Name =正弦曲线的;sinusoidsRun。描述=“不同频率的正弦和余弦信号”

使用添加函数将在工作区中创建的数据添加到空运行中。

添加(sinusoidsRun“var”、sine_ts cos_ts);

在仿真数据检查器中绘制数据

使用getsignalbyIndex.函数访问金宝appSimulink.sdi.Signal包含信号数据的对象。你可以使用金宝appSimulink.sdi.Signal对象属性来指定信号的线条样式和颜色,并在仿真数据检查器中绘制它。指定LineColorLineDashed每个信号的属性。

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 =“——”

使用金宝appsimulink.sdi.setsubplotlayout.命令功能2-经过-1仿真数据检测器绘图区域中的子图布局。然后用来plotOnSubplot函数在上面的子图上绘制正弦信号,在下面的子图上绘制余弦信号。

金宝appSimulink.sdi.setSubPlotLayout (2, 1);plotOnSubPlot (sine_sig 1 1,真实);plotOnSubPlot (cos_sig 2 1,真实);

关闭模拟数据检查器并保存数据

当您完成了对绘制的信号数据的检查后,可以关闭Simulation data Inspector并将会话保存到一个MLDATX文件中。

金宝appSimulink.sdi.close (“sinusoids.mldatx”

在模拟运行中比较信号

本示例使用slexaircraftexample.模型来演示如何比较控制系统的输入和输出信号。

配置和模拟模型

slexaircraftexample.模型不记录数据。加载模型并标记输入和输出信号以进行日志记录。

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

模拟模型。记录的信号的数据记录到仿真数据检查器和工作空间。

= sim卡(“slexAircraftExample”);

仿真数据的访问

使用仿真数据检查器编程接口访问数据。的金宝appSimulink.sdi.Run.getLatest函数返回在Simulation Data Inspector存储库中最近创建的运行。使用getSignalIDByIndex命令,获取记录信号的信号id。

aircraftRun = 金宝appSimulink.sdi.Run.getLatest;signalID1 = getSignalIDByIndex (aircraftRun, 1);signalID2 = getSignalIDByIndex (aircraftRun 2);

指定公差值

您可以在日志中指定要在比较中使用的容忍值作为属性金宝appSimulink.sdi.Signal对象。使用金宝appSimulink.sdi.getSignal函数访问信号对象使用信号ID。

signal1 = 金宝appSimulink.sdi.getSignal (signalID1);signal1。AbsTol= 0.1;

比较信号

使用金宝appSimulink.sdi.compareSignals函数比较输入和输出信号。本示例使用isvalidsignalid函数来验证两个信号id在调用金宝appSimulink.sdi.compareSignals函数。当从模拟数据检查器删除信号时,信号ID无效。比较后,检查中的状态金宝appSimulink.sdi.DiffSignalResult对象。

如果(isValidSignalID(aircraftRun,signalID1) && isValidSignalID(aircraftRun,signalID2)) sigDiff = 金宝appsimulink .sd . comparesignals (signalID1,signalID2);= sigDiff相匹配。状态结束
匹配= OutOfTolerance

比较结果超出了容许范围。你可以使用金宝appSimulink.sdi.view功能检查和分析比较结果。

编程比较和分析仿真数据

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

创建模拟数据

首先,通过模拟一个记录数据的模型来创建模拟数据。本示例使用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(结束);

现在,使用金宝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 withtolerant: 2 Unaligned: 0 UnitsMismatch: 0 Empty: 0 Canceled: 0 EmptySynced: 0 DataTypeMismatch: 0 TimeMismatch: 0 StartStopMismatch: 0 Unsup金宝appported: 0

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

绘制比较结果

您可以使用图表来分析比较结果。访问信号结果为Ww信号从DiffRunResult对象,该对象包含使用getResultByIndex函数。检查状态财产的财产金宝appSimulink.sdi.DiffSignalResult对象。

signalResult_Ww = getResultByIndex (runResult, 1)
signalResult_Ww = DiffSignalResult与属性:名称: 'yout.Ww' 状态:超差AlignBy: '路径' SignalID1:144229 SignalID2:144275 MaxDifference:12.4878 SYNC1:[1x1的时间序列] SYNC2:[1x1的时间序列] DIFF:[1x1的时间序列]
signalResult_Ww。状态
ans = OutOfTolerance

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.模型在模型工作空间中存储与模型相关的变量。要修改时间常量值,请访问模型工作区并使用赋予函数。

着干活= sim卡(“slexAircraftExample”);modelWorkspace = get_param (“slexAircraftExample”'modelworkspace');Assivein(ModelWorkspace,'ts',1) out2 = sim(“slexAircraftExample”);

访问和比较仿真结果

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

runIDs = 金宝appSimulink.sdi.getAllRunIDs;runidts1 = runids(结束-1);runidts2 = unrids(结束);

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

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

比较运行和信号公差

缺省情况下,使用信号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.name.
Ans = 'q, rad/sec'
sig2。的名字
Ans = 'alpha, rad'

指定的绝对容忍值0.1还有一段时间的宽容0.6为了信号使用AbsTolTimetol.的属性信号对象在基线运行中。

sig1。AbsTol = 0.1;sig1。TimeTol = 0.6;

指定的绝对容忍值0.2还有一段时间的宽容0.8为了α信号使用AbsTolTimetol.的属性α信号对象在基线运行中。

sig2。AbsTol = 0.2;sig2。TimeTol = 0.8;

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

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

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

sig1result2.status.
ans = WithinTolerance
sig2Result2。状态
ans = WithinTolerance

为标绘信号创建报告

控件中绘制的信号的相关信息和图创建一个报告检查窗格中的。上的表中显示的信号的元数据,默认情况下检查窗格。此示例显示如何指定要在报表中包含哪些元数据。

加载会话文件

此示例通过加载已保存的会话文件,用数据和标绘信号填充仿真数据检查器。会话文件包含信号数据以及有关标绘信号和标绘布局的信息。加载会话文件。

金宝appSimulink.sdi.load (“ex_sldemo_absbrake_slp_Ww.mldatx”);

为标绘信号创建报告

该报告包括绘制信号的图和元数据。控件上的信号表中显示的列对应于报告的元数据检查窗格。控件中显示更多列,可以在报表中包含更多数据检查窗格。控件还可以以编程方式在报表中指定想要的信息“ColumnsToReport”名称 - 值对和枚举类金宝appSimulink.sdi.SignalMetaData

signalMetadata = [金宝appSimulink.sdi.SignalMetaData.Run,金宝appSimulink.sdi.SignalMetaData.Line,金宝appsimulink.sdi.signalmetadata.blockname,金宝appSimulink.sdi.SignalMetaData.SignalName];金宝appSimulink.sdi.report (“ReportType”“检查”“ReportOutputFile”“absbrake_slp_report.html”“ColumnsToReport”, signalMetadata);

该报告显示了标绘信号的元数据表,在标绘快照的上方按运行组织。

保存和恢复一组记录的信号

这个例子展示了如何使用金宝appSimulink.HMI.InstrumentedSignals对象保存一组记录的信号,以便在使用不同的信号记录配置运行模拟后恢复。

保存初始信号日志配置

本示例使用sldemo_fuelsys.型号,配置为记录10个信号。打开模型并使用get_param函数获取金宝appSimulink.HMI.InstrumentedSignals对象,表示信号日志记录配置。

load_systemsldemo_fuelsys.initSigs = get_param (“sldemo_fuelsys”“InstrumentedSignals”);

您可以将初始信号记录配置保存在MAT文件中以供以后使用。

保存initial_instsigs.mat.initSigs

删除所有日志标记

要返回没有记录信号的基线,可以使用set_param函数用于从模型中的信号中删除所有日志标记。然后,您可以轻松地选择不同的信号配置来登录Simulink™Editor或使用金宝app金宝appsimulink.sdi.marksignalforstreaming.函数。

set_param(“sldemo_fuelsys”“InstrumentedSignals”[])

恢复保存的日志配置

使用一组不同的日志信号后,可以使用金宝appSimulink.HMI.InstrumentedSignals对象。例如,如果您将日志记录配置保存到mat文件中,则可以将mat文件内容加载到工作区中并使用set_param命令功能,恢复先前保存的日志配置。

负载initial_instsigs.mat.set_param(“sldemo_fuelsys”“InstrumentedSignals”initSigs)

另请参阅

相关的话题