Отсутствует начальное значение

Это дополнительный вопрос. После того как я решил структурно ошибку сингулярности. Это вызывает у меня новую ошибку:


Hochdruckreiniger2 : Iteration variable "der(Hochdrucktank.V)" is missing start value!
Iteration variable "der(Hochdrucktank.medium.h)" is missing start value
Iteration variable "der(Niederdrucktank.V)" is missing start value!
Iteration variable "der(Niederdrucktank.medium.h)" is missing start value!
Iteration variable "der(Swept1.medium.p)" is missing start value! 

Хотя я даю начальные значения в подразделах инициализации и инициализации, я получаю эту ошибку. Не могли бы вы дать мне предложение по решению этой проблемы?


model Hochdruckreiniger2
    //Declaration(s)
    Real V_max = 0.000003;
    Real V_tod = 0.000002;
    Real pi = 3.14;
    Real N = 2800;
    Real T_per;
    Real f;
    Real opening_NP;
    Real opening_HP;
    //Component(s)
    Modelica.Fluid.Machines.SweptVolume Swept1 (
        pistonCrossArea = 0.0001131,
        clearance = 0.000002,
        portsData = {Modelica.Fluid.Vessels.BaseClasses.VesselPortsData(diameter=
        0.1),Modelica.Fluid.Vessels.BaseClasses.VesselPortsData(diameter=
        0.1)},
        redeclare package Medium = Modelica.Media.Water.StandardWater,
        nPorts = 2,
        use_portsData = true,
        p_start = 100,
        use_T_start = true,
        T_start = 293.15,
        V(start = 10),
        U(start = 20),
        m(start = 10));
    inner Modelica.Fluid.System system;
    Modelica.Fluid.Vessels.OpenTank Niederdrucktank (
        redeclare package Medium = Modelica.Media.Water.StandardWater,
        nPorts = 1,
        height = 40.84,
        crossArea = 10,
        portsData = {Modelica.Fluid.Vessels.BaseClasses.VesselPortsData(diameter=
        0.1)},
        V(start = 10));
    Modelica.Fluid.Vessels.OpenTank Hochdrucktank (
        redeclare package Medium = Modelica.Media.Water.StandardWater,
        nPorts = 1,
        height = 4997,
        crossArea = 10,
        portsData = {Modelica.Fluid.Vessels.BaseClasses.VesselPortsData(diameter=
        0.1)},
        V(start = 100));
    Modelica.Mechanics.Translational.Sources.Position Posit1 (exact = true);
    Modelica.Blocks.Sources.Sine Sine1 (freqHz = 46.72, amplitude = 0.0000005);
    Modelica.Fluid.Valves.ValveIncompressible Hochdruckventile (
        dp_nominal = 66.6175,
        m_flow_nominal = 0.04873,
        rho_nominal = 1019.921,
        opening = opening_HP,
        redeclare package Medium = Modelica.Media.Water.StandardWater);
    Modelica.Fluid.Valves.ValveIncompressible Niederdruckventile (
        dp_nominal = 65.21,
        m_flow_nominal = 0.04873,
        rho_nominal = 998.388,
        opening = opening_NP,
        redeclare package Medium = Modelica.Media.Water.StandardWater);


equation
    T_per=pi/(180*3600*N/60);//Radian  
        f=((V_max-V_tod)/2)*sin((2*pi*time*T_per)+(V_tod+(V_max-V_tod)/2));
          if der(f)>=0 then
            opening_NP=1;
            opening_HP=0;
           else
            opening_NP=0;
            opening_HP=1;
          end if;
    //Connection(s)
    connect(Sine1.y, Posit1.s_ref);
    connect(Posit1.flange, Swept1.flange);
    connect(Hochdrucktank.ports[1], Hochdruckventile.port_a);
    connect(Hochdruckventile.port_b, Swept1.ports[2]);
    connect(Niederdrucktank.ports[1], Niederdruckventile.port_a);
    connect(Niederdruckventile.port_b, Swept1.ports[1]);
end  Hochdruckreiniger2;


person alimuradpasa    schedule 23.10.2020    source источник
comment
Вы даете начальное значение для V, а не для der (V). Может быть, ввести начальную часть уравнения и установить там der (v) = 0?   -  person Priyanka    schedule 23.10.2020
comment
Я пишу в разделе исходного уравнения der (Hochdrucktank.V) = 0; der (Hochdrucktank.medium.h) = 0; der (Niederdrucktank.V) = 0; дер (Niederdrucktank.medium.h) = 0; der (Swept1.medium.p) = 0; der (Swept1.medium.h) = 0; но это не помогает решить проблему   -  person alimuradpasa    schedule 23.10.2020
comment
Начальный раздел не для пропущенных значений предположений.   -  person Hans Olsson    schedule 26.10.2020


Ответы (1)


Чтобы ввести значение предположения для производной, вы должны сделать что-то вроде следующего в Modelica:

  Real dummyStart(start=...);
equation
  dummyStart=der(Hochdrucktank.V);

или возможно:

  Real dummyStart(start=...)=der(Hochdrucktank.V);

В некоторых случаях дополнительная переменная не требуется, поскольку такая переменная уже существует, и остается только ее найти.

person Hans Olsson    schedule 23.10.2020
comment
Спасибо. Это решает за der (Hochdrucktank.V). Но у меня все еще есть ошибка для der (Niederdrucktank.medium.h), der (Hochdrucktank.medium.h), der (Swept1.medium.p). Есть ли разница в кодировании этих производных? - person alimuradpasa; 23.10.2020
comment
Что ж, у вас должны быть для них разные имена. В некоторых случаях это переменная массива, поэтому вам нужно написать Real dummyStart2 [..] (start = {...}) = der (...); но я не думаю, что здесь это применимо. Наконец, может случиться так, что он защищен, и вы не можете получить к нему доступ; К сожалению, реального способа обойти последнее невозможно. - person Hans Olsson; 23.10.2020
comment
Я даю разные имена, но все равно у меня есть эта ошибка. Когда он защищен, как мне с этим бороться? - person alimuradpasa; 23.10.2020
comment
К сожалению, нет хорошего общего решения, если оно защищено. - person Hans Olsson; 23.10.2020
comment
Какую переменную вы имеете в виду под защитой? - person alimuradpasa; 26.10.2020
comment
Я имел в виду, что если переменная защищена, она не работает. Я не проверял, есть ли они. - person Hans Olsson; 27.10.2020