Modelica 液压系统的仿真

Modelica 液压系统的仿真,modelica,Modelica,我尝试用Modelica语言在Ansys Twinbuilder 2021 R1中模拟一台液压机 整个系统如下图所示 首先,我尝试将整个系统划分为子系统。我模拟了pumpraum-1,pumpraum-2,pumpraum-3,出口组件的子系统。子系统独立工作,没有任何问题。然后我尝试将子系统编译成整个系统。那么模拟就不能顺利进行了。它会在任何时间步停止,不会继续到模拟结束。这是什么原因呢?我如何理解我整个系统中的问题在哪里 我的模型代码如下: model HD_3Kolben_bsp

我尝试用Modelica语言在Ansys Twinbuilder 2021 R1中模拟一台液压机

整个系统如下图所示

首先,我尝试将整个系统划分为子系统。我模拟了pumpraum-1,pumpraum-2,pumpraum-3,出口组件的子系统。子系统独立工作,没有任何问题。然后我尝试将子系统编译成整个系统。那么模拟就不能顺利进行了。它会在任何时间步停止,不会继续到模拟结束。这是什么原因呢?我如何理解我整个系统中的问题在哪里

我的模型代码如下:

model HD_3Kolben_bsp
    //Declaration(s)
    Real V_max = 0.000003;
    Real V_tod = 0.000002;
    Real N = 2800;
    replaceable package medium = Modelica.Media.Water.StandardWater( );
    Real opening_HP;
    Real opening_LP;
    constant Modelica.SIunits.AbsolutePressure patm = 1e5;
    Real opening_HP_2;
    Real opening_LP_2;
    Real opening_HP_3;
    Real opening_LP_3;
    constant Modelica.SIunits.Frequency freq = 46;
    //Component(s)
    Modelica.Fluid.Machines.SweptVolume Kolben1 (
        pistonCrossArea = 0.0001131,
        clearance = 0.00000250621,
        redeclare package Medium = Modelica.Media.Water.StandardWater,
        nPorts = 1,
        use_portsData = false,
        use_T_start = true,
        T_start = 293.15,
        V(start = 0.005),
        m(start = 0.005));
    inner Modelica.Fluid.System system (p_ambient = 101325);
    Modelica.Mechanics.Translational.Sources.Position Posit1 (exact = true, useSupport = false);
    Modelica.Blocks.Sources.Sine Sine1 (
        amplitude = 0.005567,
        freqHz = freq,
        offset = 0.005567,
        phase = +Modelica.Constants.pi/2.01,
        startTime = 0);
    Modelica.Fluid.Vessels.ClosedVolume ClosedVolume1 (
        V = 0.000005/2,
        nPorts = 3,
        redeclare package Medium = medium,
        use_portsData = false);
    Modelica.Fluid.Pipes.DynamicPipe pipe_CV_HD_1 (
        length = 0.005,
        diameter = 0.002,
        redeclare package Medium = medium,
        roughness = 2.5E-5);
    Modelica.Fluid.Valves.ValveLinear HDVentile1 (
        dp_nominal = 95,
        m_flow_nominal = 0.05867441,
        redeclare package Medium = medium,
        opening = opening_HP);
    Modelica.Fluid.Pipes.DynamicPipe pipe_ND_CV_1 (
        length = 0.005,
        diameter = 0.002,
        redeclare package Medium = medium,
        roughness = 2.5E-5);
    Modelica.Fluid.Valves.ValveLinear NDVentile1 (
        dp_nominal = 94.35,
        m_flow_nominal = 0.05867441,
        redeclare package Medium = medium,
        opening = opening_LP);
    Modelica.Fluid.Pipes.DynamicPipe pipe_Ein_ND (
        length = 0.005,
        diameter = 0.002,
        redeclare package Medium = medium,
        roughness = 2.5E-5);
    Modelica.Fluid.Sources.FixedBoundary Einlass (p = 4e5, redeclare package Medium = Modelica.Media.Water.StandardWater, nPorts = 1);
    Modelica.Mechanics.Translational.Sensors.PositionSensor Position;
    Modelica.Mechanics.Translational.Sensors.PositionSensor Position2;
    Modelica.Fluid.Valves.ValveLinear NDVentile2 (
        dp_nominal = 94.35,
        m_flow_nominal = 0.05867441,
        redeclare package Medium = medium,
        opening = opening_LP_2);
    Modelica.Fluid.Pipes.DynamicPipe pipe_ND_CV_2 (
        length = 0.005,
        diameter = 0.002,
        redeclare package Medium = medium,
        roughness = 2.5E-5);
    Modelica.Fluid.Valves.ValveLinear HDVentile2 (
        dp_nominal = 95,
        m_flow_nominal = 0.05867441,
        redeclare package Medium = medium,
        opening = opening_HP_2);
    Modelica.Fluid.Pipes.DynamicPipe pipe_CV_HD_2 (
        length = 0.005,
        diameter = 0.002,
        redeclare package Medium = medium,
        roughness = 2.5E-5);
    Modelica.Fluid.Vessels.ClosedVolume ClosedVolume2 (
        V = 0.000005/2,
        nPorts = 3,
        redeclare package Medium = medium,
        use_portsData = false);
    Modelica.Blocks.Sources.Sine Sine2 (
        amplitude = 0.005567,
        freqHz = freq,
        offset = 0.005567,
        phase = +Modelica.Constants.pi/2.01,
        startTime = 7/(3*freq));
    Modelica.Mechanics.Translational.Sources.Position Posit2 (exact = true, useSupport = false);
    Modelica.Fluid.Machines.SweptVolume Kolben2 (
        pistonCrossArea = 0.0001131,
        clearance = 0.00000250621,
        redeclare package Medium = Modelica.Media.Water.StandardWater,
        nPorts = 1,
        use_portsData = false,
        use_T_start = true,
        T_start = 293.15,
        V(start = 0.005),
        m(start = 0.005));
    Modelica.Mechanics.Translational.Sensors.PositionSensor Position3;
    Modelica.Fluid.Valves.ValveLinear NDVentile3 (
        dp_nominal = 94.35,
        m_flow_nominal = 0.05867441,
        redeclare package Medium = medium,
        opening = opening_LP_3);
    Modelica.Fluid.Pipes.DynamicPipe pipe_ND_CV_3 (
        length = 0.005,
        diameter = 0.002,
        redeclare package Medium = medium,
        roughness = 2.5E-5);
    Modelica.Fluid.Valves.ValveLinear HDVentile3 (
        dp_nominal = 95,
        m_flow_nominal = 0.05867441,
        redeclare package Medium = medium,
        opening = opening_HP_3);
    Modelica.Fluid.Pipes.DynamicPipe pipe_CV_HD_3 (
        length = 0.005,
        diameter = 0.002,
        redeclare package Medium = medium,
        roughness = 2.5E-5);
    Modelica.Fluid.Vessels.ClosedVolume ClosedVolume3 (
        V = 0.000005/2,
        nPorts = 3,
        redeclare package Medium = medium,
        use_portsData = false);
    Modelica.Blocks.Sources.Sine Sine3 (
        amplitude = 0.005567,
        freqHz = freq,
        offset = 0.005567,
        phase = +Modelica.Constants.pi/2.01,
        startTime = 14/(3*freq));
    Modelica.Mechanics.Translational.Sources.Position Posit3 (exact = true, useSupport = false);
    Modelica.Fluid.Machines.SweptVolume Kolben3 (
        pistonCrossArea = 0.0001131,
        clearance = 0.00000250621,
        redeclare package Medium = Modelica.Media.Water.StandardWater,
        nPorts = 1,
        use_portsData = false,
        use_T_start = true,
        T_start = 293.15,
        V(start = 0.005),
        m(start = 0.005));
    Modelica.Fluid.Sources.FixedBoundary boundary1 (p = 4e5, redeclare package Medium = Modelica.Media.Water.StandardWater, nPorts = 1);
    Modelica.Fluid.Pipes.DynamicPipe pipe1 (
        length = 0.005,
        diameter = 0.002,
        redeclare package Medium = medium,
        roughness = 2.5E-5);
    Modelica.Fluid.Sources.FixedBoundary boundary2 (p = 4e5, redeclare package Medium = Modelica.Media.Water.StandardWater, nPorts = 1);
    Modelica.Fluid.Pipes.DynamicPipe pipe2 (
        length = 0.005,
        diameter = 0.002,
        redeclare package Medium = medium,
        roughness = 2.5E-5);
    Modelica.Fluid.Pipes.DynamicPipe pipe3 (
        length = 0.005,
        diameter = 0.0055,
        redeclare package Medium = medium,
        roughness = 2.5E-5,
        modelStructure = Modelica.Fluid.Types.ModelStructure.av_b);
    Modelica.Fluid.Pipes.DynamicPipe pipe4 (
        length = 0.005,
        diameter = 0.0055,
        redeclare package Medium = medium,
        roughness = 2.5E-5,
        modelStructure = Modelica.Fluid.Types.ModelStructure.av_b);
    Modelica.Fluid.Pipes.DynamicPipe pipe5 (
        length = 0.005,
        diameter = 0.0055,
        redeclare package Medium = medium,
        roughness = 2.5E-5,
        modelStructure = Modelica.Fluid.Types.ModelStructure.av_b);
    Modelica.Fluid.Vessels.ClosedVolume volume2 (
        V = 3.13e-6,
        nPorts = 4,
        redeclare package Medium = medium,
        use_portsData = false);
    Modelica.Fluid.Pipes.StaticPipe pipe (length = 0.001, diameter = 0.002, redeclare package Medium = medium);
    Modelica.Fluid.Pipes.StaticPipe pipe6 (length = 0.001, diameter = 0.002, redeclare package Medium = medium);
    Modelica.Fluid.Pipes.StaticPipe pipe7 (length = 0.001, diameter = 0.002, redeclare package Medium = medium);
    Modelica.Fluid.Pipes.DynamicPipe pipe10_steig (
        length = 0.003,
        diameter = 0.002721,
        redeclare package Medium = medium,
        roughness = 2.5E-5,
        nNodes = 1,
        modelStructure = Modelica.Fluid.Types.ModelStructure.av_b);
    Modelica.Fluid.Pipes.DynamicPipe pipe9_steig (
        length = 0.008,
        diameter = 0.00598,
        redeclare package Medium = medium,
        roughness = 2.5E-5,
        nNodes = 1,
        modelStructure = Modelica.Fluid.Types.ModelStructure.av_b);
    Modelica.Fluid.Pipes.DynamicPipe pipe8 (
        length = 5,
        diameter = 0.0057,
        redeclare package Medium = medium,
        roughness = 2.5E-5,
        nNodes = 1,
        modelStructure = Modelica.Fluid.Types.ModelStructure.av_b);
    Modelica.Fluid.Fittings.SimpleGenericOrifice orifice4 (diameter = 0.00452, zeta = 3.5, redeclare package Medium = medium);
    Modelica.Fluid.Pipes.DynamicPipe Duese_2 (
        length = 0.0082,
        diameter = 0.0042,
        redeclare package Medium = medium,
        roughness = 2.5E-5,
        nNodes = 1,
        modelStructure = Modelica.Fluid.Types.ModelStructure.av_b);
    Modelica.Fluid.Pipes.DynamicPipe Duese_3 (
        length = 0.018,
        diameter = 0.00452,
        redeclare package Medium = medium,
        roughness = 2.5E-5,
        nNodes = 1,
        modelStructure = Modelica.Fluid.Types.ModelStructure.av_b);
    Modelica.Fluid.Pipes.DynamicPipe Duese_4 (
        length = 0.0002,
        diameter = 0.0005,
        redeclare package Medium = medium,
        roughness = 2.5E-5,
        nNodes = 1,
        modelStructure = Modelica.Fluid.Types.ModelStructure.av_b);
    Modelica.Fluid.Pipes.DynamicPipe Duese_1 (
        length = 0.393,
        diameter = 0.0074,
        redeclare package Medium = medium,
        roughness = 2.5E-5,
        nNodes = 1,
        modelStructure = Modelica.Fluid.Types.ModelStructure.av_b);
    Modelica.Fluid.Pipes.DynamicPipe pistole_3 (
        length = 0.02,
        diameter = 0.004,
        redeclare package Medium = medium,
        roughness = 2.5E-5,
        nNodes = 1,
        modelStructure = Modelica.Fluid.Types.ModelStructure.av_b);
    Modelica.Fluid.Fittings.SimpleGenericOrifice orifice2 (diameter = 0.005, zeta = 0.98, redeclare package Medium = medium);
    Modelica.Fluid.Pipes.DynamicPipe pistole_1 (
        length = 0.041,
        diameter = 0.0057,
        redeclare package Medium = medium,
        roughness = 2.5E-5,
        nNodes = 1,
        modelStructure = Modelica.Fluid.Types.ModelStructure.av_b);
    Modelica.Fluid.Fittings.SimpleGenericOrifice orifice1 (diameter = 0.005, zeta = 1, redeclare package Medium = medium);
    Modelica.Fluid.Pipes.DynamicPipe pistole_2 (
        length = 0.269,
        diameter = 0.0069,
        redeclare package Medium = medium,
        roughness = 2.5E-5,
        nNodes = 1,
        modelStructure = Modelica.Fluid.Types.ModelStructure.av_b);
    Modelica.Fluid.Pipes.DynamicPipe pipe9 (
        length = 0.24,
        diameter = 0.005,
        redeclare package Medium = medium,
        roughness = 2.5E-5,
        modelStructure = Modelica.Fluid.Types.ModelStructure.av_b,
        nNodes = 1);
    Modelica.Fluid.Sources.FixedBoundary Auslass (p = patm, redeclare package Medium = medium, nPorts = 1);


equation
    if der(Position.s)>=0 then 
           opening_LP=1;  
           opening_HP=0; 
     else 
           opening_LP=0;
           opening_HP=1;
     end if; 
    if der(Position2.s)>=0 then 
           opening_LP_2=1;  
           opening_HP_2=0; 
     else 
           opening_LP_2=0;
           opening_HP_2=1;
     end if;
     if der(Position3.s)>=0 then 
           opening_LP_3=1;  
           opening_HP_3=0; 
     else 
           opening_LP_3=0;
           opening_HP_3=1;
     end if;
    //Connection(s)
    connect(Posit1.flange, Kolben1.flange);
    connect(Sine1.y, Posit1.s_ref);
    connect(pipe_CV_HD_1.port_b, HDVentile1.port_a);
    connect(NDVentile1.port_b, pipe_ND_CV_1.port_a);
    connect(Einlass.ports[1], pipe_Ein_ND.port_a);
    connect(Posit1.flange, Position.flange);
    connect(Position2.flange, Posit2.flange);
    connect(NDVentile2.port_b, pipe_ND_CV_2.port_a);
    connect(HDVentile2.port_a, pipe_CV_HD_2.port_b);
    connect(Sine2.y, Posit2.s_ref);
    connect(Posit2.flange, Kolben2.flange);
    connect(Position3.flange, Posit3.flange);
    connect(NDVentile3.port_b, pipe_ND_CV_3.port_a);
    connect(HDVentile3.port_a, pipe_CV_HD_3.port_b);
    connect(Sine3.y, Posit3.s_ref);
    connect(Posit3.flange, Kolben3.flange);
    connect(boundary1.ports[1], pipe1.port_a);
    connect(boundary2.ports[1], pipe2.port_a);
    connect(pipe_Ein_ND.port_b, NDVentile1.port_a);
    connect(pipe1.port_b, NDVentile2.port_a);
    connect(pipe2.port_b, NDVentile3.port_a);
    connect(HDVentile1.port_b, pipe3.port_a);
    connect(HDVentile2.port_b, pipe4.port_a);
    connect(HDVentile3.port_b, pipe5.port_a);
    connect(pipe_ND_CV_1.port_b, ClosedVolume1.ports[2]);
    connect(pipe_CV_HD_1.port_a, ClosedVolume1.ports[3]);
    connect(pipe_ND_CV_2.port_b, ClosedVolume2.ports[2]);
    connect(pipe_CV_HD_2.port_a, ClosedVolume2.ports[3]);
    connect(pipe_ND_CV_3.port_b, ClosedVolume3.ports[2]);
    connect(pipe_CV_HD_3.port_a, ClosedVolume3.ports[3]);
    connect(pipe3.port_b, volume2.ports[1]);
    connect(pipe4.port_b, volume2.ports[2]);
    connect(pipe5.port_b, volume2.ports[3]);
    connect(Kolben1.ports[1], pipe.port_a);
    connect(pipe.port_b, ClosedVolume1.ports[1]);
    connect(Kolben2.ports[1], pipe6.port_a);
    connect(pipe6.port_b, ClosedVolume2.ports[1]);
    connect(Kolben3.ports[1], pipe7.port_a);
    connect(pipe7.port_b, ClosedVolume3.ports[1]);
    connect(pipe10_steig.port_a, Duese_3.port_b);
    connect(pipe9_steig.port_b, Duese_2.port_a);
    connect(pipe9_steig.port_a, Duese_1.port_b);
    connect(pipe10_steig.port_b, orifice4.port_a);
    connect(pistole_3.port_a, pistole_2.port_b);
    connect(pistole_1.port_b, pistole_2.port_a);
    connect(pipe8.port_b, pistole_1.port_a);
    connect(pipe8.port_a, orifice2.port_b);
    connect(orifice4.port_b, Duese_4.port_a);
    connect(Duese_2.port_b, Duese_3.port_a);
    connect(Duese_4.port_b, Auslass.ports[1]);
    connect(Duese_1.port_a, orifice1.port_b);
    connect(pistole_3.port_b, orifice1.port_a);
    connect(orifice2.port_a, pipe9.port_b);
    connect(pipe9.port_a, volume2.ports[4]);
end  HD_3Kolben_bsp;
//----------------------------------------------------------------------------

使用Dymola,在减少解算器的相对公差后,我得到以下结果:

模型错误-区分if-then-else不连续:(if 时间<0.050724637681159424,然后0其他正弦2.振幅(289.02652413026095(时间-0.050724637681159424)+正弦2.相位) 该值从0跳至0.00556683

可以通过设置
Posit2.exact=false
来克服此错误。但随后出现了后续错误,可能是由于快速变化或整体系统不一致。如果不详细了解模型,这很难判断。所以我会把这个问题留给其他人来解决

除此之外,初始化还存在一些问题,但这些问题似乎很小:

IF97介质功能调用时压力过低p=-35428.5 Pa 611.657

关于第二点意见:

初始化问题应该通过设置以下列表中的(重要)变量来解决。该列表实际上包含模拟环境必须猜测其初始值的变量,因为未指定这些变量

Assuming fixed start value for the continuous states:
ClosedVolume1.medium.h(start = ClosedVolume1.h_start)
ClosedVolume1.medium.p(start = 101325.0)
ClosedVolume2.medium.h(start = ClosedVolume2.h_start)
ClosedVolume2.medium.p(start = 101325.0)
ClosedVolume3.medium.h(start = ClosedVolume3.h_start)
ClosedVolume3.medium.p(start = 101325.0)
Duese_1.mediums[1].h(start = Duese_1.h_start)
Duese_1.mediums[1].p(start = Duese_1.ps_start[1])
Duese_2.mediums[1].h(start = Duese_2.h_start)
Duese_2.mediums[1].p(start = Duese_2.ps_start[1])
Duese_3.mediums[1].h(start = Duese_3.h_start)
Duese_3.mediums[1].p(start = Duese_3.ps_start[1])
Duese_4.mediums[1].h(start = Duese_4.h_start)
Duese_4.mediums[1].p(start = Duese_4.ps_start[1])
Kolben1.medium.h(start = Kolben1.h_start)
Kolben1.medium.p(start = 101325.0)
Kolben2.medium.h(start = Kolben2.h_start)
Kolben2.medium.p(start = 101325.0)
Kolben3.medium.h(start = Kolben3.h_start)
Kolben3.medium.p(start = 101325.0)
pipe1.mediums[1].h(start = pipe1.h_start)
pipe1.mediums[2].h(start = pipe1.h_start)
pipe1.mediums[2].p(start = pipe1.ps_start[2])
pipe2.mediums[1].h(start = pipe2.h_start)
pipe2.mediums[2].h(start = pipe2.h_start)
pipe2.mediums[2].p(start = pipe2.ps_start[2])
pipe3.mediums[1].h(start = pipe3.h_start)
pipe3.mediums[1].p(start = pipe3.ps_start[1])
pipe3.mediums[2].h(start = pipe3.h_start)
pipe3.mediums[2].p(start = pipe3.ps_start[2])
pipe4.mediums[1].h(start = pipe4.h_start)
pipe4.mediums[1].p(start = pipe4.ps_start[1])
pipe4.mediums[2].h(start = pipe4.h_start)
pipe4.mediums[2].p(start = pipe4.ps_start[2])
pipe5.mediums[1].h(start = pipe5.h_start)
pipe5.mediums[1].p(start = pipe5.ps_start[1])
pipe5.mediums[2].h(start = pipe5.h_start)
pipe5.mediums[2].p(start = pipe5.ps_start[2])
pipe8.mediums[1].h(start = pipe8.h_start)
pipe8.mediums[1].p(start = pipe8.ps_start[1])
pipe9.mediums[1].h(start = pipe9.h_start)
pipe9_steig.mediums[1].h(start = pipe9_steig.h_start)
pipe9_steig.mediums[1].p(start = pipe9_steig.ps_start[1])
pipe10_steig.mediums[1].h(start = pipe10_steig.h_start)
pipe10_steig.mediums[1].p(start = pipe10_steig.ps_start[1])
pipe_CV_HD_1.mediums[1].h(start = pipe_CV_HD_1.h_start)
pipe_CV_HD_1.mediums[2].h(start = pipe_CV_HD_1.h_start)
pipe_CV_HD_1.mediums[2].p(start = pipe_CV_HD_1.ps_start[2])
pipe_CV_HD_2.mediums[1].h(start = pipe_CV_HD_2.h_start)
pipe_CV_HD_2.mediums[2].h(start = pipe_CV_HD_2.h_start)
pipe_CV_HD_2.mediums[2].p(start = pipe_CV_HD_2.ps_start[2])
pipe_CV_HD_3.mediums[1].h(start = pipe_CV_HD_3.h_start)
pipe_CV_HD_3.mediums[2].h(start = pipe_CV_HD_3.h_start)
pipe_CV_HD_3.mediums[2].p(start = pipe_CV_HD_3.ps_start[2])
pipe_Ein_ND.mediums[1].h(start = pipe_Ein_ND.h_start)
pipe_Ein_ND.mediums[2].h(start = pipe_Ein_ND.h_start)
pipe_Ein_ND.mediums[2].p(start = pipe_Ein_ND.ps_start[2])
pipe_ND_CV_1.mediums[1].h(start = pipe_ND_CV_1.h_start)
pipe_ND_CV_1.mediums[1].p(start = pipe_ND_CV_1.ps_start[1])
pipe_ND_CV_1.mediums[2].h(start = pipe_ND_CV_1.h_start)
pipe_ND_CV_2.mediums[1].h(start = pipe_ND_CV_2.h_start)
pipe_ND_CV_2.mediums[1].p(start = pipe_ND_CV_2.ps_start[1])
pipe_ND_CV_2.mediums[2].h(start = pipe_ND_CV_2.h_start)
pipe_ND_CV_3.mediums[1].h(start = pipe_ND_CV_3.h_start)
pipe_ND_CV_3.mediums[1].p(start = pipe_ND_CV_3.ps_start[1])
pipe_ND_CV_3.mediums[2].h(start = pipe_ND_CV_3.h_start)
pistole_1.mediums[1].h(start = pistole_1.h_start)
pistole_1.mediums[1].p(start = pistole_1.ps_start[1])
pistole_2.mediums[1].h(start = pistole_2.h_start)
pistole_2.mediums[1].p(start = pistole_2.ps_start[1])
pistole_3.mediums[1].h(start = pistole_3.h_start)
pistole_3.mediums[1].p(start = pistole_3.ps_start[1])
volume2.medium.h(start = volume2.h_start)
volume2.medium.p(start = 101325.0)

非常感谢这些信息。您能否提供有关初始化问题的更多信息,为什么会出现此问题,或者如何避免此错误?除此之外,是否有办法在Twinbuilder中查看这些错误?我不用迪莫拉。因此,我看不到这样的错误。关于1:我编辑了这篇文章以提供进一步的信息。关于2:我没有Twinbuilder,所以我没办法,对不起……非常感谢。我在初始方程部分写了这些方程。它为每个状态抛出一个错误。我遇到这样一个错误:
找不到ClosedVolume1.mediumh()的声明。
。如何定义这些组件的状态?您需要确保初始等式位于正确的层次结构级别。如果您使用的是
ClosedVolume1.mediumh()
(我认为应该是
ClosedVolume1.medium.h(start=…
),这应该是模型的顶层。此外,特别是对于
ClosedVolume.h
,在初始化选项卡中实际上有一个名为
h\u start
的参数。