问题和动机: openmodelica中流体库的模型非常精细,需要正确设置许多参数才能使模型运行并获得可接受的结果。 我想为机械和工艺工程师建立一个日常工程计算环境 - 没有模拟专家。 因此,必须预先配置我的库的组件,并且不应强迫用户编辑图形模型背后的代码(例如,重新声明介质)。
思想: 将流体模型放入自己的模型中,正确配置它们,重新声明介质并提供流体连接器。
model flowEncapsulateFluid1
inner Modelica.Fluid.System system;
replaceable package Medium = Modelica.Media.Water.ConstantPropertyLiquidWater constrainedby
Modelica.Media.Interfaces.PartialMedium "Medium in the component"
annotation (choicesAllMatching = true);
model myStaticPipe
Modelica.Fluid.Pipes.StaticPipe pipe(redeclare package Medium = Medium, allowFlowReversal = true, height_ab = 2, length = 2, diameter = 0.1);
Modelica.Fluid.Interfaces.FluidPort_a port_a;
Modelica.Fluid.Interfaces.FluidPort_b port_b;
equation
connect(pipe.port_b, port_b);
connect(port_a, pipe.port_a);
model myTank1
Modelica.Fluid.Vessels.OpenTank tank1(crossArea = 1,
redeclare package Medium = Medium, use_portsData = true, height = 12,
level_start = 8, nPorts = 6,
portsData = {Modelica.Fluid.Vessels.BaseClasses.VesselPortsData
(diameter = 0.1)});
Modelica.Fluid.Interfaces.FluidPort_a port_a
(redeclare package Medium = Medium);
Modelica.Fluid.Interfaces.FluidPort_a port_a1
(redeclare package Medium = Medium);
Modelica.Fluid.Interfaces.FluidPort_a port_a2
(redeclare package Medium = Medium);
Modelica.Fluid.Interfaces.FluidPort_a port_a3
(redeclare package Medium = Medium) ;
Modelica.Fluid.Interfaces.FluidPort_a port_a4
(redeclare package Medium = Medium) ;
Modelica.Fluid.Interfaces.FluidPort_b port_b
(redeclare package Medium = Medium);
equation
connect(tank1.ports[6], port_b);
connect(port_a4, tank1.ports[5]);
connect(port_a3, tank1.ports[4]);
connect(port_a2, tank1.ports[3]);
connect(port_a1, tank1.ports[2]);
connect(port_a, tank1.ports[1]);
end myTank1;
package UnitTests
model Test1
flowEncapsulateFluid1.myTank1 myTank11;
myStaticPipe myStaticPipe1;
myTank1 myTank12;
equation
connect(myStaticPipe1.port_b, myTank12.ports_b);
connect(myTank11.ports_b, myStaticPipe1.port_a);
end Test1;
end UnitTests;
annotation(
uses(Modelica(version = "3.2.2")));
end flowEncapsulateFluid1;
我收到了消息"没有相应的'内部'声明找到组件.Modelica.Fluid.System tank1.system声明为'外部'。 现有的内心'组件是: 没有内心的'在外部'的任何父作用域中的模型中定义的组件。组件的范围:Modelica.Fluid.Vessels.OpenTank $ tank1。 检查你是否没有拼错外线'组件名称。 请声明内心'顶部作用域中具有相同名称的组件。 只考虑外部'继续扁平化。组件声明。"
我不知道如何解释这条消息。欢迎任何帮助。
此外,如果有人能为我提供此项目的建议或链接,我将不胜感激。
非常感谢提前。
答案 0 :(得分:3)
y4cine,
您可以创建一个从Modelica.Fluid
组件扩展的组件库,并最终确定您不希望用户看到的参数。例如
model myPipe
extends Modelica.Fluid.Pipes.DynamicPipe(
redeclare package Medium = Modelica.Media.Water.StandardWater,
final height_ab=0,
final isCircular=true);
end myPipe;
当您实例化组件(显示在Dymola中)时,参数不可见(参见下面的屏幕截图)。
祝你好运, Rene Just Nielsen
答案 1 :(得分:0)
关于你的问题的这一部分:“没有找到组件.Modelica.Fluid.System tank1.system声明为'outer'的相应'内部'声明。
outer
和inner
是modelica中的特殊关键词。
流体库定义了一个名为“系统”的“外部”模型,位于Modelica.Fluid.System
。如果你把它拖到一个给出警告的模型中,问题就会消失,因为它会找到这个外部模型。通常,这个系统模型应该处于高水平而不是单个组件......