OMPython调用ModPowerSystems自定义模型仿真报错问题咨询
1. 路径转义警告(Lexer treating \ as \)
原因
Windows系统下的路径使用反斜杠\作为分隔符,但Modelica语法中反斜杠是转义字符,单独出现的\U、\A等不符合Modelica转义规则,所以触发警告。
解决方法
修改代码中路径拼接的逻辑,统一使用正斜杠/作为路径分隔符,或者使用Path对象的as_posix()方法自动转换格式:
# 替换原来的路径拼接写法 mod=ModelicaSystem( source_dir.joinpath("simulator/ModPowerSystems/package.mo").as_posix(), "ModPowerSystems.CustomModel.Examples.BasicGrids.MainModel", ["ModPowerSystems","Modelica"] )
注意:你原来传入的依赖列表里不需要写具体的子模型类,只需要顶层包名即可,OMPython会自动解析依赖链。
2. package.order缺失条目警告
原因
ModPowerSystems官方库的EmtThreePhase/Examples/BasicGrids目录下存在SynGen_Park_UnitTest_FullModel相关模型文件,但对应的package.order文件中没有登记这个模型名称,属于库本身的小瑕疵,不影响你自定义模型的运行。
解决方法
该警告可直接忽略,不会影响仿真执行。如果要彻底消除,可以手动修改对应路径下的package.order文件,在末尾添加SynGen_Park_UnitTest_FullModel即可。
3. inner/outer system组件缺失警告
原因
ModPowerSystems库的组件(比如你用到的DependentModel1、DependentModel2)都声明了outer ModPowerSystems.Base.System system来引用全局系统参数配置,但你的顶层模型MainModel里没有声明对应的inner实例,所以找不到匹配的全局配置对象。
解决方法
打开你的MainModel.mo文件,在顶层模型的变量声明区域添加如下代码:
inner ModPowerSystems.Base.System system( // 这里根据你的仿真需求配置系统参数,比如频率、相数等,示例如下 f_nominal=50, numPhases=3 );
添加后所有子组件的outer system就可以匹配到这个全局实例,警告会自动消失。
4. "flattening model错误"含义说明
Modelica的编译流程分为解析、扁平化(flattening)、代码生成三个阶段:
- 扁平化阶段的作用是把模型中所有继承、实例化的子组件、连接关系、参数配置全部展开,生成一个无层级的平面模型结构
- 你之前遇到的
flattening错误是因为在这个阶段检测到了模型语法错误(用了保留关键字time作为变量名),导致无法完成展开操作,修复语法问题后即可正常推进编译流程。
内容的提问来源于stack exchange,提问作者jajamaharaja

