OMShell中嵌套模型的参数值修改问题求助
关于OMShell中setParameterValue()访问深层嵌套模型参数的解决方案
setParameterValue()并非只能修改顶层仿真模型的参数,你遇到的“找不到类”错误本质是参数的层级路径指定错误,没有正确定位到嵌套模型内部的参数。
正确访问深层参数的方法
要修改嵌套模型的参数,必须指定完整的实例层级路径,用.分隔各级嵌套模型的实例名称:
- 路径格式:
顶层模型名.嵌套模块1名.嵌套模块2名.参数名 - 注意路径中的所有实例名称必须和模型内部定义的完全一致,严格区分大小写
- 可以先在OMEdit中打开模型,展开层级结构,直接复制参数的完整路径,避免拼写错误
示例.mos脚本
假设你的自定义包为MyBuildingPackage,顶层仿真模型是MainSimulation,其中嵌套了WeatherModule(气象文件参数)和Building.Zone.Thermostat(温控参数),脚本示例如下:
// 加载自定义包 loadFile("MyBuildingPackage.mo"); // 实例化顶层模型(必须执行这一步,否则无法访问内部参数) instantiateModel(MyBuildingPackage.MainSimulation); // 修改气象文件路径 setParameterValue("MyBuildingPackage.MainSimulation.WeatherModule.weatherFile", "new_chicago.epw"); // 修改嵌套温控模块的设定值 setParameterValue("MyBuildingPackage.MainSimulation.Building.Zone.Thermostat.setpointTemp", 23.5); // 执行仿真 simulate(MyBuildingPackage.MainSimulation);
额外排查要点
- 必须先执行
instantiateModel实例化模型,仅加载文件无法访问内部嵌套参数 - 确认目标参数是可修改的独立参数,而非模型内的常量或关联变量(这类参数无法通过
setParameterValue()修改) - 可以用
listParameters("顶层模型完整路径")命令列出所有可访问的参数,验证你的路径是否正确
内容的提问来源于stack exchange,提问作者Dummer Horst
相关产品推荐
相关产品推荐

