Modelica 4.0.0简单流体建模:介质声明报错求助
问题分析与解决
报错Expected medium to be a component, but found package instead的核心原因是混淆了Modelica.Thermal.FluidHeatFlow库的介质使用逻辑——这个库的模型是通过继承介质包统一介质定义,而非将介质包作为参数传递给组件。
具体错误点
- 组件实例中写
medium = medium,是把自定义的介质包当成组件对象传递,不符合库的参数要求。 - 同时继承
Modelica.Thermal.FluidHeatFlow.Media.Medium会和自定义的medium包产生冲突,因为该基类已包含介质定义框架。
修正步骤
- 删除所有组件实例里的
medium = medium参数(比如PressureIncrease、Ambient中的该设置)。 - 将
extends Modelica.Thermal.FluidHeatFlow.Media.Medium替换为extends Modelica.Thermal.FluidHeatFlow.Media.Medium(medium = medium),把自定义介质包注入到库的介质框架中。 - 保留原有的
replaceable package medium定义,LinearWater_pT_Ambient的选择是合理的。
修正后的完整代码
extends Modelica.Icons.Example; replaceable package medium = Modelica.Media.CompressibleLiquids.LinearWater_pT_Ambient constrainedby Modelica.Media.Interfaces.PartialMedium; extends Modelica.Thermal.FluidHeatFlow.Media.Medium(medium = medium); import Modelica.Units.Conversions.from_degC; import Modelica.Units; parameter Modelica.Units.SI.Temperature T_amb = from_degC(20); parameter Modelica.Units.SI.Pressure p_inc = 500000; Modelica.Thermal.FluidHeatFlow.Sources.PressureIncrease pressureIncrease(T(fixed = true, start = T_amb)) annotation( Placement(visible = true, transformation(origin = {-48, 2}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); Modelica.Blocks.Sources.Constant const(k = p_inc) annotation( Placement(visible = true, transformation(origin = {-72, 42}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); Modelica.Thermal.FluidHeatFlow.Sources.Ambient ambient(T(fixed = true, start = T_amb)) annotation( Placement(visible = true, transformation(origin = {-80, 2}, extent = {{10, -10}, {-10, 10}}, rotation = 0))); Modelica.Thermal.FluidHeatFlow.Sources.Ambient ambient1(T(fixed = true, start = T_amb)) annotation( Placement(visible = true, transformation(origin = {16, 2}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); Modelica.Thermal.FluidHeatFlow.Components.Pipe pipe annotation( Placement(visible = true, transformation(origin = {-16, 2}, extent = {{-10, 10}, {10, -10}}, rotation = 0))); Modelica.Thermal.HeatTransfer.Sources.FixedHeatFlow fixedHeatFlow(Q_flow = 10, alpha = 0.5) annotation( Placement(visible = true, transformation(origin = {-28, 44}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); equation connect(ambient.flowPort, pressureIncrease.flowPort_a) annotation( Line(points = {{-70, 2}, {-58, 2}}, color = {255, 0, 0})); connect(pressureIncrease.flowPort_b, pipe.flowPort_a) annotation( Line(points = {{-38, 2}, {-26, 2}}, color = {255, 0, 0})); connect(pipe.flowPort_b, ambient1.flowPort) annotation( Line(points = {{-6, 2}, {6, 2}}, color = {255, 0, 0})); connect(fixedHeatFlow.port, pipe.heatPort) annotation( Line(points = {{-18, 44}, {-16, 44}, {-16, 12}}, color = {191, 0, 0})); annotation( Diagram(coordinateSystem(extent = {{-100, 60}, {40, -20}}))); end heatend_3d_printing;
内容的提问来源于stack exchange,提问作者Tobias R.
相关产品推荐
相关产品推荐

