1

複雑なコネクタがあるので、それを伝播するときに、他の変数のすべての等式を明示的に記述する必要なしに、変数のセットの1つの変数のみを変更したいと思います。

理想的なのは、connectステートメントとその1つの特定の変数の上書きです。

    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;

よろしくお願いします。

4

1 に答える 1

2

残念ながら、これはそのようなモデルを構築するための非常に Modelica らしい方法ではありません。このモデルでは、いくつかのことが行われているようです。まず、この「name」パラメーターで流体のタイプを指定しようとしているようです。また、これらのコネクタを介して情報を伝達していますが、さまざまな種類の情報を伝達しています。圧力、温度、質量分率 (p、T、DS) などは実際には変数全体である必要があり、流体の流れ (fl) などは変数全体である必要があり、密度 (rho) は流体特性である必要があります。

これらすべてのケースを処理するための Modelica の機能がありますが、あなたの例ではそれらを利用していません。さらに、使用しているアプローチは、流路に十分な情報がないため、実際にはあまりうまくスケーリングしません (流体によって対流されるエネルギーを追跡したり、流れのどの程度が「乾燥」しているかを区別したりしません (乾燥)。空気対水蒸気?)

いくつかの流体の例 (たとえば、Modelica.Fluid ライブラリや、私の著書「Modelica を使用した物理モデリングの概要」の例) を実際に確認する必要があります。これらの設計変更を考慮に入れると、質問が意味をなさないからです。 (したがって、私の非回答)。

ここで答えられなくて申し訳ありませんが、正しい方向に向けるのに十分建設的な情報を見つけていただければ幸いです。そうでない場合は、お気軽に他の質問をするか、コメントを追加してください。より明確にするよう努めます。

于 2012-07-03T15:09:30.533 に答える