Why do q_nom & head_nom always give issues for mod

2019-08-03 06:08发布

问题:

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;