您可以从MATLAB利用模拟数据检查器的功能®使用仿真数据检查器API的命令行。
模拟数据检查器在运行和信号中组织数据,为每个运行和信号分配一个唯一的数字标识。一些仿真数据检查器API函数使用运行和信号ID来参考数据,而不是接受运行或信号本身作为输入。要访问工作空间中的运行ID,您可以使用万博1manbetxsimulink.sdi.getAllrunids
或者万博1manbetxsimulink.sdi.getRunidByIndex
。您可以通过A访问信号ID万博1manbetxsimulink.sdi.run
对象使用getsignalidbyIndex
方法。
这万博1manbetxsimulink.sdi.run
和万博1manbetxsimulink.sdi.signal
课程提供对数据的访问权限,并允许您查看和修改运行和信号元数据。您可以使用诸如万博1manbetxsimulink.sdi.setsubplotlayout
,,,,万博1manbetxsimulink.sdi.setrunnamingrule
, 和万博1manbetxsimulink.sdi.setmarkerson
。要恢复模拟数据检查器的默认设置,请使用万博1manbetxsimulink.sdi.clearpreferences
。
此示例显示了如何创建运行,向其添加数据,然后在模拟数据检查器中查看数据。
创建运行数据
创造时间序列
对象包含正弦信号和余弦信号的数据。给每个人时间序列
对象描述性名称。
时间= linspace(0,20,100);sine_vals = sin(2*pi/5*时间);sine_ts = limeseries(sine_vals,time);sine_ts.name ='正弦,t = 5';cos_vals = cos(2*pi/8*时间);cos_ts = limeseries(cos_vals,time);cos_ts.name =``余弦,t = 8'';
创建运行并添加数据
使用万博1manbetxsimulink.sdi.view
功能以打开仿真数据检查器。
万博1manbetxsimulink.sdi.view
要将数据从工作区导入仿真数据检查器,请创建一个万博1manbetxsimulink.sdi.run
对象使用万博1manbetxsimulink.sdi.run.create
功能。使用The Metadata添加有关运行的信息姓名
和描述
属性跑
目的。
SinusoidSrun = 万博1manbetxsimulink.sdi.run.create;Sinusoidsrun.name =“正弦”;Sinusoidsrun.Description =“带有不同频率的正弦和余弦信号”;
使用添加
函数将您在工作区中创建的数据添加到空运行中。
添加(Sinusoidsrun,'vars',sine_ts,cos_ts);
在模拟数据检查器中绘制数据
使用getSignalByIndex
访问功能万博1manbetxsimulink.sdi.signal
包含信号数据的对象。您可以使用万博1manbetxsimulink.sdi.signal
对象属性为信号指定线样式和颜色,并在仿真数据检查器中绘制它。指定LineColor
和排队
每个信号的属性。
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 =' - ';
使用万博1manbetxsimulink.sdi.setsubplotlayout
配置一个功能2
-经过-1
模拟数据检查器绘图区域中的子图布局。然后使用Plotonsubplot
功能以在顶部子图上绘制正弦信号和下部子图上的余弦信号。
万博1manbetxsimulink.sdi.setsubplotlayout(2,1);plotonsubplot(sine_sig,1,1,true);PlotonSubplot(Cos_sig,2,1,true);
关闭仿真数据检查器并保存您的数据
完成检查绘制的信号数据后,您可以关闭仿真数据检查器并将会话保存到MLDATX文件中。
万博1manbetxsimulink.sdi.close('sinusoids.mldatx')
您可以使用仿真数据检查器编程接口来比较单个运行中的信号。此示例比较了飞机纵向控制器的输入和输出信号。
首先,加载包含数据的会话。
万博1manbetxsimulink.sdi.load('aircraftExample.mldatx');
使用万博1manbetxsimulink.sdi.run.getlatest
访问数据中最新运行的功能。
aircraftrun = 万博1manbetxsimulink.sdi.run.getlatest;
然后,您可以使用万博1manbetxsimulink.sdi.getSignalsByname
访问的功能戳
信号,代表控制器的输入,阿尔法,rad
代表输出的信号。
stick = getsignalsbyname(aircraftrun,'戳');alpha = getsignalsByname(aircraftrun,'alpha,rad');
在比较信号之前,您可以指定用于比较的公差值。比较使用比较中为基线信号指定的公差值,因此将绝对公差值设置为0.1
在戳
信号。
Stick.Abstol = 0.1;
现在,使用万博1manbetxsimulink.sdi.comparesignals
功能。这戳
信号是基线,阿尔法,rad
信号是与基线进行比较的信号。
比较results = simulink万博1manbetx.sdi.comparesignals(stick.id,alpha.id);匹配= comparionresults.status
匹配=比较枚举枚举
比较结果不可能。您可以使用万博1manbetxsimulink.sdi.view
功能以打开仿真数据检查器以查看和分析比较结果。
您可以在比较两个模拟运行时指定要使用的全局公差值。全局公差值应用于运行中的所有信号。此示例显示了如何为运行比较指定全局公差值以及如何分析和保存比较结果。
首先,加载包含要比较数据的会话文件。会话文件包含四个模拟飞机纵向控制器的数据。此示例比较了使用不同输入过滤时间常数的两个运行的数据。
万博1manbetxsimulink.sdi.load('aircraftExample.mldatx');
要访问运行数据以进行比较,请使用万博1manbetxsimulink.sdi.getAllrunids
函数以获取与最后两个模拟运行相对应的运行ID。
runids = 万博1manbetxsimulink.sdi.getAllrunids;RunID1 = RunIDS(end -1);runId2 = runids(end);
使用万博1manbetxsimulink.sdi.compareruns
比较运行的功能。指定全球相对容忍值的0.2
以及全球时间公差价值0.5
。
runresult = 万博1manbetxsimulink.sdi.compareruns(runid1,runid2,“ reltol',0.2,“时间托托”,0.5);
检查概括
返回的财产万博1manbetxsimulink.sdi.diffrunresult
目的是查看信号是在公差值之内还是不容忍。
runresult.summary
ans =带有字段的结构:Outoftererance:0 withIntolarance:3不结盟:0单位mismatch:0空:0取消:0 emptysynced:0 datatypemismatch:0 timemismant:0 startStopMismatch:0 startStopMismatch:0 notupported:0万博1manbetx
所有三个信号比较结果都属于指定的全球公差。
您可以使用该比较结果将比较结果保存到MLDATX文件中Saveresult
功能。
Saveresult(Runresult,“ inputfilterComparison”);
您可以通过编程方式指定使用仿真数据检查器执行的比较中使用的信号公差值。在此示例中,您通过模拟飞机纵向飞行控制系统的模型来比较收集的数据。每个仿真都为输入过滤器时间常数使用不同的值,并记录输入和输出信号。您通过使用仿真数据检查器和信号公差进行比较结果来分析时间常数变化的效果。
首先,加载包含仿真数据的会话文件。
万博1manbetxsimulink.sdi.load('aircraftExample.mldatx');
会话文件包含四个运行。在此示例中,您比较文件中前两个运行的数据。访问万博1manbetxsimulink.sdi.run
从文件加载的前两个运行的对象。
runids = 万博1manbetxsimulink.sdi.getAllrunids;runidts1 = runids(end-3);runidts2 = runids(end-2);
现在,在没有指定任何公差的情况下比较这两个运行。
notoldiffresult = 万博1manbetxsimulink.sdi.compareruns(runidts1,runidts2);
使用GetResultByIndex
访问比较结果的功能问
和α
信号。
qresult = getResultByIndex(NodoldiffResult,1);Alpharesult = GetResultByIndex(NodoldiffResult,2);
检查地位
每个信号的结果都可以查看比较结果是否落在我们的耐受性之内。
qresult.status
ans =比较枚举枚举
alpharesult.status
ans =比较枚举枚举
比较使用的值0
对于所有公差,所以外观
结果意味着信号是不一样的。
您可以通过指定信号的公差值进一步分析时间常数的效果。通过设置属性来指定公差万博1manbetxsimulink.sdi.signal
与要比较的信号相对应的对象。比较使用为基线信号指定的公差。此示例指定了时间公差和绝对耐受性。
要指定公差,请首先访问信号
基线运行的对象。
runts1 = 万博1manbetxsimulink.sdi.getRun(runidts1);qsig = getsignalsbyname(runts1,'q,rad/sec');alphasig = getsignalsbyname(runts1,'alpha,rad');
指定绝对的公差0.1
和时间的宽容0.6
为了问
使用Abstol
和时间表
特性。
qsig.abstol = 0.1;Qsig.timetol = 0.6;
指定绝对的公差0.2
和时间的宽容0.8
为了α
信号。
Alphasig.Abstol = 0.2;alphasig.timetol = 0.8;
再次比较结果。访问比较的结果,并检查地位
每个信号的属性。
telliffresult = 万博1manbetxsimulink.sdi.compareruns(runidts1,runidts2);qresult2 = getResultbyIndex(telliffresult,1);alpharesult2 = getResultbyIndex(telliffresult,2);qresult2.status
ANS =比较枚举枚举与智力
alpharesult2.status
ANS =比较枚举枚举与智力