Не удается заставить насос работать в стандартной библиотеке Modelica - PullRequest
3 голосов
/ 17 мая 2019

Я хочу заполнить открытый резервуар (bacinella2), извлекая воду из источника (Pozzetto) с помощью насосной системы (Pompa). Проблема довольно проста, но я не могу реализовать в openmodelica.

Я попытался исключить насос, напрямую соединяющий две трубы tubo1 и tubo2, и система работает, поэтому я думаю, что ошибка в объекте насоса.

model Pompaggio


Modelica.Fluid.Machines.ControlledPump Pompa(
    redeclare package Medium = Modelica.Media.Water.StandardWater,
    //N_nominal=1500,
    use_T_start=true,
    T_start=Modelica.SIunits.Conversions.from_degC(40),
    m_flow_start=0.1,
    control_m_flow=true,
    allowFlowReversal=false,
    p_a_start=110000,
    p_b_start=130000,
    p_a_nominal=110000,
    p_b_nominal=130000,
    m_flow_nominal=0.1
    );


  Modelica.Fluid.Sources.Boundary_pT Pozzetto(redeclare package Medium = Modelica.Media.Water.StandardWater,
    nPorts = 1, T=Modelica.SIunits.Conversions.from_degC(40), p = 101325  );

  Modelica.Fluid.Vessels.OpenTank bacinella2(redeclare package Medium = Modelica.Media.Water.StandardWater,
    crossArea = 4, height = 100, level(start = 0.01), nPorts = 1,
    portsData = {Modelica.Fluid.Vessels.BaseClasses.VesselPortsData(diameter = 0.1)}, use_portsData = true);

  Modelica.Fluid.Pipes.StaticPipe tubo1(redeclare package Medium = Modelica.Media.Water.StandardWater,
    allowFlowReversal = true, diameter = 0.1, height_ab = 0, isCircular = true, length = 200, nParallel = 1);

  Modelica.Fluid.Pipes.StaticPipe tubo2(redeclare package Medium = Modelica.Media.Water.StandardWater,
    allowFlowReversal = true, diameter = 0.1, height_ab = 0, isCircular = true, length = 200, nParallel = 1);

equation
  connect(Pozzetto.ports[1], tubo1.port_a);
  connect(Pompa.port_a, tubo1.port_b);
  connect(Pompa.port_b, tubo2.port_a);
  //connect( tubo1.port_b, tubo2.port_a);
  connect(bacinella2.ports[1], tubo2.port_b);


end Pompaggio;

Кто-то может мне помочь? Спасибо

1 Ответ

4 голосов
/ 20 мая 2019

Модель работает как в Dymola. Это дает некоторые предупреждения, которые приводят к решению проблемы в OpenModelica. На самом деле есть две «проблемы» с моделью:

  1. Начальные значения для bacinella2: установка значений на T_start(start=293.15), ports(p(start={101422.89174430574}))) позволяет избежать предупреждений о низком давлении в среде. Но на самом деле это не должно решить проблему оригинальной модели, которая возникает во время перевода.
  2. Настройки для stateSelect в Pompa.medium. Dymola выводит предупреждения о том, что он изменил настройки с StateSelect.prefer на StateSelect.default, поскольку они не могут быть дифференцированы. Это сделано для Pompa.medium.h и Pompa.medium.p. Кажется, OpenModelica не может сделать это автоматически, поэтому изменение вручную кажется необходимым.

Код ниже является продолжением вашего примера с двумя изменениями, упомянутыми выше. Он протестирован в OpenModelica 1.13.2 (64-разрядная версия) и работает нормально.

model Pompaggio_modified

Modelica.Fluid.Machines.ControlledPump Pompa(
    redeclare package Medium = Modelica.Media.Water.StandardWater,
    medium(h(stateSelect = StateSelect.default), p(stateSelect = StateSelect.default)),
    use_T_start=true,
    T_start=Modelica.SIunits.Conversions.from_degC(40),
    m_flow_start=0.1,
    control_m_flow=true,
    allowFlowReversal=false,
    p_a_start=110000,
    p_b_start=130000,
    p_a_nominal=110000,
    p_b_nominal=130000,
    m_flow_nominal=0.1);
    //N_nominal=1500,

  Modelica.Fluid.Sources.Boundary_pT Pozzetto(redeclare package Medium = Modelica.Media.Water.StandardWater,
    nPorts = 1, T=Modelica.SIunits.Conversions.from_degC(40), p = 101325);

  Modelica.Fluid.Vessels.OpenTank bacinella2(redeclare package Medium = Modelica.Media.Water.StandardWater,
    crossArea = 4, height = 100, level(start = 0.01), nPorts = 1,
    portsData = {Modelica.Fluid.Vessels.BaseClasses.VesselPortsData(diameter = 0.1)}, use_portsData = true,
    T_start(start=293.15),
    ports(p(start={101422.89174430574})));

  Modelica.Fluid.Pipes.StaticPipe tubo1(redeclare package Medium = Modelica.Media.Water.StandardWater,
    allowFlowReversal = true, diameter = 0.1, height_ab = 0, isCircular = true, length = 200, nParallel = 1);

  Modelica.Fluid.Pipes.StaticPipe tubo2(redeclare package Medium = Modelica.Media.Water.StandardWater,
    allowFlowReversal = true, diameter = 0.1, height_ab = 0, isCircular = true, length = 200, nParallel = 1);

equation 
  connect(Pozzetto.ports[1], tubo1.port_a);
  connect(Pompa.port_a, tubo1.port_b);
  connect(Pompa.port_b, tubo2.port_a);
  //connect( tubo1.port_b, tubo2.port_a);
  connect(bacinella2.ports[1], tubo2.port_b);

  annotation (uses(Modelica(version="3.2.3")));
end Pompaggio_modified;
...