将数据记录到仿真数据检查器
此示例将模型 slexAircraftExample 的仿真数据记录到仿真数据检查器。该模型未配置为记录数据。加载该模型,并标记 Stick、alpha, rad 和 q, rad/sec 信号进行记录。
load_system('slexAircraftExample')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Pilot',1,'on')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',3,'on')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',4,'on')
对于此示例,运行模型的两次仿真。在第一次仿真中,使用 Pilot 模块的正弦波输出,在第二次仿真中,使用方波输出。
set_param('slexAircraftExample/Pilot','WaveForm','sine')
sim('slexAircraftExample')
set_param('slexAircraftExample/Pilot','WaveForm','square')
sim('slexAircraftExample')
可视化记录的数据
您可以使用仿真数据检查器编程接口来访问记录的仿真数据。当您使用仿真数据检查器编程接口访问数据时,您可以使用函数在仿真数据检查器中创建绘图。
首先,访问最近两次运行的运行 ID,然后获取对应的 Simulink.sdi.Run 对象。Run 对象允许您访问记录的仿真数据。
runIDs = Simulink.sdi.getAllRunIDs;
sineRunID = runIDs(end-1);
squareRunID = runIDs(end);
sineRun = Simulink.sdi.getRun(sineRunID);
squareRun = Simulink.sdi.getRun(squareRunID);
假设您要分析模型的输入和输出之间的关系。获取两次仿真运行的输入和输出信号的 Simulink.sdi.Signal 对象。
sineOut = getSignalByIndex(sineRun,1);
sineIn = getSignalByIndex(sineRun,3);
squareOut = getSignalByIndex(squareRun,1);
squareIn = getSignalByIndex(squareRun,3);
将仿真数据检查器中的子图布局更改为 2×1,并将第一次仿真运行输出的信号绘制在顶部绘图中,将第二次运行输出的信号绘制在底部绘图中。
Simulink.sdi.setSubPlotLayout(2,1)
plotOnSubPlot(sineIn,1,1,true)
plotOnSubPlot(sineOut,1,1,true)
plotOnSubPlot(squareIn,2,1,true)
plotOnSubPlot(squareOut,2,1,true)
保存仿真数据检查器会话
要查看仿真数据检查器中的绘图数据,请在命令行窗口中输入 Simulink.sdi.view。
然后,将仿真数据检查器会话保存为 MLDATX 文件。
Simulink.sdi.save('myData.mldatx')
加载仿真数据检查器会话
为了模拟您要稍后返回查看相同数据的场景,请清除仿真数据检查器中的数据,并将子图布局重置为 1×1。
Simulink.sdi.clear
Simulink.sdi.setSubPlotLayout(1,1)
加载会话文件并继续处理数据。您可以使用 Simulink.sdi.view 函数打开仿真数据检查器并查看结果。
Simulink.sdi.load('myData.mldatx');