OpenModelica连接器生成超出预期额外方程问题求助
OpenModelica 连接器流变量方程超量、符号不符合预期问题排查
核心规则说明
两个异常均为Modelica标准连接器语义的正常表现,不是编译器bug:
- 流变量connect方程的符号规则
所有带flow前缀的变量有统一方向约定:流量流入变量所属组件/模型时取正值,流出时取负值。connect()语句连接多个同类型连接器时,会为同一连接节点上的所有流变量生成流量守恒方程,形式为该节点上所有流变量的和等于0,而非变量差值为0。
你代码中连接的两个流变量分属两个独立边界:Compressor.MassFlowIn.G的正方向是流入压缩机组件,MassFlowIn.G的正方向是流入ModelConditioner的对外接口,二者在同一连接点的流入方向相反,因此生成的方程为Compressor.MassFlowIn.G + MassFlowIn.G = 0.0,完全符合语义规范。 - 多余
MassFlowIn.G = 0.0方程的来源
在模型顶层声明的连接器属于模型的对外交互接口,按照Modelica规范:如果对外连接器没有在更高层级的模型中被连接到其他组件,编译器会自动为其上的流变量生成零流量方程flow_var = 0,代表该接口为封闭边界,与外界无流量交换。
你当前代码把ModelConditioner的对外连接器当做内部赋值节点使用,既手动给该接口的流变量赋值1.0,又将其与内部压缩机的连接器相连,且未在更上层连接该对外接口,自然会触发自动生成的边界方程,最终导致方程数量超过变量数,出现超定问题。
修正方法
如果只是做固定入口流量的简易测试,不需要在ModelConditioner层额外声明对外连接器作为内部节点,直接对压缩机入口的流变量赋值即可,修正后的可运行代码如下:
connector ConnectorMassFlow flow Real G "Mass flow rate [kg/s]"; end ConnectorMassFlow; model ModelCompressor ConnectorMassFlow MassFlowIn; equation // 补充压缩机自身的特性方程即可 end ModelCompressor; model ModelConditioner ModelCompressor Compressor; equation Compressor.MassFlowIn.G = 1.0; end ModelConditioner;
如果业务逻辑确实需要保留ModelConditioner的对外入口连接器,就不要在模型内部手动给对外连接器的流变量赋值,在实例化ModelConditioner的上层模型中为该接口连接流量源组件或其他对应组件即可,不会再触发自动零流量方程。
内容的提问来源于stack exchange,提问作者FGP92
相关产品推荐
相关产品推荐

