问题和动机: 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。检查‘外部’组件名称是否拼写错误。请在顶部作用域中声明一个具有相同名称的‘内部’组件。继续扁平化,只考虑‘外部’组件声明。”
我不知道该如何解释这条信息。任何帮助都是受欢迎的。
此外,如果有人能为我提供这个项目的建议或链接,我将不胜感激。
在此之前,非常感谢您。
发布于 2017-06-01 17:29:16
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
发布于 2017-06-01 21:16:19
关于您的问题的这一部分:“没有找到组件.Modelica.Fluid.System tank1.system声明为‘外部’的相应‘内部’声明。
outer和inner是modelica中的特殊关键词。
流体库定义了一个位于Modelica.Fluid.System的名为"system“的”外部“模型。如果你把它拖到一个给出警告的模型中,问题就会消失,因为它会找到这个外部模型。通常,这个系统模型应该处于较高的级别,而不是单个组件...
https://stackoverflow.com/questions/44302528
复制相似问题