Why do q_nom & head_nom always give issues for models built from ThermoPower Library?

微笑、不失礼 提交于 2019-12-11 04:13:57

问题


I've been working within the ThermoPower Library of OpenModelica for a while now trying to build a Combined Power Cycle by first modeling the Brayton and Rankine Power Cycles first.

Every time I attempt to use a pump, I always receive errors like:

[1] 10:31:00 Translation Error [ThermoPower.Examples: 2523:70-2523:81]: Variable q_nom not found in scope ThermoPower.Examples.RankineCycle.Models.

[2] 10:31:00 Translation Error [ThermoPower.Examples: 2531:21-2531:69]: Cyclically dependent constants or parameters found in scope : {q_nom}, {head_nom} (ignore with -d=ignoreCycles).

Any pump chosen, will always declare these errors for my models. I've tried many different types of solutions, all without success.

1) I've tried declaring values for the pump's component parameters using a vector format i.e. : q_nom = {1,1,1}. Same errors pop up when trying to simulate.

2) I've tried clicking the error directly only to be re-directed to ThermoPower.PowerPlants. Here I'm directed towards a line of code:

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

Here, I've tried manually entering values for q_nom & head_nom with no success. I've also tried copying the line of code above at the top of my model trying to "redeclare" the function "flowCharacteristic". This only results in an error about incorrectly redeclaring a class that is un-declarable.

I've tried other solutions but with no success.

If you have any advice on how to troubleshoot this issue please feel free to leave your input below!

UPDATE:

Here is the code to the model I have been working on for some time now.

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, 
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:


I managed to reproduce the error using OMEdit v1.12.0 (64-bit). However, it seems that it is a bug with the OpenModelica-Version we are using. Same model in Dymola and no Errors/Warnings. Furthermore, simulating the example works for me in OpenModelica. Also, using this line:

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

Fixes this translation error. Maybe try to download an other build of OM. If you use the latest release, downgrade, if you use an old release, upgrade. If you can not fix this error using the line i presented, please provide the version of the ThermoLib and OM you are using.

EDIT: Looking at your model, there are some issues:

  1. When using a pump for your rankine cycle, you have to select a function for the flow characteristic and give values for q_nom and head_nom.
  2. The cycle you provided lacks a mover. The gas has to be moved through your cycle either by a pump or a massFlowSource.
  3. You declared a parameter partialArc_nom = 1 which is not used in the model SteamTurbine of ThermoPower.

Fixing all these errors results in a model which translates both in OM and Dymola without errors. The simulation does not work because some inital values and equations cause trouble. Changing the gas-medium or setting consitent initialValues by propagating the inital values of each submodel to the top-level may solve this problem. This could also be caused by the dummy-values i've set for the paramteres q_nom and head_nom. Choosing physical values for these parameters is up to you. Find below the fixed code which worked for me.

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;


来源:https://stackoverflow.com/questions/54792756/why-do-q-nom-head-nom-always-give-issues-for-models-built-from-thermopower-lib

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!