Странная проблема с библиотекой жидкости в openmodelica - PullRequest
1 голос
/ 20 мая 2019

Я написал простой код для эксперимента по использованию машины PrescribedPump в пакете Fluid стандартной библиотеки. Я использую OpenModelica 1.13.2. Я хотел бы перекачать немного воды из резервуара в другой, используя предписанный насос с постоянным значением 10000.

Вот код:

model PompaPilotata

  package Medium = Modelica.Media.Water.ConstantPropertyLiquidWater;

  inner Modelica.Fluid.System system ;
  Modelica.Fluid.Vessels.OpenTank bacinella1(redeclare package Medium = Medium,
    T_ambient = system.T_ambient, T_start = system.T_ambient, crossArea = 4, energyDynamics = Modelica.Fluid.Types.Dynamics.FixedInitial,
    height = 10, level_start = 2, massDynamics = Modelica.Fluid.Types.Dynamics.FixedInitial, nPorts = 1, p_ambient = system.p_ambient,
    use_HeatTransfer = false, use_T_start = true, use_portsData = false)  ;

  Modelica.Fluid.Vessels.OpenTank bacinella2(redeclare package Medium = Medium,
    T_ambient = system.T_ambient, T_start = system.T_ambient, crossArea = 4, energyDynamics = Modelica.Fluid.Types.Dynamics.FixedInitial,
    height = 10, level_start = 2, massDynamics = Modelica.Fluid.Types.Dynamics.FixedInitial, nPorts = 1, p_ambient = system.p_ambient,
    use_HeatTransfer = false, use_T_start = true, use_portsData = false)  ;

  Modelica.Fluid.Machines.PrescribedPump Pompa(redeclare package Medium = Medium,
    medium(h(stateSelect = StateSelect.default), p(stateSelect = StateSelect.default)),N_nominal = 100, V = 0.1, allowFlowReversal = false,
    checkValve = true, energyDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, m_flow_start = 0.0000001,
    massDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, nParallel = 1, use_HeatTransfer = false, use_N_in = true) ;

  Modelica.Blocks.Sources.Constant Costante(k = 10000);

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

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

equation
  connect(tubo2.port_b, bacinella2.ports[1]);
  connect(Pompa.port_b, tubo2.port_a);
  connect(tubo1.port_b, Pompa.port_a);
  connect(bacinella1.ports[1], tubo1.port_a);
  connect(Costante.y, Pompa.N_in);
end PompaPilotata;

Я получаю это сообщение об ошибке от компилятора:

В файле, включенном в C: /OpenModelica1.13.264bit/include/omc/c/util/modelica_string.h: 38: 0, из C: /OpenModelica1.13.264bit/include/omc/c/openmodelica_func.h: 52, от PompaPilotata_model.h: 6, от PompaPilotata_06inz.c: 2: PompaPilotata_06inz.c: в функции 'PompaPilotata_eqFunction_237': C: /OpenModelica1.13.264bit/include/omc/c/meta/meta_modelica_data.h: 231: 21: ошибка: несовместимый тип для аргумента 2 параметра «omc_Modelica_Fluid_Machines_PrescribedPump $ Pompa_flowCharacteristic» #define mmc_mk_real mmc_mk_rcon ^ C: /OpenModelica1.13.264bit/include/omc/c/meta/meta_modelica_data.h: 225: 45: примечание: в определении макроса 'mmc_unbox_real' #define mmc_unbox_real (X) mmc_prim_get_real (X) ^ PompaPilotata_06inz.c: 3005: 139: примечание: в расширении макроса 'mmc_mk_real' data-> SimulationInfo-> realParameter [7] = mmc_unbox_real (omc_Modelica_Fluid_Machines_PrescribedPump $ Pompa_flowCharacteristic (threadData, mmc_mk_real (data-> SimulationInfo-> realParameter [5]))); ^ В файл включен из PompaPilotata_model.h: 23: 0, от PompaPilotata_06inz.c: 2: PompaPilotata_functions.h: 223: 15: примечание: ожидается «modelica_real {aka double}», но аргумент имеет тип «void *» modelica_real omc_Modelica_Fluid_Machines_PrescribedPump $ Pompa_flowCharacteristic (threadData_t threadData, modelica_real _V_flow); ^ : рецепт для цели «PompaPilotata_06inz.o» не удался \ tools \ msys \ mingw64 \ bin \ mingw32-make: [PompaPilotata_06inz.o] Ошибка 1 \ tools \ msys \ mingw64 \ bin \ mingw32-make: * Ожидание незавершенных работ .... Процесс компиляции не выполнен. Выход с кодом 2.

Кто-то может объяснить мне, что это значит и как это исправить? Спасибо

1 Ответ

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

Модель не работает в Dymola eiter, но выдает следующую подсказку:

Function Pompa.flowCharacteristic_Unique7 is neither external nor has an algorithm. It should have been redeclared.

Следовательно, повторное выделение функции для flowCharacteristic должно помочь. Копирование этой части из Modelica.Fluid.Examples.PumpingSystem и уменьшение значений для V_flow_nominal в 1000 раз (что является диким предположением) дает:

  Modelica.Fluid.Machines.PrescribedPump Pompa(redeclare package Medium = Medium,
    redeclare function flowCharacteristic = Modelica.Fluid.Machines.BaseClasses.PumpCharacteristics.quadraticFlow (V_flow_nominal={0.001,0.0025,0.005}, head_nominal={100,60,0}),
    medium(h(stateSelect = StateSelect.default), p(stateSelect = StateSelect.default)),N_nominal = 100, V = 0.1, allowFlowReversal = false,
    checkValve = true, energyDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, m_flow_start = 0.0000001,
    massDynamics = Modelica.Fluid.Types.Dynamics.DynamicFreeInitial, nParallel = 1, use_HeatTransfer = false, use_N_in = true);

С добавлением второй строки.

...