Modelica - 仅更改复杂类型连接器的一个参数

时间:2012-07-03 04:31:10

标签: connector modelica

有一个复杂的连接器,当传播它时,我想只修改变量集的一个变量,而不必明确地写出其他变量的所有等式。

理想的是连接语句和覆盖这一个特定变量。

    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;

我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

不幸的是,这不是构建此类模型的非常方​​便的方式。这个模型似乎有几件事情在发生。首先,您似乎试图通过此“名称”参数指定流体类型。您还通过这些连接器传播信息,但您正在传播不同类型的信息。压力,温度和质量分数(p,T,DS)之类的东西应该是变量,流体流量(fl)之类的东西应该是通过变量而密度(rho)应该是流体属性。

Modelica中有一些设施可以处理所有这些情况,但您未在示例中使用它们。此外,您使用的方法实际上并不能很好地扩展,因为您的流路中没有足够的信息(您不会跟踪流体对流的能量,也不能区分流量“干”的程度(干燥)空气对水汽?)。

你应该看看一些流畅的例子(例如,Modelica.Fluid库或我书中的例子,“Modelica物理建模简介”)因为一旦你考虑到这些设计变化,你的问题将是没有意义的(因此我没有回答)。

我很抱歉这里没有回答,但我希望你能找到足够的信息,指出你正确的方向。如果没有,请随时提出其他问题或添加评论,我会尽量让它更清楚。