如何在Parameter Variation中获取Main测量值并写入Excel?
解决Parameter Variation中访问Main测量值并写入Excel的问题
核心问题分析
你之前的代码失效,大概率是因为直接引用main指向的是初始模型实例,而非当前迭代完成后的Main实例;另外可能存在Excel初始化不完整、未及时保存的问题。
分步解决方案
在Parameter Variation层级初始化Excel
在Parameter Variation的「Before experiment」代码框中完成Excel的初始化和表头写入:// 初始化Excel文件,可使用绝对路径或相对路径 excelFile = new ExcelFile("multi_run_results.xlsx"); // 创建工作表 excelFile.createSheet("Throughput Data"); // 写入表头 excelFile.setCellValue("迭代序号", 1, 1, 1); excelFile.setCellValue("平均吞吐时间", 1, 1, 2);在After Iteration中正确获取当前迭代的Main实例数据
替换你之前的代码,使用getCurrentIterationModel()获取当前迭代运行后的Main模型实例,再读取测量值:// 强转当前模型为Main类型(确保你的主模型类名为Main) Main currentIterationMain = (Main) getCurrentIterationModel(); // 获取测量值均值 double meanThroughput = currentIterationMain.shopfloor_throughput_time.mean(); // 计算行号(表头占第1行,迭代从0开始的话,行号=迭代序号+2) int rowNum = getCurrentIteration() + 2; // 写入迭代序号和测量值 excelFile.setCellValue(getCurrentIteration() + 1, 1, rowNum, 1); // 迭代序号从1开始显示 excelFile.setCellValue(meanThroughput, 1, rowNum, 2); // 每次迭代后保存Excel,防止数据丢失 excelFile.save();确保测量值的访问权限
如果上述代码仍报错,检查Main模型中的shopfloor_throughput_time测量值的访问权限:- 打开Main模型的测量值属性,将「可见性」设置为
public; - 或者在Main模型中添加一个公共方法封装测量值获取:
之后在After Iteration中调用:// 在Main模型的代码区域添加 public double getMeanShopfloorThroughput() { return shopfloor_throughput_time.mean(); }double meanThroughput = currentIterationMain.getMeanShopfloorThroughput();
- 打开Main模型的测量值属性,将「可见性」设置为
额外注意事项
- 避免在Main模型中操作Parameter Variation层级的Excel对象,确保所有Excel操作都在Parameter Variation的代码框中完成;
- 如果使用相对路径,Excel文件会生成在仿真项目的根目录下;
- 若需批量运行30组实验,确保Parameter Variation的「Number of iterations」设置为30。
内容的提问来源于stack exchange,提问作者FroggyJoggy
相关产品推荐
相关产品推荐

