使用OMPython在Spyder仿真OpenModelica模型遇指定错误求助
解决Spyder中OMPython仿真OpenModelica模型的错误问题
看起来你遇到的错误是由几个连锁问题导致的,我来一步步帮你排查和解决:
1. 编码解码错误的根源
第一个错误 'utf-8' codec can't decode byte 0xd7... 说明你的Modelica文件(SystemZweiterOrdnungKausalTotal.mo)不是以UTF-8编码保存的,或者文件中包含了非ASCII的特殊字符(比如中文注释、特殊符号)。
解决方法:
- 用记事本、VS Code等编辑器打开你的
.mo文件,重新保存时选择「UTF-8」编码; - 移除文件中所有非英文的字符(包括注释里的中文),确保文件内容完全符合UTF-8编码规范。
2. 仿真选项设置格式错误
错误提示 stopTime !is not a simulation-option variable 是因为你用了错误的参数格式调用setSimulationOptions。OMPython的这个方法要求传入字典类型的参数,而不是字符串列表。
修正代码:
把原来的列表格式改为键值对字典:
mod.setSimulationOptions({ "stopTime": STime, "stepSize": h, "solver": "euler" })
3. 缺少模型编译步骤
最后抛出的 Error: application file not generated yet 是因为OMPython需要先编译模型生成可执行文件,再执行仿真。你需要在调用simulate()之前添加编译步骤。
完整修正后的脚本
import numpy as np from numpy import linalg as la import matplotlib.pyplot as plt from OMPython import ModelicaSystem from OMPython import OMCSessionZMQ font = {'family': 'sans-serif', 'color': 'darkblue', 'weight': 'normal', 'size': 14} h = 0.0001 # Simulationsschrittweite STime = 0.1 # 初始化OMC会话 omc = OMCSessionZMQ() # 加载模型(确保mo文件是UTF-8编码) mod = ModelicaSystem("SystemZweiterOrdnungKausalTotal.mo", "SystemZweiterOrdnungKausal") # 正确设置仿真选项 mod.setSimulationOptions({ "stopTime": STime, "stepSize": h, "solver": "euler" }) # 先编译模型生成应用文件 mod.buildModel() # 执行仿真 mod.simulate() # 获取并查看仿真结果 results = mod.getSolutions() print(results)
额外排查建议
- 先在OpenModelica的GUI环境中打开你的
.mo模型,确保模型本身没有语法错误,能正常编译和仿真,排除模型逻辑问题; - 确认你的OMPython和OpenModelica版本兼容,尽量使用两者的最新稳定版,避免API不匹配的问题。
内容的提问来源于stack exchange,提问作者Zhou Tianjing
相关产品推荐
相关产品推荐

