OpenModelica新前端运行Checkimport1模型失败求助
OpenModelica新前端报错"Component 'List' may not have a binding equation due to class specialization 'model'"的解决办法
问题原因
OpenModelica 1.22.1的新前端对Modelica规范执行更严格:model是用于构建可仿真动态系统的类,不能直接作为参数进行赋值绑定,而旧前端对该规则检查较宽松,所以之前能正常运行。你的代码里把存储静态参数的DataStructure定义成了model,后续又试图将它的实例作为参数数组List的元素赋值,触发了新前端的规范检查报错。
解决办法
把所有用于封装静态参数的类从model改成record——record是Modelica专门用来存储静态数据结构的类型,完全支持作为参数使用和数组存储。
修改后的完整代码如下:
package DatabaseA package Data//Database record DataStructure //properties parameter Integer A; parameter String B; parameter Real C; parameter Real D[3]; end DataStructure; record Comp1//values for properties extends DataStructure(A = 1, B = "Comp1", C = 10, D={0.1,1,-1}); end Comp1; record Comp2//values for properties extends DataStructure(A = 2, B = "Comp2", C = 20, D={0.2,2,-2}); end Comp2; record Comp3//values for properties extends DataStructure(A = 3, B = "Comp3", C = 30, D={0.3,3,-3}); end Comp3; end Data; model Checkimport1 import DatabaseA.Data.*; parameter Comp1 AB; parameter Comp3 AC; parameter DataStructure List[:] = {AB,AC}; end Checkimport1; end DatabaseA;
修改后,新前端可以正常编译仿真,同时旧前端也能兼容运行。
内容的提问来源于stack exchange,提问作者Prims
相关产品推荐
相关产品推荐

