平衡本地模型Modelica

Dar*_*ett 2 modelica openmodelica dymola

我有一个本地模型,当我检查Dymola声称有35个变量和34个未知数时,而当我在OMEdit中检查完全相同的模型时,它在34/34平衡.在确定什么算作变量时,是否包括所有输入和输出?

以下是我的模型:

model HeatStorage

  extends PentakomoPlant.Interfaces.StorageFluidHeat;
  parameter SI.Diameter D = 18.667 "Diameter";
  parameter SI.Height H = 20 "Height";
  parameter Boolean enable_losses = false "= true enable thermal losses with environment" 
  parameter SI.CoefficientOfHeatTransfer alpha = 1 "Constant heat transfer coefficient with the ambient"
  parameter Boolean use_L = false "= true to display level as output variable" 
  parameter Real L_start = 0 "Start value of level in %" 
  parameter SI.Temperature T_start = from_degC(300) "Start value of temperature" 
  parameter SI.Temperature T_max = from_degC(550) "Maximum tank temperature" 
  parameter SI.Temperature T_set = from_degC(300) "Tank Heater Temperature Set-Point" 
  parameter SI.Power W_max = 30e8 "Hot Tank Heater Capacity" 
  parameter SI.Efficiency e_ht = 0.99 "Tank Heater Efficiency" 
  SI.Volume V;
  SI.Mass m;
  Medium.BaseProperties medium;
  SI.Area A;
  SI.HeatFlowRate Q_losses;
  Medium.ThermodynamicState state_i = Medium.setState_pTX(medium.p, T_start);
  SI.Power W_net;
  SI.Power W_loss;
  Modelica.Blocks.Interfaces.RealOutput L if use_L "Tank level in %" 
  Modelica.Blocks.Interfaces.RealInput T_amb if enable_losses 
  Modelica.Blocks.Interfaces.RealInput Q_heater 
  SI.HeatFlowRate Q_PB "Heat Flow to PowerBlock";
  SI.HeatFlowRate Q_desal "Heat Flow to Desalination";
protected 
  parameter SI.Volume V_t = H * pi * D ^ 2 / 4;
  Modelica.Blocks.Interfaces.RealOutput L_internal;

initial equation 
  medium.h = Medium.specificEnthalpy(state_i);
  m = Medium.density(state_i) * V_t;

equation 
  if use_L then
    connect(L_internal, L);
  end if;

  if enable_losses then
    connect(T_amb_internal, T_amb);

    Q_losses = -0.939 * exp(to_degC(medium.T) * 0.005111) * 1000;//*5/7;
  else
    T_amb_internal = Medium.T_default;
    Q_losses = 0;
  end if;

  fluid_a.p = medium.p;
  fluid_b.p = medium.p;
  fluid_a.h_outflow = medium.h;
  fluid_b.h_outflow = medium.h;
  der(m) = fluid_a.m_flow + fluid_b.m_flow;
  m * der(medium.h) + der(m) * medium.h = Q_losses + Q_PB + Q_desal + W_net + fluid_a.m_flow * inStream(fluid_a.h_outflow) + fluid_b.m_flow * medium.h;
  V = m / medium.d;
  L_internal = 100 * (max(medium.T, T_set) - T_set) / (T_max - T_set);
  A = 2 * pi * (D / 2) * H;

  W_net = Q_heater;
  W_loss = W_net / e_ht;

  //PowerBlock

  heat_PB.Q_flow = Q_PB;
  heat_DS.Q_flow = Q_desal;
  heat_PB.T = medium.T;
  heat_DS.T = medium.T;

end HeatStorage;
Run Code Online (Sandbox Code Playgroud)

附:

partial model StorageFluidHeat
  extends SolarTherm.Icons.StorageModel;
  Modelica.Fluid.Interfaces.FluidPort_a fluid_a(redeclare package Medium = Medium) 
  Modelica.Fluid.Interfaces.FluidPort_b fluid_b(redeclare package Medium = Medium) 


  replaceable package Medium = SolarTherm.Media.MoltenSalt.MoltenSalt_base
    constrainedby Modelica.Media.Interfaces.PartialMedium
    "Medium in the component"
  Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b heat_PB 
  Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b heat_DS 

end StorageFluidHeat;
Run Code Online (Sandbox Code Playgroud)

并且(对于介质的基本属性):

  redeclare model extends BaseProperties(final standardOrderComponents=true)
    "Base properties of medium"

  equation 
    d = rho_T(T);
    h = state.h;
    u = h - p/d;
    MM = 0.091438;
    R = 8.3144/MM;
    state.p = p;
    T = T_h(h);
  end BaseProperties;
Run Code Online (Sandbox Code Playgroud)

我正在努力寻找额外变量的位置,或者为什么在使用Dymola/OMEdit时可能会有所不同.

我试过遵循ELmqvist关于平衡模型的建议,所以在计算变量时我会正确地假设(对于这个模型):

8 x专用类变量3 x输入2 x输出7 x中基数属性变量2 x 5 x流体端口变量2 x 2 x热端口变量

= 34个变量

我错过了什么吗?

Han*_*son 5

该模型并未完成所有库以启用测试(假设其他媒体存在类似问题),因此这将是一个不完整的答案.

此外,似乎可以删除一些方程和变量以简化模型.

但该模型存在一些问题:

  • T_amb_internal未使用且未声明; 看起来很奇怪.
  • 对于简单介质,通常需要两个密集属性的方程:例如p,h或p,T.这里medium.h由于微分方程而不是medium.p确定.(质量也有微分方程,可以变化.)

请注意,测试本地模型可能很棘手 - 您最好将其包含在测试电路中.