使用OMPython覆写Modelica模型数组参数报错如何解决
问题根因
这个pyparsing解析异常本质是参数覆写格式错误导致仿真启动失败,OMPython没有拿到预期的结构化仿真结果,拿到的是仿真报错文本,解析时遇到不符合语法规则的(字符就抛出了异常,和pyparsing库本身无关。具体的覆写错误有两处:
- 数组/矩阵覆写的索引写法错误
OpenModelica的overrideFile规则里,变量名后加[下标]仅用于给单个数组元素赋值,覆写整个数组/矩阵时不能带索引。你代码里要给整个4×4的fault.transMatrix矩阵赋值,却写了fault.transMatrix[4,4],相当于告诉仿真器要给矩阵第4行第4列的单个标量元素赋值,但你传入的是整个4×4的矩阵值,类型完全不匹配,直接触发仿真启动错误。 - 数组字面量格式不合法
Modelica的标准数组/矩阵字面量必须用大括号{}包裹,你定义noFault时用了方括号[]包裹矩阵内容,属于非法语法,OpenModelica无法识别该参数值。
可行修复方案
按照以下步骤调整代码即可解决问题:
- 修正矩阵覆写的索引:将写入override文件的
fault.transMatrix[4,4]改为fault.transMatrix,匹配整个矩阵覆写的语法规则。 - 修正矩阵值的格式:将
noFault的定义从方括号包裹改为大括号包裹,合法写法为:
noFault = "{1, 0, 0, 0; 1, 0, 0, 0; 1, 0, 0, 0; 1, 0, 0, 0}"
- 校验生成的override文件内容,修正后对应数组参数的写入内容应为:
fault.transMatrix={1, 0, 0, 0; 1, 0, 0, 0; 1, 0, 0, 0; 1, 0, 0, 0} const.flyZone[3]={150,150,150}
- 调试建议:如果调整后仍有异常,暂时跳过Python脚本直接在终端执行
./System -overrideFile=newValues.txt,可以直接看到OpenModelica输出的原生参数错误提示,比OMPython抛出的解析异常定位问题效率高很多。
内容的提问来源于stack exchange,提问作者FrankDev
相关产品推荐
相关产品推荐

