有一个复杂的连接器,当传播它时,我想只修改变量集的一个变量,而不必明确地写出其他变量的所有等式。
理想的是连接语句和覆盖这一个特定变量。
class FluidClass
String name(start="name")"name";
Real fl(start=1000)"flow [l/h]";
Real p(start=1)"pressure [bar]";
Real T(start=25)"temperature [degC]";
Real DS(start=80)"dry substance [%]";
Real rho(start=100)"viscosity [mPas]";
end FluidClass;
connector fl "flow"
extends FluidClass;
end fl;
model setParam "set parameter"
fl fli annotation(Placement(
transformation(extent={{-5,-5},{5,5}}),
iconTransformation(extent={{-105,-5},{-95,5}})));
fl flo "flow output" annotation(Placement(
transformation(extent={{-50,0},{-40,10}}),
iconTransformation(extent={{95,-5},{105,5}})));
input Modelica.Blocks.Interfaces.RealInput u "set value";
parameter EnumType1 var "variable to change";
type EnumType1 = enumeration(
fl "Flow rate",
p "Pressure",
T "Temperature",
DS "Dry substance",
rho "Viscosity");
equation
// enter your equations here
if var ==1 then //flow
flo.name=fli.name;
flo.fl=u;
flo.p=fli.p;
flo.T=fli.T;
flo.DS=fli.DS;
flo.rho=fli.rho;
end if;
if var ==2 then //pressure
flo.name=fli.name;
flo.fl=fli.fl;
flo.p=u;
flo.T=fli.T;
flo.DS=fli.DS;
flo.rho=fli.rho;
end if;
if var ==3 then //temperature
flo.name=fli.name;
flo.fl=fli.fl;
flo.p=fli.p;
flo.T=u;
flo.DS=fli.DS;
flo.rho=fli.rho;
end if;
if var ==4 then //DS
flo.name=fli.name;
flo.fl=fli.fl;
flo.p=fli.p;
flo.T=fli.T;
flo.DS=u;
flo.rho=fli.rho;
end if;
if var ==5 then //viscosity
flo.name=fli.name;
flo.fl=fli.fl;
flo.p=fli.p;
flo.T=fli.T;
flo.DS=fli.DS;
flo.rho=u;
end if;
end setParam;
我非常感谢你的帮助。
答案 0 :(得分:2)
不幸的是,这不是构建此类模型的非常方便的方式。这个模型似乎有几件事情在发生。首先,您似乎试图通过此“名称”参数指定流体类型。您还通过这些连接器传播信息,但您正在传播不同类型的信息。压力,温度和质量分数(p,T,DS)之类的东西应该是变量,流体流量(fl)之类的东西应该是通过变量而密度(rho)应该是流体属性。
Modelica中有一些设施可以处理所有这些情况,但您未在示例中使用它们。此外,您使用的方法实际上并不能很好地扩展,因为您的流路中没有足够的信息(您不会跟踪流体对流的能量,也不能区分流量“干”的程度(干燥)空气对水汽?)。
你应该看看一些流畅的例子(例如,Modelica.Fluid库或我书中的例子,“Modelica物理建模简介”)因为一旦你考虑到这些设计变化,你的问题将是没有意义的(因此我没有回答)。
我很抱歉这里没有回答,但我希望你能找到足够的信息,指出你正确的方向。如果没有,请随时提出其他问题或添加评论,我会尽量让它更清楚。