缺少起始值 [英] Missing start value

查看:68
本文介绍了缺少起始值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是一个后续问题.在我解决了结构奇异性错误之后.它给我一个新的错误说

<预><代码>Hochdruckreiniger2:迭代变量der(Hochdrucktank.V)";缺少起始值!迭代变量der(Hochdrucktank.medium.h)"缺少起始值迭代变量der(Niederdrucktank.V)"缺少起始值!迭代变量der(Niederdrucktank.medium.h)"缺少起始值!迭代变量der(Swept1.medium.p)"缺少起始值!

虽然我在初始化和初始化小节中给出了起始值,但我还是收到了这个错误.你能给我一个解决这个问题的建议吗?

<预><代码>模型 Hochdruckreiniger2//声明真实 V_max = 0.000003;真实 V_tod = 0.000002;实际圆周率 = 3.14;真实 N = 2800;真实 T_per;真实 f;实开_NP;真正的开场_HP;//组件)Modelica.Fluid.Machines.SweptVolume Swept1 (活塞横截面积 = 0.0001131,间隙 = 0.000002,端口数据 = {Modelica.Fluid.Vessels.BaseClasses.VesselPortsData(直径=0.1),Modelica.Fluid.Vessels.BaseClasses.VesselPortsData(直径=0.1)},重新声明包 Medium = Modelica.Media.Water.StandardWater,nPorts = 2,use_portsData = 真,p_start = 100,use_T_start = true,T_start = 293.15,V(开始= 10),U(开始= 20),米(开始= 10));内部 Modelica.Fluid.System 系统;Modelica.Fluid.Vessels.OpenTank Niederdrucktank (重新声明包 Medium = Modelica.Media.Water.StandardWater,nPorts = 1,高度 = 40.84,交叉面积 = 10,端口数据 = {Modelica.Fluid.Vessels.BaseClasses.VesselPortsData(直径=0.1)},V(开始 = 10));Modelica.Fluid.Vessels.OpenTank Hochdrucktank (重新声明包 Medium = Modelica.Media.Water.StandardWater,nPorts = 1,高度 = 4997,交叉面积 = 10,端口数据 = {Modelica.Fluid.Vessels.BaseClasses.VesselPortsData(直径=0.1)},V(开始 = 100));Modelica.Mechanics.Translational.Sources.Position Posit1 (exact = true);Modelica.Blocks.Sources.Sine Sine1 (freqHz = 46.72, 振幅 = 0.0000005);Modelica.Fluid.Valves.ValveIncompressible Hochdruckventile (dp_nominal = 66.6175,m_flow_nominal = 0.04873,rho_nominal = 1019.921,开场=开场_HP,重新声明包 Medium = Modelica.Media.Water.StandardWater);Modelica.Fluid.Valves.ValveIncompressible Niederdruckventile (dp_nominal = 65.21,m_flow_nominal = 0.04873,rho_nominal = 998.388,开场=开场_NP,重新声明包 Medium = Modelica.Media.Water.StandardWater);方程T_per=pi/(180*3600*N/60);//弧度f=((V_max-V_tod)/2)*sin((2*pi*time*T_per)+(V_tod+(V_max-V_tod)/2));如果 der(f)>=0 那么开场_NP=1;开场_HP=0;别的开场_NP=0;开场_HP=1;万一;//连接连接(Sine1.y,Posit1.s_ref);连接(Posit1.flange,Swept1.flange);连接(Hochdrucktank.ports[1],Hochdruckventile.port_a);连接(Hochdruckventile.port_b,Swept1.ports[2]);连接(Niederdrucktank.ports[1],Niederdruckventile.port_a);连接(Niederdruckventile.port_b,Swept1.ports[1]);结束 Hochdruckreiniger2;

解决方案

要为导数引入猜测值,您必须在 Modelica 中执行以下操作:

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

或者可能:

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

在某些情况下,不需要额外的变量,因为已经存在这样的变量,只需找到它即可.

This is a follow-up question. After I solved structurally singularity error. It throws me a new error saying


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! 

Although I give start values in the initialization and initialize subsections, I get this error. Could you give me a suggestion on the solving this problem?


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;

解决方案

To introduce a guess-value for a derivative you have to do something like the following in Modelica:

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

or possibly:

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

In some cases an extra variable is not needed as there already exists such a variable, and it's just a matter of finding it.

这篇关于缺少起始值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆