Почему q_nom & head_nom всегда дают проблемы для моделей, созданных из библиотеки ThermoPower? - PullRequest
0 голосов
/ 20 февраля 2019

Я некоторое время работал в библиотеке ThermoPower в OpenModelica, сейчас пытаюсь построить комбинированный цикл питания, сначала сначала смоделировав циклы мощности Брайтона и Ранкина.

Каждый раз, когда я пытаюсь использовать насосЯ всегда получаю сообщения об ошибках типа:

[1] 10:31:00 Ошибка перевода [ThermoPower.Examples: 2523: 70-2523: 81]: переменная q_nom не найдена в области действия ThermoPower.Examples.RankineCycle.Models.

[2] 10:31:00 Ошибка перевода [ThermoPower.Examples: 2531: 21-2531: 69]: циклически зависимые константы или параметры, найденные в области видимости: {q_nom}, {head_nom} (игнорировать с помощью-d = ignoreCycles).

Любой выбранный насос всегда будет объявлять эти ошибки для моих моделей.Я пробовал много разных типов решений, но все безуспешно.

1) Я пытался объявить значения параметров компонентов насоса, используя векторный формат, то есть: q_nom = {1,1,1}.При попытке симуляции всплывают те же ошибки.

2) Я пытался щелкнуть ошибку напрямую, только чтобы перенаправить на ThermoPower.PowerPlants.Здесь я нацелен на строку кода:

function flowCharacteristic =
        ThermoPower.Functions.PumpCharacteristics.quadraticFlow (q_nom=
            q_nom, head_nom=head_nom);

Здесь я попытался вручную ввести значения для q_nom & head_nom, но безуспешно.Я также попытался скопировать приведенную выше строку кода в верхней части моей модели, пытаясь «повторно объявить» функцию «flowCharacteristic».Это приводит только к ошибке неправильного повторного объявления класса, который не подлежит объявлению.

Я пробовал другие решения, но безуспешно.

Если у вас есть какие-либо советы по устранению этой проблемы, пожалуйста, не стесняйтесь оставлять свои данные ниже!

ОБНОВЛЕНИЕ:

Вот код модели, которой я былработаю уже некоторое время.

модель Rankine_HRSG

ThermoPower.PowerPlants.HRSG.Components.HE Superheater(
Cfnom_F = 0, 
Cfnom_G = 0, 
FFtype_F = ThermoPower.Choices.Flow1D.FFtypes.NoFriction, 
FFtype_G = ThermoPower.Choices.Flow1D.FFtypes.NoFriction, 
FluidPhaseStart = ThermoPower.Choices.FluidPhase.FluidPhases.Steam, 
HCtype_F = ThermoPower.Choices.Flow1D.HCtypes.Downstream, 
Kfnom_F = 0, 
Kfnom_G = 0, 
N_F = 2, 
N_G = 2, 
Nt = 1, 
Tstartbar_G = 1073.15, 
dpnom_F = 0, 
dpnom_G = 0, 
exchSurface_F = 10, 
exchSurface_G = 10, 
extSurfaceTub = 20, 
fluidNomFlowRate = 50, 
fluidNomPressure = 1e+06, 
fluidVol = 10, 
gasNomFlowRate = 102, 
gasNomPressure = 101325, 
gasQuasiStatic = false, 
gasVol = 10, 
lambda = 366, 
metalVol = 10, 
pstart_F = 5e+06, 
pstart_G = 101325, 
rhonom_F = 1000, 
rhonom_G = 0.33)
  annotation(
Placement(visible = true, transformation(origin = {50, 50}, extent = 
{{-10, -10}, {10, 10}}, rotation = 180)));

ThermoPower.PowerPlants.HRSG.Components.HE Economizer(
Cfnom_F = 0,
Cfnom_G = 0, 
FFtype_F = ThermoPower.Choices.Flow1D.FFtypes.NoFriction, 
FFtype_G = ThermoPower.Choices.Flow1D.FFtypes.NoFriction, 
FluidPhaseStart = ThermoPower.Choices.FluidPhase.FluidPhases.Liquid, 
HCtype_F = ThermoPower.Choices.Flow1D.HCtypes.Downstream, 
Kfnom_F = 0, 
Kfnom_G = 0, 
N_F = 2, 
N_G = 2, 
Nt = 1, 
Tstartbar_G = 1023.15, 
dpnom_F = 0, 
dpnom_G = 0, 
exchSurface_F = 10, 
exchSurface_G = 10, 
extSurfaceTub = 20, 
fluidNomFlowRate = 50, 
fluidNomPressure = 1e+06, 
fluidVol = 10, 
gasNomFlowRate = 102, 
gasNomPressure = 101325, 
gasVol = 10, 
lambda = 366, 
metalVol = 10, 
pstart_F = 5e+06, 
pstart_G = 101325, 
rhonom_F = 1000, 
rhonom_G = 0.33)
  annotation(
Placement(visible = true, transformation(origin = {50, -50}, extent = 
{{-10, -10}, {10, 10}}, rotation = 180)));

ThermoPower.Examples.HRB.Models.Evaporator Evaporator(
Cfnom_G = 0, 
FFtype_G = ThermoPower.Choices.Flow1D.FFtypes.NoFriction, 
Kfnom_G = 0,
N = 2, 
Tstart = 1048.15, 
cm = 376.812, 
dpnom_G = 0, 
exchSurface = 10, 
fluidNomFlowRate = 50, 
fluidNomPressure = 1e+06, 
fluidVol = 10, 
gamma = 300, 
gasNomFlowRate = 102, 
gasNomPressure = 101325, 
gasVol = 10, 
metalVol = 10, 
rhom = 8400, 
rhonom_G = 0.33)
  annotation(
Placement(visible = true, transformation(origin = {50, 0}, extent = {{-10, 
-10}, {10, 10}}, rotation = 180)));

ThermoPower.Gas.SourcePressure FlueGasSource(
redeclare package Medium = ThermoPower.Media.FlueGas, 
R = 0, 
T = 800, 
p0 = 101325)
  annotation(
Placement(visible = true, transformation(origin = {94, 50}, extent = 
{{-10, -10}, {10, 10}}, rotation = 180)));

ThermoPower.Gas.SinkPressure FlueGasSink(
redeclare package Medium = ThermoPower.Media.FlueGas, 
R = 0, 
T = 700, 
p0 = 101325)
  annotation(
Placement(visible = true, transformation(origin = {10, -50}, extent = 
{{-10, -10}, {10, 10}}, rotation = 180)));

ThermoPower.Water.SteamTurbineStodola SteamTurbine(
PRstart = 1,
eta_iso_nom = 0.92, 
explicitIsentropicEnthalpy = true, 
partialArc_nom = 1, 
pnom = 10e5, 
wnom = 50, 
wstart = 50)
  annotation(
Placement(visible = true, transformation(origin = {0, 80}, extent = {{-10, 
-10}, {10, 10}}, rotation = 180)));

ThermoPower.Examples.RankineCycle.Models.PrescribedPressureCondenser 
Condenser(
Vtot = 10, 
p = 1e+06)
  annotation(
Placement(visible = true, transformation(origin = {-50, 30}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Water.Pump Pump(
CheckValve = true,Np0 = 1, 
V = 10, 
dp0 = 0, head(start = 1), 
hstart = 1e5, 
n0 = 150, 
n_const = 150, q_single(fixed = false), rho0 = 1000, 
w0 = 50, 
w_single(fixed = false), 
wstart = 50)
  annotation(
Placement(visible = true, transformation(origin = {-38, -12}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));

Modelica.Mechanics.Rotational.Sensors.PowerSensor PowerSensor annotation(
Placement(visible = true, transformation(origin = {-38, 68}, extent = 
{{-10, -10}, {10, 10}}, rotation = 180)));

ThermoPower.Electrical.Generator Generator annotation(
Placement(visible = true, transformation(origin = {-68, 68}, extent = 
{{-10, -10}, {10, 10}}, rotation = 180)));

Modelica.Blocks.Continuous.FirstOrder firstOrder1 annotation(
Placement(visible = true, transformation(origin = {-50, 92}, extent = 
{{-8, -8}, {8, 8}}, rotation = 180)));

Modelica.Blocks.Interfaces.RealOutput Power annotation(
Placement(visible = true, transformation(origin = {-110, 0}, extent = 
{{-10, -10}, {10, 10}}, rotation = 180), iconTransformation(origin = 
{-110, 0}, extent = {{-10, -10}, {10, 10}}, rotation = 180)));
inner ThermoPower.System system annotation(
Placement(visible = true, transformation(origin = {90, 90}, extent = 
{{-10, -10}, {10, 10}}, rotation = 0)));
equation
connect(PowerSensor.flange_b, Generator.shaft) annotation(
Line(points = {{-48, 68}, {-59, 68}}));
connect(SteamTurbine.shaft_b, PowerSensor.flange_a) annotation(
Line(points = {{-6, 80}, {-14, 80}, {-14, 68}, {-28, 68}}));
connect(SteamTurbine.outlet, Condenser.steamIn) annotation(
Line(points = {{-8, 72}, {-8, 52}, {-50, 52}, {-50, 40}}, color = {0, 0, 
255}));
connect(Superheater.waterOut, SteamTurbine.inlet) annotation(
Line(points = {{50, 60}, {50, 64}, {8, 64}, {8, 72}}, color = {0, 0, 
255}));
connect(Evaporator.waterOut, Superheater.waterIn) annotation(
Line(points = {{50, 10}, {50, 10}, {50, 40}, {50, 40}}, color = {0, 0, 
255}));
connect(Economizer.waterOut, Evaporator.waterIn) annotation(
Line(points = {{50, -40}, {50, -40}, {50, -10}, {50, -10}}, color = {0, 0, 
255}));
connect(firstOrder1.y, Power) annotation(
Line(points = {{-58, 92}, {-90, 92}, {-90, 0}, {-102, 0}, {-102, 0}, 
{-110, 0}}, color = {0, 0, 127}));
connect(PowerSensor.power, firstOrder1.u) annotation(
Line(points = {{-30, 80}, {-30, 80}, {-30, 92}, {-40, 92}, {-40, 92}, 
{-40, 92}}, color = {0, 0, 127}));
connect(Condenser.waterOut, Pump.infl) annotation(
Line(points = {{-50, 20}, {-50, -10}, {-46, -10}}, color = {0, 0, 255}));
connect(Pump.outfl, Economizer.waterIn) annotation(
Line(points = {{-32, -4}, {-26, -4}, {-26, -80}, {50, -80}, {50, -60}, 
{50, -60}}, color = {0, 0, 255}));
connect(Economizer.gasOut, FlueGasSink.flange) annotation(
Line(points = {{40, -50}, {20, -50}, {20, -50}, {20, -50}}, color = {159, 
159, 223}));
connect(Superheater.gasOut, Evaporator.gasIn) annotation(
Line(points = {{40, 50}, {20, 50}, {20, 30}, {80, 30}, {80, 0}, {60, 0}}, 
color = {159, 159, 223}));
connect(Evaporator.gasOut, Economizer.gasIn) annotation(
Line(points = {{40, 0}, {20, 0}, {20, -26}, {20, -26}, {20, -30}, {80, 
-30}, {80, -50}, {60, -50}, {60, -50}}, color = {159, 159, 223}));
connect(FlueGasSource.flange, Superheater.gasIn) annotation(
Line(points = {{84, 50}, {60, 50}, {60, 50}, {60, 50}}, color = {159, 159, 
223}));

annotation(
uses(ThermoPower(version = "3.1"), Modelica(version = "3.2.2")));end 
Rankine_HRSG;

1 Ответ

0 голосов
/ 23 февраля 2019

Мне удалось воспроизвести ошибку с помощью OMEdit v1.12.0 (64-разрядная версия).Тем не менее, похоже, что это ошибка в OpenModelica-версии, которую мы используем.Та же модель в Dymola и без ошибок / предупреждений.Кроме того, моделирование примера работает для меня в OpenModelica.Также, используя эту строку:

  function flowCharacteristic =
      ThermoPower.Functions.PumpCharacteristics.quadraticFlow (q_nom={1,2,3},
        head_nom={1,2,3});

Исправляет эту ошибку перевода.Может быть, попробуйте скачать другую сборку ОМ.Если вы используете последнюю версию, понизьте версию, если вы используете старую версию, обновите версию.Если вы не можете исправить эту ошибку, используя представленную мной строку, укажите версию ThermoLib и OM, которые вы используете.

РЕДАКТИРОВАТЬ: Если посмотреть на вашу модель, то возникли некоторые проблемы:

  1. При использовании насоса для цикла Ренкина вы должны выбрать функцию для характеристики потока и задать значения для q_nom и head_nom.
  2. предоставленный вами циклне хватает движителя.Газ должен перемещаться в вашем цикле либо насосом, либо massFlowSource.
  3. Вы объявили параметр partialArc_nom = 1, который не используется в модели SteamTurbine ThermoPower.

Исправление всех этих ошибок приводит к модели, которая переводит как ОМ, так и Димолу без ошибок.Симуляция не работает, потому что некоторые начальные значения и уравнения вызывают проблемы.Изменение газовой среды или установка начальных значений компонентов путем распространения начальных значений каждой подмодели на верхний уровень может решить эту проблему.Это также может быть вызвано фиктивными значениями, которые я установил для параметров q_nom и head_nom.Выбор физических значений для этих параметров зависит от вас.Найдите ниже исправленный код, который работал для меня.

model Rankine_HRSG

ThermoPower.PowerPlants.HRSG.Components.HE Superheater(
Cfnom_F = 0,
Cfnom_G = 0,
FFtype_F = ThermoPower.Choices.Flow1D.FFtypes.NoFriction,
FFtype_G = ThermoPower.Choices.Flow1D.FFtypes.NoFriction,
FluidPhaseStart = ThermoPower.Choices.FluidPhase.FluidPhases.Steam,
HCtype_F = ThermoPower.Choices.Flow1D.HCtypes.Downstream,
Kfnom_F = 0,
Kfnom_G = 0,
N_F = 2,
N_G = 2,
Nt = 1,
dpnom_F = 0,
dpnom_G = 0,
exchSurface_F = 10,
exchSurface_G = 10,
extSurfaceTub = 20,
fluidNomFlowRate = 50,
fluidVol = 10,
gasNomFlowRate = 102,
gasQuasiStatic = false,
gasVol = 10,
lambda = 366,
metalVol = 10,
rhonom_F = 1000,
rhonom_G = 0.33,
    gasNomPressure=101325,
    fluidNomPressure=1000000,
    rhomcm=1000,
    Tstartbar_G=1073.15,
    pstart_G=101325,
    pstart_F=5000000)
  annotation (
Placement(visible = true, transformation(origin = {50, 50}, extent=
{{-10, -10}, {10, 10}}, rotation = 180)));

ThermoPower.PowerPlants.HRSG.Components.HE Economizer(
Cfnom_F = 0,
Cfnom_G = 0,
FFtype_F = ThermoPower.Choices.Flow1D.FFtypes.NoFriction,
FFtype_G = ThermoPower.Choices.Flow1D.FFtypes.NoFriction,
FluidPhaseStart = ThermoPower.Choices.FluidPhase.FluidPhases.Liquid,
HCtype_F = ThermoPower.Choices.Flow1D.HCtypes.Downstream,
Kfnom_F = 0,
Kfnom_G = 0,
N_F = 2,
N_G = 2,
Nt = 1,
dpnom_F = 0,
dpnom_G = 0,
exchSurface_F = 10,
exchSurface_G = 10,
extSurfaceTub = 20,
fluidNomFlowRate = 50,
fluidVol = 10,
gasNomFlowRate = 102,
gasVol = 10,
lambda = 366,
metalVol = 10,
rhonom_F = 1000,
rhonom_G = 0.33,
    gasNomPressure=101325,
    fluidNomPressure=1000000,
    rhomcm=1000,
    Tstartbar_G=1023.15,
    pstart_G=101325,
    pstart_F=5000000)
  annotation (
Placement(visible = true, transformation(origin = {50, -50}, extent=
{{-10, -10}, {10, 10}}, rotation = 180)));

ThermoPower.Examples.HRB.Models.Evaporator Evaporator(
Cfnom_G = 0,
FFtype_G = ThermoPower.Choices.Flow1D.FFtypes.NoFriction,
Kfnom_G = 0,
N = 2,
cm = 376.812,
dpnom_G = 0,
exchSurface = 10,
fluidNomFlowRate = 50,
fluidVol = 10,
gamma = 300,
gasNomFlowRate = 102,
gasVol = 10,
metalVol = 10,
rhom = 8400,
rhonom_G = 0.33,
    gasNomPressure=101325,
    fluidNomPressure=1000000,
    Tstart=1048.15)
  annotation (
Placement(visible = true, transformation(origin = {50, 0}, extent = {{-10,
-10}, {10, 10}}, rotation = 180)));

ThermoPower.Gas.SourceMassFlow FlueGasSource(
redeclare package Medium = ThermoPower.Media.FlueGas,
    p0=101325,
    T=800,
    w0=1)
  annotation (
Placement(visible = true, transformation(origin = {94, 50}, extent=
{{-10, -10}, {10, 10}}, rotation = 180)));

ThermoPower.Gas.SinkPressure FlueGasSink(
redeclare package Medium = ThermoPower.Media.FlueGas,
R = 0,
T = 700,
p0 = 101325)
  annotation (
Placement(visible = true, transformation(origin = {10, -50}, extent=
{{-10, -10}, {10, 10}}, rotation = 180)));

ThermoPower.Water.SteamTurbineStodola SteamTurbine(
PRstart = 1,
eta_iso_nom = 0.92,
explicitIsentropicEnthalpy = true,
wnom = 50,
wstart = 50,
    pnom=1000000,
    Kt=1)
  annotation (
Placement(visible = true, transformation(origin = {0, 80}, extent = {{-10,
-10}, {10, 10}}, rotation = 180)));
//partialArc_nom = 1,

ThermoPower.Examples.RankineCycle.Models.PrescribedPressureCondenser
Condenser(
Vtot = 10, p=1000000)
  annotation (
Placement(visible = true, transformation(origin = {-50, 30}, extent=
{{-10, -10}, {10, 10}}, rotation = 0)));

ThermoPower.Water.Pump Pump(
CheckValve = true,Np0 = 1,
V = 10,
dp0 = 0, head(start = 1),
hstart = 1e5,
n0 = 150,
n_const = 150, q_single(fixed = false), rho0 = 1000,
w0 = 50,
w_single(fixed = false),
wstart = 50,
    redeclare function efficiencyCharacteristic =
        ThermoPower.Functions.PumpCharacteristics.constantEfficiency (eta_nom=0.8),
    redeclare function flowCharacteristic =
        ThermoPower.Functions.PumpCharacteristics.linearFlow (q_nom={0.5,1},
          head_nom={10,15}))
  annotation (
Placement(visible = true, transformation(origin = {-38, -12}, extent=
{{-10, -10}, {10, 10}}, rotation = 0)));

Modelica.Mechanics.Rotational.Sensors.PowerSensor PowerSensor annotation (
Placement(visible = true, transformation(origin = {-38, 68}, extent=
{{-10, -10}, {10, 10}}, rotation = 180)));

ThermoPower.Electrical.Generator Generator annotation (
Placement(visible = true, transformation(origin = {-68, 68}, extent=
{{-10, -10}, {10, 10}}, rotation = 180)));

Modelica.Blocks.Continuous.FirstOrder firstOrder1 annotation (
Placement(visible = true, transformation(origin = {-50, 92}, extent=
{{-8, -8}, {8, 8}}, rotation = 180)));

Modelica.Blocks.Interfaces.RealOutput Power annotation (
Placement(visible = true, transformation(origin = {-110, 0}, extent=
{{-10, -10}, {10, 10}}, rotation = 180), iconTransformation(origin=
{-110, 0}, extent = {{-10, -10}, {10, 10}}, rotation = 180)));
inner ThermoPower.System system annotation (
Placement(visible = true, transformation(origin = {90, 90}, extent=
{{-10, -10}, {10, 10}}, rotation = 0)));
equation
connect(PowerSensor.flange_b, Generator.shaft) annotation (
Line(points={{-48,68},{-59.4,68}}));
connect(SteamTurbine.shaft_b, PowerSensor.flange_a) annotation (
Line(points={{-6.4,80},{-14,80},{-14,68},{-28,68}}));
connect(SteamTurbine.outlet, Condenser.steamIn) annotation (
Line(points = {{-8, 72}, {-8, 52}, {-50, 52}, {-50, 40}}, color = {0, 0,
255}));
connect(Superheater.waterOut, SteamTurbine.inlet) annotation (
Line(points = {{50, 60}, {50, 64}, {8, 64}, {8, 72}}, color = {0, 0,
255}));
connect(Evaporator.waterOut, Superheater.waterIn) annotation (
Line(points = {{50, 10}, {50, 10}, {50, 40}, {50, 40}}, color = {0, 0,
255}));
connect(Economizer.waterOut, Evaporator.waterIn) annotation (
Line(points = {{50, -40}, {50, -40}, {50, -10}, {50, -10}}, color = {0, 0,
255}));
connect(firstOrder1.y, Power) annotation (
Line(points={{-58.8,92},{-90,92},{-90,0},{-102,0},{-102,0},{-110,0}},
            color = {0, 0, 127}));
connect(PowerSensor.power, firstOrder1.u) annotation (
Line(points={{-30,79},{-30,79},{-30,92},{-40,92},{-40,92},{-40.4,92}},
            color = {0, 0, 127}));
connect(Condenser.waterOut, Pump.infl) annotation (
Line(points = {{-50, 20}, {-50, -10}, {-46, -10}}, color = {0, 0, 255}));
connect(Pump.outfl, Economizer.waterIn) annotation (
Line(points={{-32,-5},{-26,-5},{-26,-80},{50,-80},{50,-60},{50,-60}},
            color = {0, 0, 255}));
connect(Economizer.gasOut, FlueGasSink.flange) annotation (
Line(points = {{40, -50}, {20, -50}, {20, -50}, {20, -50}}, color = {159,
159, 223}));
connect(Superheater.gasOut, Evaporator.gasIn) annotation (
Line(points = {{40, 50}, {20, 50}, {20, 30}, {80, 30}, {80, 0}, {60, 0}},
color = {159, 159, 223}));
connect(Evaporator.gasOut, Economizer.gasIn) annotation (
Line(points = {{40, 0}, {20, 0}, {20, -26}, {20, -26}, {20, -30}, {80,
-30}, {80, -50}, {60, -50}, {60, -50}}, color = {159, 159, 223}));
connect(FlueGasSource.flange, Superheater.gasIn) annotation (
Line(points = {{84, 50}, {60, 50}, {60, 50}, {60, 50}}, color = {159, 159,
223}));

annotation (
uses(ThermoPower(version = "3.1"), Modelica(version = "3.2.2")));
end Rankine_HRSG;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...