文档

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

您可以利用MATLAB中的仿真数据检查器的功能®命令行使用模拟数据检查器API。

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

万博1manbetxSimulink.sdi.Run而且万博1manbetxSimulink.sdi.Signal类提供对数据的访问,并允许您查看和修改运行和信号元数据。您可以使用如下函数修改模拟数据检查器首选项万博1manbetxSimulink.sdi.setSubPlotLayout万博1manbetxSimulink.sdi.setRunNamingRule,万博1manbetxSimulink.sdi.setMarkersOn。若要恢复模拟数据检查器的默认设置,请使用万博1manbetxSimulink.sdi.clearPreferences

创建一个运行并查看数据

此示例演示如何创建运行,向其添加数据,然后在模拟数据检查器中查看数据。

为运行创建数据

这个例子创建timeseriessin和cos的对象。为了可视化数据,模拟数据检查器至少需要一个与数据对应的时间向量。

生成时间序列数据时间= linspace(0,20,100);sinine_vals = sin(2*pi/5*time);Sine_ts =时间序列(sine_vals, time);sine_ts。Name =“sin, T = 5”;Cos_vals = cos(2*pi/8*time);Cos_ts =时间序列(cos_vals,时间);cos_ts。Name =“余弦,T = 8”

创建一个模拟数据检查器运行并添加您的数据

要让模拟数据检查器访问数据,请使用创建方法并创建运行。这个例子修改了运行的一些属性来帮助识别数据。您可以使用模拟数据检查器轻松查看运行和信号属性。

%创建一个运行run = 万博1manbetxSimulink.sdi.Run.create;运行。Name =正弦曲线的;运行。描述=不同频率的正弦和余弦信号添加要运行的时间序列数据run.add (“var”, sinine_ts, cos_ts);

绘制你的数据使用万博1manbetxSimulink.sdi.Signal对象

getSignalByIndex方法返回万博1manbetxSimulink.sdi.Signal对象,该对象可用于在模拟数据检查器中绘制信号。您还可以通过编程方式控制图形外观的各个方面,例如表示信号的线条的颜色和样式。此示例自定义子图布局和信号特征。

获取信号,修改其属性,并将Checked属性更改为truesinine_sig = run.getSignalByIndex(1);sine_sig。LineColor = [0 0 1];sine_sig。LineDashed =“-”。;sine_sig。选中= true;为余弦信号添加另一个子图万博1manbetxSimulink.sdi.setSubPlotLayout(2, 1);绘制余弦信号并自定义其外观cos_sig = run.getSignalByIndex(2);cos_sig。LineColor = [0 1 0];cos_sig。plotOnSubPlot(2,1, true);在模拟数据检查器中查看信号万博1manbetxSimulink.sdi.view

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

万博1manbetxSimulink.sdi.close (“sinusoids.mat”)

比较模拟运行中的信号

本例使用slexAircraftExample模型,以演示控制系统的输入和输出信号的比较。该示例标记流的信号,然后获取模拟运行的run对象。来自运行对象的信号id指定要比较的信号。

加载型号slexAircraftExample并标记流信号load_system (“slexAircraftExample”) 万博1manbetxSimulink.sdi.markSignalForStreaming (“slexAircraftExample /试点”, 1“上”) 万博1manbetxSimulink.sdi.markSignalForStreaming ('slexAircraftExample/飞机动力学模型'4“上”)模拟模型slexAircraftExamplesim卡(“slexAircraftExample”)获取最近一次运行的运行idallIDs = 万博1manbetxSimulink.sdi.getAllRunIDs;runID = allIDs(end);% Get Run对象run = 万博1manbetxSimulink.sdi.getRun(runID);%获取信号idsignalID1 = run.getSignalIDByIndex(1);signalID2 = run.getSignalIDByIndex(2);如果(run.isValidSignalID (signalID1))改变信号容差signal1 = 万博1manbetxSimulink.sdi.getSignal(signalID1);signal1。AbsTol = 0.1;结束如果(run.isValidSignalID(signalID1) && run.isValidSignalID(signalID2))%比较信号diff = 万博1manbetxSimulink.sdi.compareSignals(signalID1,signalID2);检查信号匹配是否在公差范围内Match = diff.match结束
匹配=逻辑0

比较模拟数据检查器以编程方式运行

这个示例展示了如何使用仿真数据检查器编程接口比较运行的仿真数据并分析比较结果。

生成模拟数据的运行

模拟不同的模型期望相对滑移值来创建运行的仿真数据,并使用仿真数据检查器编程接口进行分析。

%开放模式load_system (“ex_sldemo_absbrake”)设置所需的滑移比为0.24并模拟set_param ('ex_sldemo_absbrake/期望的相对滑移'“价值”“0.24”) sim卡(“ex_sldemo_absbrake”);将期望的滑移比更改为0.25并模拟set_param ('ex_sldemo_absbrake/期望的相对滑移'“价值”“0.25”) sim卡(“ex_sldemo_absbrake”);

比较运行与全局容忍度

方法创建的运行的运行id万博1manbetxSimulink.sdi.getAllRunIDs函数。然后,使用全局相对容差和全局时间容差来比较运行,以分析数据是否符合规范。

获取最近两次运行的运行idrunIDs = 万博1manbetxSimulink.sdi.getAllRunIDs;runID1 = runid (end - 1);runID2 = runIDs(end);%比较运行次数runResult = 万博1manbetxSimulink.sdi.compareRuns(runID1,runID2,“reltol”, 0.2,“timetol”, 0.5);

创建一个比较结果的图表

使用万博1manbetxSimulink.sdi.DiffRunResult创建的对象万博1manbetxSimulink.sdi.compareRuns控件的数据Ww将信号结果绘制在图中。

绘制|Ww|信号差值signalResult_Ww = runResult.getResultByIndex(1);图(1)情节(signalResult_Ww.Diff)

用信号公差分析仿真数据

您可以在一个信号一个信号的基础上更改公差值,以评估模型参数更改的影响。本例使用slexAircraftExample模型和仿真数据检查器,以评估在控制输入之后改变低通滤波器的时间常数的效果。

设置

加载模型,并标记q, rad /秒而且α,rad日志记录的信号。然后,模拟模型以创建基线运行。

负载示例模型load_system (“slexAircraftExample”)标记q, rad/秒和alpha, rad信号用于测井万博1manbetxSimulink.sdi.markSignalForStreaming ('slexAircraftExample/飞机动力学模型'3,“上”) 万博1manbetxSimulink.sdi.markSignalForStreaming ('slexAircraftExample/飞机动力学模型'4“上”)%模拟系统sim卡(“slexAircraftExample”)

修改模型参数

修改模型参数Ts在模型工作空间中改变输入低通滤波器的时间常数。

改变输入滤波器时间常数modelWorkspace = get_param(“slexAircraftExample”“modelworkspace”);modelWorkspace.assignin (“t”, 1)%再次模拟sim卡(“slexAircraftExample”)

比较运行并检查结果

使用万博1manbetxSimulink.sdi.compareRuns函数比较来自模拟的数据。然后,检查匹配属性,以查看信号是否落在默认容差为0的范围内。

%获取运行数据runIDs = 万博1manbetxSimulink.sdi.getAllRunIDs;runID1 = runid (end - 1);runID2 = runIDs(end);%比较运行次数diffRun1 = 万博1manbetxSimulink.sdi.compareRuns(runID1,runID2);获取信号结果sig1Result1 = diffRun1.getResultByIndex(1);sig2Result1 = diffRun1.getResultByIndex(2);检查信号是否匹配sig1Result1。匹配
ans =逻辑0
sig2Result1。匹配
ans =逻辑0

比较运行与信号公差

信号在默认容差0范围内不匹配。为了进一步分析时间常数变化的影响,在与基线信号属性的比较中添加信号公差,以确定一次通过所需的公差。本例使用时间和绝对公差的组合。

获取sigID1的信号对象run1 = 万博1manbetxSimulink.sdi.getRun(runID1);sigID1 = run1.getSignalIDByIndex(1);sigID2 = run1.getSignalIDByIndex(2);sig1 = 万博1manbetxSimulink.sdi.getSignal(sigID1);sig2 = 万博1manbetxSimulink.sdi.getSignal(sigID2);设置q,弧度/秒的公差sig1。AbsTol = 0.1;sig1。TimeTol = 0.6;设置alpha, rad的公差sig2。AbsTol = 0.2;sig2。TimeTol = 0.8;再次运行比较diffRun2 = 万博1manbetxSimulink.sdi.compareRuns(runID1,runID2);sig1Result2 = diffRun2.getResultByIndex(1);sig2Result2 = diffRun2.getResultByIndex(2);检查结果sig1Result2。匹配
ans =逻辑1
sig2Result2。匹配
ans =逻辑1

以编程方式生成模拟数据检查器报告

此示例展示如何使用“模拟数据检查器”编程接口创建报表。您可以在Inspect窗格中为绘制的信号创建报告,或者在Compare窗格中为比较数据创建报告。此示例首先通过模拟模型生成数据,然后展示如何创建检查信号报告。要完全按照所示的方式运行示例,请确保模拟数据检查器存储库以空开始万博1manbetxSimulink.sdi.clear函数。

生成数据

这个例子使用模型生成数据ex_sldemo_absbrake有两种不同的期望滑移比。

确保模拟数据检查器为空万博1manbetxSimulink.sdi.clear%开放模式load_system (“ex_sldemo_absbrake”)设定滑移率并模拟模型set_param ('ex_sldemo_absbrake/期望的相对滑移'“价值”“0.24”) sim卡(“ex_sldemo_absbrake”)设置新的滑移比并重新模拟模型set_param ('ex_sldemo_absbrake/期望的相对滑移'“价值”“0.25”) sim卡(“ex_sldemo_absbrake”)

在检查窗格中绘制信号

检查信号报告包括在Inspect窗格的图形查看区域中绘制的所有信号和绘制信号的所有显示元数据。

获取simu万博1manbetxlink .sdi.运行对象runIDs = 万博1manbetxSimulink.sdi.getAllRunIDs;runID1 = runid (end-1);runID2 = runIDs(end);run1 = 万博1manbetxSimulink.sdi.getRun(runID1);run2 = 万博1manbetxSimulink.sdi.getRun(runID2);获取slp信万博1manbetx号的Simulink.sdi.Signal对象run1_slp = run1.getSignalByIndex(4);run2_slp = run2.getSignalByIndex(4);绘制slp信号run1_slp。plotOnSubPlot(1,1, true) run2_slp。plotOnSubPlot(1,1, true)

创建一个在检查窗格中绘制的信号报告

通过使用Simulation data Inspector UI添加更多列,您可以在报表中包含更多数据,或者您可以使用Name-Value对和枚举类以编程方式在报表中指定您想要的信息万博1manbetxSimulink.sdi.SignalMetaData。此示例显示如何以编程方式指定报表中的数据。

指定报表参数reportType =检查信号的;reportName =“Data_Report.html”;signalMetadata = [万博1manbetxSimulink.sdi.SignalMetaData.Run,...万博1manbetxSimulink.sdi.SignalMetaData.Line,...万博1manbetxSimulink.sdi.SignalMetaData.BlockName,...万博1manbetxSimulink.sdi.SignalMetaData.SignalName];万博1manbetxSimulink.sdi.report (“ReportToCreate”reportType,“ReportOutputFile”...reportName,“ColumnsToReport”, signalMetadata);

保存和恢复一组记录信号

的功能万博1manbetxSimulink.HMI.InstrumentedSignals对象保存一组日志信号,以便在使用另一组信号运行模拟后恢复。

加载模型和保存初始配置

加载sldemo_fuelsys模型,并保存初始集的日志信号。

%负载模型load_systemsldemo_fuelsys获取Simu万博1manbetxlink.HMI.InstrumentedSignals对象initigs = get_param(“sldemo_fuelsys”“InstrumentedSignals”);将日志记录配置保存到文件中以备将来使用保存initial_instSigs.matinitSigs

移除所有日志标识

返回到没有记录信号的基线,这样您就可以轻松地选择要记录的不同信号配置。

清除所有日志信号set_param (“sldemo_fuelsys”“InstrumentedSignals”[])

恢复保存的日志配置

使用不同的日志信号集后,可以使用万博1manbetxSimulink.HMI.InstrumentedSignals对象。

加载保存的配置负载initial_instSigs.mat恢复日志配置set_param (“sldemo_fuelsys”“InstrumentedSignals”initSigs)

相关的话题

这个话题有用吗?