如何将Simscape仿真结果导入Open Modelica并实现同图对比?
Simscape与Open Modelica仿真结果对比实现方案
一、导出Simscape仿真结果
Simscape仿真结束后,结果会保存在MATLAB工作区,你可以将其导出为Open Modelica易读取的格式:
- 运行Simscape模型,获取时间序列
time和需要对比的输出变量(比如motor_speed、voltage)。 - 导出为MAT文件:执行MATLAB命令
save('simscape_results.mat', 'time', 'motor_speed', 'voltage'); - 导出为CSV文件(推荐,兼容性更强):执行MATLAB命令
writetable(table(time, motor_speed, voltage), 'simscape_results.csv');
二、在Open Modelica中读取Simscape结果并绘图
Open Modelica支持直接读取MAT和CSV格式的Simscape结果,以下是具体操作:
1. 读取MAT文件
图形界面(OMEdit)操作
- 打开OMEdit,点击菜单栏
File->Import->MAT-file,选择导出的simscape_results.mat文件,导入后数据集会出现在Workspace面板中。 - 右键点击导入的数据集,选择
Plot,即可单独绘制Simscape结果;后续再叠加Open Modelica的仿真结果。
脚本命令操作
在Open Modelica脚本窗口执行以下命令:
// 加载MAT文件 loadMatFile("simscape_results.mat"); // 运行自身的Open Modelica模型 simulate(YourModelName, stopTime=10); // 替换为你的模型名和仿真时长 // 同图对比绘图 plot({simscape_results.time, simscape_results.motor_speed, YourModelName.time, YourModelName.motor_speed}, title="Motor Speed Comparison", legend=["Simscape Time", "Simscape Speed", "Open Modelica Time", "Open Modelica Speed"]);
2. 读取CSV文件
CSV文件无需依赖MATLAB的格式,更通用,用Open Modelica内置函数读取:
// 读取CSV文件,返回二维数组(每行是一组时间-数据点) Real[:,:] csvData = Modelica.Utilities.Files.readCSV("simscape_results.csv"); // 提取时间和输出变量(假设第一列是时间,第二列是转速) Real[:] sim_time = csvData[:,1]; Real[:] sim_speed = csvData[:,2]; // 运行Open Modelica模型 simulate(YourModelName, stopTime=10); // 对齐时间轴(若步长不同,用插值统一) Real[:] om_speed_interp = Modelica.Math.Interpolation.interpolate(YourModelName.time, YourModelName.motor_speed, sim_time); // 对比绘图 plot({sim_time, sim_speed, sim_time, om_speed_interp}, title="Aligned Motor Speed Comparison", legend=["Simscape", "Open Modelica (Interpolated)"]);
三、注意事项
- 确保Simscape和Open Modelica的仿真时长、初始条件一致,避免对比失真。
- 若两组数据的时间步长不同,使用插值函数对齐后再对比,结果更准确。
内容的提问来源于stack exchange,提问作者kunal
相关产品推荐
相关产品推荐

