From 7875491fbebdbf379a96edf4f4e4d0d177d8d5f7 Mon Sep 17 00:00:00 2001 From: "laura.maier" Date: Fri, 13 Oct 2023 11:34:29 +0200 Subject: [PATCH] Adapt units and cleanup #1575 --- .../PV/BaseClasses/Icons/partialPVIcon.mo | 54 +++---- .../PV/BaseClasses/PartialPVElectrical.mo | 2 +- .../PV/PVElectricalSingleDiodeMPP.mo | 83 +++++----- .../BaseClasses/PV/PartialPVSystem.mo | 28 ++-- .../DC/Sources/Examples/PVSingleDiode.mo | 107 ++++++++++++ .../DC/Sources/Examples/package.order | 1 + IBPSA/Electrical/DC/Sources/PVSingleDiode.mo | 26 ++- .../BaseClasses/partialPVValidation.mo | 11 +- .../Validation/PVSingleDiodeNISTValidation.mo | 152 ------------------ .../PVSingleDiodeRooftopBuildingValidation.mo | 59 ++++--- .../DC/Sources/Validation/package.order | 1 - IBPSA/Electrical/Data/PV/Generic.mo | 2 +- .../Data/PV/SingleDiodeSharpNUU235F2.mo | 37 ----- .../Data/PV/SingleDiodeSolibroSL2CIGS110.mo | 8 +- .../Data/PV/SingleDiodeSolibroSL2CIGS115.mo | 3 +- .../Data/PV/SingleDiodeSolibroSL2CIGS120.mo | 3 +- IBPSA/Electrical/Data/PV/package.order | 1 - .../DC/Sources/Examples/PVSingleDiode.mos | 37 +++++ 18 files changed, 296 insertions(+), 319 deletions(-) create mode 100644 IBPSA/Electrical/DC/Sources/Examples/PVSingleDiode.mo delete mode 100644 IBPSA/Electrical/DC/Sources/Validation/PVSingleDiodeNISTValidation.mo delete mode 100644 IBPSA/Electrical/Data/PV/SingleDiodeSharpNUU235F2.mo create mode 100644 IBPSA/Resources/Scripts/Dymola/Electrical/DC/Sources/Examples/PVSingleDiode.mos diff --git a/IBPSA/Electrical/BaseClasses/PV/BaseClasses/Icons/partialPVIcon.mo b/IBPSA/Electrical/BaseClasses/PV/BaseClasses/Icons/partialPVIcon.mo index a5e1add206..8258229de2 100644 --- a/IBPSA/Electrical/BaseClasses/PV/BaseClasses/Icons/partialPVIcon.mo +++ b/IBPSA/Electrical/BaseClasses/PV/BaseClasses/Icons/partialPVIcon.mo @@ -5,61 +5,55 @@ partial model partialPVIcon "Partial model for basic PV model icon" Rectangle(extent={{-100,100},{100,-100}}, lineColor={215,215,215},fillColor={215,215,215}, fillPattern = FillPattern.Solid), - Rectangle(extent={{-62,18},{-34,-10}}, - lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{-62,30},{-34,2}},lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{-30,18},{-2,-10}}, - lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{-30,30},{-2,2}},lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{2,18},{30,-10}}, - lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{2,30},{30,2}}, lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{-62,-14},{-34,-42}}, - lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{-62,-2},{-34,-30}},lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{-30,-14},{-2,-42}}, - lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{-30,-2},{-2,-30}},lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{2,-14},{30,-42}},lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{2,-2},{30,-30}}, lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{-62,-46},{-34,-74}},lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{-62,-34},{-34,-62}},lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{-30,50},{-2,22}},lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{-30,62},{-2,34}},lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{2,50},{30,22}}, lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{2,62},{30,34}}, lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{-62,50},{-34,22}},lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{-62,62},{-34,34}},lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{-30,-46},{-2,-74}},lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{-30,-34},{-2,-62}},lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{2,-46},{30,-74}}, lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{2,-34},{30,-62}}, lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{-94,50},{-66,22}},lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{-94,62},{-66,34}},lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{-94,18},{-66,-10}}, - lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{-94,30},{-66,2}}, lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{-94,-14},{-66,-42}}, + Rectangle(extent={{-94,-2},{-66,-30}}, lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{-94,-46},{-66,-74}}, + Rectangle(extent={{-94,-34},{-66,-62}}, lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{34,50},{62,22}}, lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{34,62},{62,34}}, lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{34,18},{62,-10}}, lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{34,30},{62,2}}, lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{34,-14},{62,-42}},lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{34,-2},{62,-30}}, lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{34,-46},{62,-74}},lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{34,-34},{62,-62}},lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{66,-46},{94,-74}},lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{66,-34},{94,-62}},lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{66,-14},{94,-42}},lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{66,-2},{94,-30}}, lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{66,18},{94,-10}}, lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{66,30},{94,2}}, lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), - Rectangle(extent={{66,50},{94,22}}, lineColor={0,0,255},fillColor={0,0,255}, + Rectangle(extent={{66,62},{94,34}}, lineColor={0,0,255},fillColor={0,0,255}, fillPattern = FillPattern.Solid), Text( extent={{-150,150},{150,110}}, diff --git a/IBPSA/Electrical/BaseClasses/PV/BaseClasses/PartialPVElectrical.mo b/IBPSA/Electrical/BaseClasses/PV/BaseClasses/PartialPVElectrical.mo index 5cd2580241..151e9fbc1e 100644 --- a/IBPSA/Electrical/BaseClasses/PV/BaseClasses/PartialPVElectrical.mo +++ b/IBPSA/Electrical/BaseClasses/PV/BaseClasses/PartialPVElectrical.mo @@ -19,7 +19,7 @@ partial model PartialPVElectrical final parameter Integer nPar=dat.nPar "Number of parallel connected cells within the PV module"; - final parameter Real Eg0(unit="eV") = dat.Eg0 + final parameter Modelica.Units.SI.Energy Eg0 = dat.Eg0 "Band gap energy under standard conditions"; Modelica.Units.SI.ElectricCurrent IPh "Photo current"; diff --git a/IBPSA/Electrical/BaseClasses/PV/PVElectricalSingleDiodeMPP.mo b/IBPSA/Electrical/BaseClasses/PV/PVElectricalSingleDiodeMPP.mo index 1c400a0fcc..9c894fa5b5 100644 --- a/IBPSA/Electrical/BaseClasses/PV/PVElectricalSingleDiodeMPP.mo +++ b/IBPSA/Electrical/BaseClasses/PV/PVElectricalSingleDiodeMPP.mo @@ -6,109 +6,104 @@ model PVElectricalSingleDiodeMPP // Main parameters under standard conditions - Modelica.Units.SI.ElectricCurrent I_ph0 + Modelica.Units.SI.ElectricCurrent IPh0 "Photo current under standard conditions"; - Modelica.Units.SI.ElectricCurrent I_s0 + Modelica.Units.SI.ElectricCurrent IS0 "Saturation current under standard conditions"; - Modelica.Units.SI.Resistance R_s0 + Modelica.Units.SI.Resistance RS0 "Series resistance under standard conditions"; - Modelica.Units.SI.Resistance R_sh0 + Modelica.Units.SI.Resistance RSh0 "Shunt resistance under standard conditions"; - Real a_0(unit = "V") - "Modified diode ideality factor under standard conditions"; - Real w_0(final unit = "1") + Real a0(unit="V") "Modified diode ideality factor under standard conditions"; + Real w0(final unit="1") "MPP auxiliary correlation coefficient under standard conditions"; // Additional parameters and constants constant Real euler=Modelica.Math.exp(1.0) "Euler constant"; - constant Real q(unit = "C")= 1.602176620924561e-19 + constant Real q(unit = "A.s")= 1.602176620924561e-19 "Elementary charge"; - Modelica.Units.SI.ElectricCurrent I_mp(start=0.5*IMP0) + Modelica.Units.SI.ElectricCurrent IMP(start=0.5*IMP0) "MPP current at operating conditions"; - Modelica.Units.SI.Voltage V_mp "MPP voltage at operating conditions"; + Modelica.Units.SI.Voltage VMP "MPP voltage at operating conditions"; Modelica.Units.SI.Energy Eg "Band gap energy at operating conditions"; - Modelica.Units.SI.ElectricCurrent I_s "Saturation current at operating conditions"; + Modelica.Units.SI.ElectricCurrent IS + "Saturation current at operating conditions"; - Modelica.Units.SI.Resistance R_s "Series resistance at operating conditions"; + Modelica.Units.SI.Resistance RS "Series resistance at operating conditions"; - Modelica.Units.SI.Resistance R_sh "Shunt resistance at operating conditions"; + Modelica.Units.SI.Resistance RSh "Shunt resistance at operating conditions"; Real a(final unit = "V", start = 1.3) "Modified diode ideality factor"; - Modelica.Units.SI.Power P_mod "Output power of one PV module"; + Modelica.Units.SI.Power PMod "Output power of one PV module"; Real w(final unit = "1", start = 0) "MPP auxiliary correlation coefficient"; - Modelica.Units.SI.Voltage V_oc + Modelica.Units.SI.Voltage VOC "Open circuit voltage under operating conditions"; equation // Analytical parameter extraction equations under standard conditions (Batzelis et al., 2016) - a_0 =VOC0*(1 - TCel0*betaVOC)/(50.1 - TCel0*alphaISC); + a0 = VOC0*(1 - TCel0*betaVOC)/(50.1 - TCel0*alphaISC); - w_0 =IBPSA.Electrical.BaseClasses.PV.BaseClasses.lambertWSimple( - exp(1/(a_0/VOC0) + 1)); + w0 = IBPSA.Electrical.BaseClasses.PV.BaseClasses.lambertWSimple(exp(1/(a0/ + VOC0) + 1)); - R_s0 =(a_0*(w_0 - 1) - VMP0)/IMP0; + RS0 = (a0*(w0 - 1) - VMP0)/IMP0; - R_sh0 =a_0*(w_0 - 1)/(ISC0*(1 - 1/w_0) - IMP0); + RSh0 = a0*(w0 - 1)/(ISC0*(1 - 1/w0) - IMP0); - I_ph0 =(1 + R_s0/R_sh0)*ISC0; + IPh0 = (1 + RS0/RSh0)*ISC0; - I_s0 =I_ph0*exp(-1/(a_0/VOC0)); + IS0 = IPh0*exp(-1/(a0/VOC0)); // Parameter extrapolation equations to operating conditions (DeSoto et al., 2006) - a/a_0 = TCel/TCel0; + a/a0 = TCel/TCel0; - I_s/I_s0 = (TCel/TCel0)^3*exp(1/k*(Eg0*q/TCel0-Eg/TCel)); + IS/IS0 = (TCel/TCel0)^3*exp(1/k*(Eg0/TCel0 - Eg/TCel)); - Eg/(Eg0*q) =1 - dat.C*(TCel - TCel0); + Eg/(Eg0) =1 - dat.C*(TCel - TCel0); - R_s = R_s0; + RS = RS0; - IPh = if absRadRat > 0 - then absRadRat*(I_ph0 + TCoeISC*(TCel - TCel0)) - else 0; + IPh =if absRadRat > 0 then absRadRat*(IPh0 + TCoeISC*(TCel - TCel0)) else 0; - R_sh/R_sh0 = if noEvent(absRadRat > Modelica.Constants.eps) - then 1/absRadRat - else 0; + RSh/RSh0 = if noEvent(absRadRat > Modelica.Constants.eps) then 1/absRadRat + else 0; // Simplified power correlations at MPP using Lambert W function (Batzelis et al., 2016) - I_mp =if noEvent(absRadRat <= Modelica.Constants.eps - or w <= Modelica.Constants.eps) - then 0 else IPh*(1 - 1/w) - a*(w - 1)/R_sh; + IMP = if noEvent(absRadRat <= Modelica.Constants.eps or w <= Modelica.Constants.eps) + then 0 else IPh*(1 - 1/w) - a*(w - 1)/RSh; - V_mp = if absRadRat <= 0 then 0 else a*(w-1)-R_s*I_mp; + VMP = if absRadRat <= 0 then 0 else a*(w - 1) - RS*IMP; - V_oc =if IPh >= Modelica.Constants.eps*10 then a*log(abs((IPh/I_s + 1))) - else 0; + VOC = if IPh >= Modelica.Constants.eps*10 then a*log(abs((IPh/IS + 1))) else 0; - w = if noEvent(V_oc >= Modelica.Constants.eps) then - IBPSA.Electrical.BaseClasses.PV.BaseClasses.lambertWSimple(exp(1/(a/V_oc) - + 1)) else 0; + w =if noEvent(VOC >= Modelica.Constants.eps) then + IBPSA.Electrical.BaseClasses.PV.BaseClasses.lambertWSimple(exp(1/(a/VOC) + 1)) + else 0; // Efficiency and Performance - eta=if noEvent(HGloTil <= Modelica.Constants.eps*10) then 0 else P_mod/( + eta=if noEvent(HGloTil <= Modelica.Constants.eps*10) then 0 else PMod/( HGloTil*APan); - P_mod = V_mp*I_mp; + PMod = VMP*IMP; - P=max(0, min(PMax*nMod, P_mod*nMod)); + P=max(0, min(PMax*nMod, PMod*nMod)); annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-80}, {100,80}})), Diagram( diff --git a/IBPSA/Electrical/BaseClasses/PV/PartialPVSystem.mo b/IBPSA/Electrical/BaseClasses/PV/PartialPVSystem.mo index 9df83b6264..2404740181 100644 --- a/IBPSA/Electrical/BaseClasses/PV/PartialPVSystem.mo +++ b/IBPSA/Electrical/BaseClasses/PV/PartialPVSystem.mo @@ -1,8 +1,12 @@ within IBPSA.Electrical.BaseClasses.PV; partial model PartialPVSystem "Base PV model with internal or external MPP tracking" - extends IBPSA.Electrical.BaseClasses.PV.BaseClasses.Icons.partialPVIcon; + replaceable package PhaseSystem = + IBPSA.Electrical.PhaseSystems.PartialPhaseSystem constrainedby + IBPSA.Electrical.PhaseSystems.PartialPhaseSystem "Phase system" + annotation (choicesAllMatching=true); + replaceable parameter Data.PV.Generic dat constrainedby IBPSA.Electrical.Data.PV.Generic "PV Panel data definition" annotation (choicesAllMatching=true); @@ -34,6 +38,9 @@ partial model PartialPVSystem "Base PV model with internal or external MPP track "If true then the zenith angle is needed as input for absorption ratio calculations" annotation(Dialog(tab="Advanced"), Evaluate=true, HideResult=true); + parameter Boolean use_ter = true + "If true then the electrical terminal connector is used"; + parameter Boolean use_incAng = true "If true then the incidence angle is needed as input for absorption ratio calculations" annotation(Dialog(tab="Advanced"), Evaluate=true, HideResult=true); @@ -53,17 +60,17 @@ partial model PartialPVSystem "Base PV model with internal or external MPP track "Global irradiation on tilted surface" annotation (Placement(transformation(extent={{-20,-20},{20,20}}, rotation=0, - origin={-120,-70}), + origin={-120,-90}), iconTransformation(extent={{-20,-20},{20,20}}, rotation=0, - origin={-120,-70}))); + origin={-120,-90}))); Modelica.Blocks.Interfaces.RealInput TDryBul(final unit="K") "Ambient dry bulb temperature" annotation (Placement(transformation(extent={{-20,-20},{20,20}}, rotation=0, - origin={-120,-10}), + origin={-120,-30}), iconTransformation(extent={{-20,-20},{20,20}}, rotation=0, - origin={-120,-10}))); + origin={-120,-30}))); Modelica.Blocks.Interfaces.RealInput vWinSpe(final unit="m/s") "Wind speed" annotation ( Placement(transformation(extent={{-20,-20},{20,20}}, rotation=0, @@ -103,18 +110,18 @@ partial model PartialPVSystem "Base PV model with internal or external MPP track "Global irradiation on horizontal surface" annotation (Placement( transformation(extent={{-20,-20},{20,20}}, rotation=0, - origin={-120,-40}), iconTransformation(extent={{-20,-20}, + origin={-120,-60}), iconTransformation(extent={{-20,-20}, {20,20}}, rotation=0, - origin={-120,-40}))); + origin={-120,-60}))); Modelica.Blocks.Interfaces.RealInput HDifHor(final unit="W/m2") if use_HDifHor "Diffuse irradiation on horizontal surface" annotation (Placement( transformation(extent={{-20,-20},{20,20}}, rotation=0, - origin={-120,-100}), iconTransformation( + origin={-120,-120}), iconTransformation( extent={{-20,-20},{20,20}}, rotation=0, - origin={-120,-100}))); + origin={-120,-120}))); Modelica.Blocks.Interfaces.RealInput incAng(final unit="rad") if use_incAng "Incidence angle of irradiation" annotation (Placement(transformation(extent={{-140,30},{-100,70}}, @@ -123,6 +130,9 @@ partial model PartialPVSystem "Base PV model with internal or external MPP track "Zenith angle of irradiation" annotation (Placement(transformation(extent={{-140,60},{-100,100}}, rotation=0))); + replaceable Buildings.Electrical.Interfaces.Terminal terminal( + redeclare final package PhaseSystem = PhaseSystem) if use_ter "Generalized terminal" + annotation (Placement(transformation(extent={{-110,-10},{-90,10}}))); protected Modelica.Blocks.Interfaces.RealInput Til_in_int diff --git a/IBPSA/Electrical/DC/Sources/Examples/PVSingleDiode.mo b/IBPSA/Electrical/DC/Sources/Examples/PVSingleDiode.mo new file mode 100644 index 0000000000..55ad544cbb --- /dev/null +++ b/IBPSA/Electrical/DC/Sources/Examples/PVSingleDiode.mo @@ -0,0 +1,107 @@ +within IBPSA.Electrical.DC.Sources.Examples; +model PVSingleDiode "Example for the single-diode PV model" + extends Modelica.Icons.Example; + extends + IBPSA.Electrical.DC.Sources.Validation.BaseClasses.partialPVValidation( + weaDat(filNam=ModelicaServices.ExternalReferences.loadResource( + "modelica://IBPSA/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos"))); + Modelica.Electrical.Analog.Basic.Ground ground + annotation (Placement(transformation(extent={{-56,-20},{-36,0}}))); + Buildings.Electrical.DC.Loads.Resistor res(R=0.5, V_nominal=12) + "Resistance" + annotation (Placement(transformation(extent={{20,-10},{40,10}}))); + Buildings.Electrical.DC.Sources.ConstantVoltage sou(V=pVSys1Dio120Wp.dat.VOC0) + "Voltage source" + annotation (Placement(transformation(extent={{-32,-10},{-12,10}}))); + Buildings.Electrical.DC.Lines.TwoPortResistance lin(R=0.05) + "Transmission line" + annotation (Placement(transformation(extent={{6,40},{26,60}}))); + Buildings.Electrical.DC.Sensors.GeneralizedSensor sen "Sensor" + annotation (Placement(transformation(extent={{34,40},{54,60}}))); + IBPSA.Electrical.DC.Sources.PVSingleDiode + pVSys1Dio120Wp( + PVTecTyp=IBPSA.Electrical.BaseClasses.PV.BaseClasses.PVOptical.PVType.ThinFilmSI, + use_ter=true, + use_Til_in=false, + til(displayUnit="rad") = til, + nMod=4, + redeclare Data.PV.SingleDiodeSolibroSL2CIGS120 dat, + groRef=rho, + alt=0.08, + redeclare IBPSA.Electrical.BaseClasses.PV.PVThermalEmpMountCloseToGround + PVThe) "PV modules with a peak power of 120 Wp" + annotation (Placement(transformation(extent={{70,38},{90,62}}))); + +equation + connect(sou.terminal,res. terminal) annotation (Line( + points={{-12,0},{20,0}}, + color={0,0,255}, + smooth=Smooth.None)); + connect(lin.terminal_n,res. terminal) annotation (Line( + points={{6,50},{0,50},{0,0},{20,0}}, + color={0,0,255}, + smooth=Smooth.None)); + connect(lin.terminal_p,sen. terminal_n) annotation (Line( + points={{26,50},{34,50}}, + color={0,0,255}, + smooth=Smooth.None)); + connect(sou.n,ground. p) annotation (Line( + points={{-32,0},{-46,0}}, + color={0,0,255}, + smooth=Smooth.None)); + connect(sen.terminal_p, pVSys1Dio120Wp.terminal) + annotation (Line(points={{54,50},{70,50}}, + color={0,0,255})); + connect(pVSys1Dio120Wp.PDC, PDCSim) + annotation (Line(points={{91,50},{110,50}}, color={0,0,127})); + connect(weaBus.HDifHor, pVSys1Dio120Wp.HDifHor) annotation (Line( + points={{-59.95,-9.95},{-59.95,14},{62,14},{62,38},{68,38}}, + color={255,204,51}, + thickness=0.5)); + connect(zen.y, pVSys1Dio120Wp.zenAng) annotation (Line(points={{1,-50},{62,-50}, + {62,58},{68,58}}, color={0,0,127})); + connect(incAng.y, pVSys1Dio120Wp.incAng) annotation (Line(points={{-19,30},{62, + 30},{62,56},{66,56},{66,55},{68,55}}, color={0,0,127})); + connect(weaBus.winSpe, pVSys1Dio120Wp.vWinSpe) annotation (Line( + points={{-59.95,-9.95},{-59.95,14},{62,14},{62,52},{68,52}}, + color={255,204,51}, + thickness=0.5)); + connect(weaBus.HGloHor, pVSys1Dio120Wp.HGloHor) annotation (Line( + points={{-59.95,-9.95},{-59.95,2},{-60,2},{-60,14},{62,14},{62,44},{68,44}}, + color={255,204,51}, + thickness=0.5)); + + connect(weaBus.TDryBul, pVSys1Dio120Wp.TDryBul) annotation (Line( + points={{-59.95,-9.95},{-59.95,14},{62,14},{62,48},{68,48},{68,47}}, + color={255,204,51}, + thickness=0.5)); + connect(HGloTil.H, pVSys1Dio120Wp.HGloTil) annotation (Line(points={{-19,70},{ + 62,70},{62,56},{68,56},{68,41}}, color={0,0,127})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false)), + experiment( + StartTime=3600, + StopTime=86400, + Interval=300, + Tolerance=1e-06, + __Dymola_Algorithm="Dassl"), + Documentation(info=" +

+ This model illustrates the use of the single-diode PV model. +

+

+ It shows the exemplary DC power output for a day in San Francisco. +

+ ", + revisions=" + + "), + __Dymola_Commands(file= + "modelica://IBPSA/Resources/Scripts/Dymola/Electrical/DC/Sources/Examples/PVSingleDiode.mos" + "Simulate and plot")); +end PVSingleDiode; diff --git a/IBPSA/Electrical/DC/Sources/Examples/package.order b/IBPSA/Electrical/DC/Sources/Examples/package.order index 800d45b3d3..b3297d62b0 100644 --- a/IBPSA/Electrical/DC/Sources/Examples/package.order +++ b/IBPSA/Electrical/DC/Sources/Examples/package.order @@ -1 +1,2 @@ +PVSingleDiode VoltageSource diff --git a/IBPSA/Electrical/DC/Sources/PVSingleDiode.mo b/IBPSA/Electrical/DC/Sources/PVSingleDiode.mo index c89a989deb..72665cbcc1 100644 --- a/IBPSA/Electrical/DC/Sources/PVSingleDiode.mo +++ b/IBPSA/Electrical/DC/Sources/PVSingleDiode.mo @@ -1,7 +1,10 @@ -within IBPSA.Electrical.DC.Sources; +within IBPSA.Electrical.DC.Sources; model PVSingleDiode "Photovoltaic module model based on single diode approach" + extends IBPSA.Electrical.BaseClasses.PV.PartialPVSystem( + redeclare package PhaseSystem = IBPSA.Electrical.PhaseSystems.TwoConductor, + redeclare IBPSA.Electrical.DC.Interfaces.Terminal_p terminal, redeclare IBPSA.Electrical.BaseClasses.PV.PVOpticalAbsRat PVOpt( final alt=alt, final til=til, @@ -14,6 +17,13 @@ model PVSingleDiode PVThe(redeclare IBPSA.Electrical.Data.PV.SingleDiodeData dat=dat), replaceable IBPSA.Electrical.Data.PV.SingleDiodeData dat); +protected + IBPSA.Electrical.DC.Loads.Conductor + con(mode=Types.Load.VariableZ_P_input, + V_nominal=dat.VOC0) if use_ter + "Conductor, used to interface power with electrical circuit" + annotation (Placement(transformation(extent={{38,-10},{58,10}}))); + equation connect(PVEle.eta, PVThe.eta) annotation (Line(points={{-3.4,-53.75},{40,-53.75}, {40,-20},{-72,-20},{-72,-12.4},{-17.0909,-12.4}}, color={0,0,127})); @@ -22,25 +32,29 @@ equation connect(PVOpt.absRadRat, PVEle.absRadRat) annotation (Line(points={{-4.54545,30}, {20,30},{20,-34},{-64,-34},{-64,-50},{-17.2,-50}}, color={0, 0,127})); - connect(TDryBul, PVThe.TDryBul) annotation (Line(points={{-120,-10},{-60,-10}, + connect(TDryBul, PVThe.TDryBul) annotation (Line(points={{-120,-30},{-60,-30}, {-60,-5.2},{-17.0909,-5.2}}, color={0,0,127})); connect(zenAng, PVOpt.zenAng) annotation (Line(points={{-120,80},{-40,80},{-40, 34.8},{-17.0909,34.8}}, color={0,0,127})); - connect(HGloHor, PVOpt.HGloHor) annotation (Line(points={{-120,-40},{-20,-40}, + connect(HGloHor, PVOpt.HGloHor) annotation (Line(points={{-120,-60},{-20,-60}, {-20,30},{-17.0909,30}}, color={0,0,127})); connect(incAng, PVOpt.incAng) annotation (Line(points={{-120,50},{-60,50},{-60, 32.4},{-17.0909,32.4}}, color={0,0,127})); connect(vWinSpe, PVThe.winVel) annotation (Line(points={{-120,20},{-80,20},{-80, -8},{-18,-8},{-18,-7.6},{-17.0909,-7.6}}, color={0,0,127})); - connect(HGloTil, PVEle.HGloTil) annotation (Line(points={{-120,-70},{-80,-70}, + connect(HGloTil, PVEle.HGloTil) annotation (Line(points={{-120,-90},{-80,-90}, {-80,-72},{-40,-72},{-40,-53},{-17.2,-53}}, color={0,0,127})); - connect(HGloTil, PVThe.HGloTil) annotation (Line(points={{-120,-70},{-80,-70}, + connect(HGloTil, PVThe.HGloTil) annotation (Line(points={{-120,-90},{-80,-90}, {-80,-18},{-17.0909,-18},{-17.0909,-14.8}}, color={0,0,127})); - connect(HDifHor, PVOpt.HDifHor) annotation (Line(points={{-120,-100},{-60,-100}, + connect(HDifHor, PVOpt.HDifHor) annotation (Line(points={{-120,-120},{-60,-120}, {-60,27.6},{-17.0909,27.6}}, color={0,0,127})); connect(PVEle.P, PDC) annotation (Line(points={{-3.4,-46.25},{96,-46.25},{96,0}, {110,0}}, color={0,0,127})); + connect(con.terminal, terminal) + annotation (Line(points={{38,0},{-100,0}}, color={0,0,255})); + connect(PVEle.P, con.Pow) annotation (Line(points={{-3.4,-46.25},{70,-46.25},{ + 70,0},{58,0}}, color={0,0,127})); annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( coordinateSystem(preserveAspectRatio=false)), Documentation(info=" diff --git a/IBPSA/Electrical/DC/Sources/Validation/BaseClasses/partialPVValidation.mo b/IBPSA/Electrical/DC/Sources/Validation/BaseClasses/partialPVValidation.mo index 85eef611aa..c3b25dd7b5 100644 --- a/IBPSA/Electrical/DC/Sources/Validation/BaseClasses/partialPVValidation.mo +++ b/IBPSA/Electrical/DC/Sources/Validation/BaseClasses/partialPVValidation.mo @@ -32,13 +32,10 @@ partial model partialPVValidation Modelica.Blocks.Interfaces.RealOutput PDCSim(final unit="W") "Simulated DC output power" annotation (Placement(transformation(extent={{100,40},{120,60}}))); - Modelica.Blocks.Interfaces.RealOutput PDCMea(final unit="W") - "Measured DC power" - annotation (Placement(transformation(extent={{100,-20},{120,0}}))); BoundaryConditions.SolarIrradiation.GlobalPerezTiltedSurface HGloTil(til=til, azi=azi, rho=rho) - annotation (Placement(transformation(extent={{0,40},{20,60}}))); + annotation (Placement(transformation(extent={{-40,60},{-20,80}}))); BoundaryConditions.WeatherData.ReaderTMY3 weaDat( filNam="", @@ -51,7 +48,7 @@ partial model partialPVValidation "Number of validation day (July 28th 2023) in seconds" annotation (Placement(transformation(extent={{-100,60},{-80,80}}))); BoundaryConditions.SolarGeometry.IncidenceAngle incAng(azi=azi, til=til) - annotation (Placement(transformation(extent={{0,0},{20,20}}))); + annotation (Placement(transformation(extent={{-40,20},{-20,40}}))); BoundaryConditions.WeatherData.Bus weaBus "Weather data bus" annotation (Placement(transformation(extent={{-70,-20},{-50,0}}))); Modelica.Blocks.Routing.RealPassThrough zen "Zenith angle" @@ -97,11 +94,11 @@ equation (0.9511 - 0.1604*k_t + 4.388*k_t^2 - 16.638*k_t^3 + 12.336*k_t^4); connect(weaDat.weaBus, HGloTil.weaBus) annotation (Line( - points={{-80,-10},{-74,-10},{-74,50},{0,50}}, + points={{-80,-10},{-74,-10},{-74,70},{-40,70}}, color={255,204,51}, thickness=0.5)); connect(weaDat.weaBus, incAng.weaBus) annotation (Line( - points={{-80,-10},{-74,-10},{-74,10},{0,10}}, + points={{-80,-10},{-74,-10},{-74,30},{-40,30}}, color={255,204,51}, thickness=0.5)); connect(weaDat.weaBus, weaBus) annotation (Line( diff --git a/IBPSA/Electrical/DC/Sources/Validation/PVSingleDiodeNISTValidation.mo b/IBPSA/Electrical/DC/Sources/Validation/PVSingleDiodeNISTValidation.mo deleted file mode 100644 index d622491ebb..0000000000 --- a/IBPSA/Electrical/DC/Sources/Validation/PVSingleDiodeNISTValidation.mo +++ /dev/null @@ -1,152 +0,0 @@ -within IBPSA.Electrical.DC.Sources.Validation; -model PVSingleDiodeNISTValidation - "Model validation based on NIST measurement data" - extends Modelica.Icons.Example; - extends - IBPSA.Electrical.DC.Sources.Validation.BaseClasses.partialPVValidation; - - parameter Modelica.Units.SI.Time timZon=-5*3600 - "Time zone"; - parameter Modelica.Units.SI.Angle lon=-77.2156*Modelica.Constants.pi/180 - "Longitude"; - parameter Modelica.Units.SI.Angle lat=39.1354*Modelica.Constants.pi/180 - "Latitude"; - parameter Modelica.Units.SI.Angle azi=0 - "Surface azimuth. azi=-90 degree if surface outward unit normal points toward east; azi=0 if it points toward south"; - parameter Modelica.Units.SI.Angle til=10*Modelica.Constants.pi/180 - "Surface tilt. til=90 degree for walls; til=0 for ceilings; til=180 for roof"; - - parameter Modelica.Units.SI.Time nDay=(31+28+31+30+31+14)*24*3600 - "Day at which simulation starts"; - - - parameter Real alt(final unit="m")= 0.08 "Site altitude"; - - parameter Real rho=0.2 "Ground reflectance"; - - constant Real GSC( - final quantity="Irradiance", - final unit="W/m2") = 1376 "Solar constant"; - - Modelica.Units.SI.Irradiance HGloHor "Global horizontal irradiation"; - Modelica.Units.SI.Irradiance HDifHor "Diffuse horizontal irradiation"; - Real k_t(final unit="1", start=0.5) "Clearness index"; - Modelica.Units.SI.Angle solDec "Solar decimal angle"; - Modelica.Units.SI.Angle solHouAng "Solar hour angle"; - Modelica.Units.SI.Time cloTim "Clock time"; - - Modelica.Blocks.Sources.CombiTimeTable NISTdat( - tableOnFile=true, - tableName="Roof2016", - fileName=ModelicaServices.ExternalReferences.loadResource("modelica://IBPSA/Resources/Data/Electrical/DC/Sources/Validation/NIST_onemin_Roof_2016.txt"), - columns={3,5,2,4}, - smoothness=Modelica.Blocks.Types.Smoothness.ContinuousDerivative) - "The PVSystem model is validaded with measurement data from: https://pvdata.nist.gov/. 1 - Air temperature in degC, 2 - Wind speed in m/s, 3 - Global horizontal irradiance in W/m2, 4 - Ouput power in kW" - annotation (Placement(transformation(extent={{-98,-60},{-78,-40}}))); - - PVSingleDiode pVSinDio( - redeclare IBPSA.Electrical.Data.PV.SingleDiodeSharpNUU235F2 dat, - PVTecTyp=IBPSA.Electrical.BaseClasses.PV.BaseClasses.PVOptical.PVType.MonoSI, - nMod=312, - groRef=rho, - alt=alt, - til=til, - redeclare IBPSA.Electrical.BaseClasses.PV.PVThermalEmpMountCloseToGround - PVThe) "Single-diode PV model" annotation (Placement(transformation(extent={{60,38}, - {80,62}}))); - - Modelica.Blocks.Math.Gain frokWToW(k=1000) - "From Kilowatt to Watt transformation" - annotation (Placement(transformation(extent={{86,-16},{98,-4}}))); - Modelica.Blocks.Sources.CombiTimeTable MeaDatPVPDC( - tableOnFile=true, - tableName="MeaDatPVPDC", - fileName="NoName", - columns={2}, - smoothness=Modelica.Blocks.Types.Smoothness.ContinuousDerivative, - shiftTime=nDay - 1800) - "The PVSystem model is validaded with measurement data from: https://pvdata.nist.gov/. 1 - Air temperature in degC, 2 - Wind speed in m/s, 3 - Global horizontal irradiance in W/m2, 4 - Ouput power in kW" - annotation (Placement(transformation(extent={{60,-20},{80,0}}))); -equation - - //Approximation of diffuse horizontal irradiation still necessary because - //the validation data does not contain this information so far - solHouAng = realPassThroughSolHouAng.y; - solDec=realPassThroughSolDec.y; - cloTim=realPassThroughCloTim.y; - - HGloHor=NISTdat.y[3]; - - k_t =if HGloHor <= 0.01 - then 0 - else min(1, max(0, (HGloHor/(GSC*(1 + 0.033* - cos(360*(Modelica.Constants.pi/180)*cloTim/24/60/60/365)* - (cos(lat)*cos(solDec)*cos(solHouAng) + sin(lat)*sin(solDec))))))); - - // Erbs diffuse fraction relation - HDifHor = if HGloHor <= 0.01 - then 0 - elseif k_t <= 0.22 - then (HGloHor)*(1.0 - 0.09*k_t) - elseif k_t > 0.8 - then (HGloHor)*0.165 - else (HGloHor)* - (0.9511 - 0.1604*k_t + 4.388*k_t^2 - 16.638*k_t^3 + 12.336*k_t^4); - connect(pVSinDio.PDC, PDCSim) - annotation (Line(points={{81,50},{110,50}}, color={0,0,127})); - connect(MeaDatPVPDC.y[1], frokWToW.u) - annotation (Line(points={{81,-10},{84.8,-10}}, color={0,0,127})); - connect(frokWToW.y, PDCMea) - annotation (Line(points={{98.6,-10},{110,-10}}, color={0,0,127})); - connect(zen.y, pVSinDio.zenAng) annotation (Line(points={{1,-50},{52,-50},{52, - 58},{58,58}}, color={0,0,127})); - connect(incAng.y, pVSinDio.incAng) annotation (Line(points={{21,10},{50,10},{ - 50,55},{58,55}}, color={0,0,127})); - connect(weaBus.winSpe, pVSinDio.vWinSpe) annotation (Line( - points={{-59.95,-9.95},{-59.95,36},{40,36},{40,52},{58,52}}, - color={255,204,51}, - thickness=0.5)); - connect(weaBus.HGloHor, pVSinDio.HGloHor) annotation (Line( - points={{-59.95,-9.95},{-10,-9.95},{-10,-10},{40,-10},{40,46},{58,46}}, - color={255,204,51}, - thickness=0.5)); - connect(HGloTil.H, pVSinDio.HGloTil) annotation (Line(points={{21,50},{52,50}, - {52,43},{58,43}}, color={0,0,127})); - connect(weaBus.HDifHor, pVSinDio.HDifHor) annotation (Line( - points={{-60,-10},{-28,-10},{-28,30},{40,30},{40,40},{58,40}}, - color={255,204,51}, - thickness=0.5)); - annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( - coordinateSystem(preserveAspectRatio=false)), - experiment( - StopTime=86400, - Interval=300, - Tolerance=1e-06), - __Dymola_Commands(file= - "modelica://IBPSA/Resources/Scripts/Dymola/Electrical/DC/Sources/Validation/PVSingleDiodeNISTValidation.mos" - "Simulate and plot"), - Documentation(info=" -

The PVSystem single-diode model is validaded with measurement data from the NIST https://pvdata.nist.gov/

-

June 14th was chosen as an exemplary day for the PVSystem model.

-

The system consists of 312 mono-Si modules which are mounted on a rooftop.

-

The validation model proves that single-diode PV models tend to overestimate the power output.

-

This is due to the neglection of staining, shading, other loss effects.

-

More information can be found in the study of Maier et al. [1].

-

References

-

[1] Maier, Laura, Michael Kratz, Christian Vering, Philipp Mehrfeld, and Dirk Mueller.

-

"Open-source photovoltaic model for early building planning processes: Modeling, application and validation".

-

In Building Simulation 2021, vol. 17, pp. 2315-2316. IBPSA, 2021. -Available - -online. -

-", -revisions=" - -")); -end PVSingleDiodeNISTValidation; diff --git a/IBPSA/Electrical/DC/Sources/Validation/PVSingleDiodeRooftopBuildingValidation.mo b/IBPSA/Electrical/DC/Sources/Validation/PVSingleDiodeRooftopBuildingValidation.mo index 55b2aa8d4d..3d6ed8d1d3 100644 --- a/IBPSA/Electrical/DC/Sources/Validation/PVSingleDiodeRooftopBuildingValidation.mo +++ b/IBPSA/Electrical/DC/Sources/Validation/PVSingleDiodeRooftopBuildingValidation.mo @@ -10,6 +10,7 @@ model PVSingleDiodeRooftopBuildingValidation PVSingleDiode pVSys1Dio115Wp( PVTecTyp=IBPSA.Electrical.BaseClasses.PV.BaseClasses.PVOptical.PVType.ThinFilmSI, + use_ter=false, use_Til_in=false, til(displayUnit="rad") = til, nMod=2, @@ -22,6 +23,7 @@ model PVSingleDiodeRooftopBuildingValidation PVSingleDiode pVSys1Dio120Wp( PVTecTyp=IBPSA.Electrical.BaseClasses.PV.BaseClasses.PVOptical.PVType.ThinFilmSI, + use_ter=false, use_Til_in=false, til(displayUnit="rad") = til, nMod=4, @@ -48,56 +50,63 @@ model PVSingleDiodeRooftopBuildingValidation shiftTime=nDay - 1800) "This file contains the DC power output of two selected modules. The PVSystem model is validaded with measurement data from Rooftop building: http://www.solar-rooftop.de." annotation (Placement(transformation(extent={{60,-20},{80,0}}))); + Modelica.Blocks.Interfaces.RealOutput PDCMea(final unit="W") + "Measured DC power" + annotation (Placement(transformation(extent={{100,-20},{120,0}}))); equation - connect(HGloTil.H, pVSys1Dio115Wp.HGloTil) annotation (Line(points={{21,50},{ - 50,50},{50,23},{58,23}}, + connect(HGloTil.H, pVSys1Dio115Wp.HGloTil) annotation (Line(points={{-19,70}, + {50,70},{50,21},{58,21}}, color={0,0,127})); - connect(zen.y, pVSys1Dio120Wp.zenAng) annotation (Line(points={{1,-50},{34, - -50},{34,38},{52,38},{52,78},{58,78}}, color={0,0,127})); - connect(incAng.y, pVSys1Dio120Wp.incAng) annotation (Line(points={{21,10},{52, - 10},{52,75},{58,75}}, color={0,0,127})); - connect(HGloTil.H, pVSys1Dio120Wp.HGloTil) annotation (Line(points={{21,50},{ - 50,50},{50,63},{58,63}}, + connect(zen.y, pVSys1Dio120Wp.zenAng) annotation (Line(points={{1,-50},{50, + -50},{50,78},{58,78}}, color={0,0,127})); + connect(incAng.y, pVSys1Dio120Wp.incAng) annotation (Line(points={{-19,30},{ + 50,30},{50,75},{58,75}}, + color={0,0,127})); + connect(HGloTil.H, pVSys1Dio120Wp.HGloTil) annotation (Line(points={{-19,70}, + {50,70},{50,61},{58,61}}, color={0,0,127})); - connect(incAng.y, pVSys1Dio115Wp.incAng) annotation (Line(points={{21,10},{52, - 10},{52,35},{58,35}}, color={0,0,127})); - connect(zen.y, pVSys1Dio115Wp.zenAng) annotation (Line(points={{1,-50},{34, - -50},{34,38},{58,38}}, color={0,0,127})); + connect(incAng.y, pVSys1Dio115Wp.incAng) annotation (Line(points={{-19,30},{ + 50,30},{50,35},{58,35}}, + color={0,0,127})); + connect(zen.y, pVSys1Dio115Wp.zenAng) annotation (Line(points={{1,-50},{50, + -50},{50,38},{58,38}}, color={0,0,127})); connect(weaBus.HDifHor, pVSys1Dio115Wp.HDifHor) annotation (Line( - points={{-59.95,-9.95},{30,-9.95},{30,20},{58,20}}, + points={{-59.95,-9.95},{50,-9.95},{50,18},{58,18}}, color={255,204,51}, thickness=0.5)); connect(weaBus.HDifHor, pVSys1Dio120Wp.HDifHor) annotation (Line( - points={{-59.95,-9.95},{-18,-9.95},{-18,-10},{26,-10},{26,62},{58,62},{58, - 60}}, + points={{-59.95,-9.95},{-18,-9.95},{-18,-10},{50,-10},{50,58},{58,58}}, color={255,204,51}, thickness=0.5)); connect(weaBus.TDryBul, pVSys1Dio120Wp.TDryBul) annotation (Line( - points={{-59.95,-9.95},{-59.95,30},{-60,30},{-60,80},{0,80},{0,69},{58,69}}, + points={{-59.95,-9.95},{-59.95,30},{-60,30},{-60,48},{50,48},{50,68},{56, + 68},{56,67},{58,67}}, color={255,204,51}, thickness=0.5)); connect(weaBus.TDryBul, pVSys1Dio115Wp.TDryBul) annotation (Line( - points={{-59.95,-9.95},{-60,-9.95},{-60,30},{58,30},{58,29}}, + points={{-59.95,-9.95},{-60,-9.95},{-60,48},{50,48},{50,28},{58,28},{58, + 27}}, color={255,204,51}, thickness=0.5)); connect(weaBus.HGloHor, pVSys1Dio120Wp.HGloHor) annotation (Line( - points={{-59.95,-9.95},{-59.95,66},{58,66}}, + points={{-59.95,-9.95},{-59.95,20},{-60,20},{-60,48},{50,48},{50,64},{58, + 64}}, color={255,204,51}, thickness=0.5)); connect(weaBus.HGloHor, pVSys1Dio115Wp.HGloHor) annotation (Line( - points={{-59.95,-9.95},{-60,-9.95},{-60,64},{52,64},{52,26},{58,26}}, + points={{-59.95,-9.95},{-60,-9.95},{-60,48},{50,48},{50,24},{58,24}}, color={255,204,51}, thickness=0.5)); connect(weaBus.winSpe, pVSys1Dio115Wp.vWinSpe) annotation (Line( - points={{-59.95,-9.95},{-44,-9.95},{-44,-10},{-40,-10},{-40,36},{58,36},{ - 58,32}}, + points={{-59.95,-9.95},{-44,-9.95},{-44,-10},{-60,-10},{-60,48},{50,48},{ + 50,32},{58,32}}, color={255,204,51}, thickness=0.5)); connect(weaBus.winSpe, pVSys1Dio120Wp.vWinSpe) annotation (Line( - points={{-59.95,-9.95},{-59.95,36},{-60,36},{-60,100},{40,100},{40,72},{ - 58,72}}, + points={{-59.95,-9.95},{-59.95,36},{-60,36},{-60,48},{50,48},{50,72},{58, + 72}}, color={255,204,51}, thickness=0.5)); connect(pVSys1Dio120Wp.PDC, add.u1) @@ -106,10 +115,10 @@ equation 50},{110,50}}, color={0,0,127})); connect(pVSys1Dio115Wp.PDC, add.u2) annotation (Line(points={{81,30},{85,30},{85,46}}, color={0,0,127})); - connect(MeaDatPVPDC.y[1], PDCMea) - annotation (Line(points={{81,-10},{110,-10}}, color={0,0,127})); connect(MeaDatPVPDC.y[2], TModMea) annotation (Line(points={{81,-10},{88,-10}, {88,-50},{110,-50}}, color={0,0,127})); + connect(MeaDatPVPDC.y[1], PDCMea) + annotation (Line(points={{81,-10},{110,-10}}, color={0,0,127})); annotation ( Icon(coordinateSystem(preserveAspectRatio=false, extent={{-120,-100},{100, 100}})), diff --git a/IBPSA/Electrical/DC/Sources/Validation/package.order b/IBPSA/Electrical/DC/Sources/Validation/package.order index 4f4e9393e2..09b805e395 100644 --- a/IBPSA/Electrical/DC/Sources/Validation/package.order +++ b/IBPSA/Electrical/DC/Sources/Validation/package.order @@ -1,3 +1,2 @@ -PVSingleDiodeNISTValidation PVSingleDiodeRooftopBuildingValidation BaseClasses diff --git a/IBPSA/Electrical/Data/PV/Generic.mo b/IBPSA/Electrical/Data/PV/Generic.mo index a27e703ffc..5267ad0749 100644 --- a/IBPSA/Electrical/Data/PV/Generic.mo +++ b/IBPSA/Electrical/Data/PV/Generic.mo @@ -17,7 +17,7 @@ record Generic "Basic record of a PV cell" parameter Modelica.Units.SI.Temperature TNOCT "Cell temperature under NOCT conditions" annotation (Dialog(group="Cell specific: Electrical characteristics")); - parameter Real Eg0(unit = "eV") + parameter Modelica.Units.SI.Energy Eg0 "Band gap energy under standard conditions. For Si: 1.79604e-19 J or 1.121 eV"; annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(coordinateSystem( diff --git a/IBPSA/Electrical/Data/PV/SingleDiodeSharpNUU235F2.mo b/IBPSA/Electrical/Data/PV/SingleDiodeSharpNUU235F2.mo deleted file mode 100644 index 1bafb82878..0000000000 --- a/IBPSA/Electrical/Data/PV/SingleDiodeSharpNUU235F2.mo +++ /dev/null @@ -1,37 +0,0 @@ -within IBPSA.Electrical.Data.PV; -record SingleDiodeSharpNUU235F2 - "Single-diode record for Sharp NU-U235F2 modules" - extends IBPSA.Electrical.Data.PV.SingleDiodeData( - nSer=60, - nPar=1, - ACel=((VMP0*IMP0)/(1000*eta0))/nSer, - AMod=0.994*1.640, - eta0=0.144, - VOC0=37, - ISC0=8.6, - VMP0=30, - IMP0=7.84, - PMP0=235, - TCoeISC=0.00053*ISC0, - TCoeVOC=-0.00351*VOC0, - gammaPMP=-0.00485, - TNOCT=47.5 + 273.15, - Eg0=1.107, - C=0.0002677); - annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( - coordinateSystem(preserveAspectRatio=false)),Documentation(info=" -

-This is an exemplary data model of the mono-Si module Sharp NU-U235 F2 used for the single-diode PV model. -This data is used for validation in -IBPSA.Electrical.DC.Sources.Validation.PVSingleDiodeNISTValidation. -

-", - revisions=" - -")); -end SingleDiodeSharpNUU235F2; diff --git a/IBPSA/Electrical/Data/PV/SingleDiodeSolibroSL2CIGS110.mo b/IBPSA/Electrical/Data/PV/SingleDiodeSolibroSL2CIGS110.mo index 56f2db9bcd..f6ee5b243e 100644 --- a/IBPSA/Electrical/Data/PV/SingleDiodeSolibroSL2CIGS110.mo +++ b/IBPSA/Electrical/Data/PV/SingleDiodeSolibroSL2CIGS110.mo @@ -1,5 +1,6 @@ within IBPSA.Electrical.Data.PV; -record SingleDiodeSolibroSL2CIGS110 "Single-diode record for Solibro SL2 CIGS 110 Wp" +record SingleDiodeSolibroSL2CIGS110 + "Single-diode record for Solibro SL2 CIGS 110 Wp" extends IBPSA.Electrical.Data.PV.SingleDiodeData( nSer=150, nPar=1, @@ -15,7 +16,7 @@ record SingleDiodeSolibroSL2CIGS110 "Single-diode record for Solibro SL2 CIGS 11 TCoeVOC=-0.27, gammaPMP=-0.0038, TNOCT=51 + 273.15, - Eg0=1.107, + Eg0=1.773609e-19, C=0.0002677); annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( coordinateSystem(preserveAspectRatio=false)),Documentation(info=" @@ -24,8 +25,9 @@ This is an exemplary data model of the thin-film module Solibro SL2 CIGS 110 Wp This data is used for validation in IBPSA.Electrical.DC.Sources.Validation.PVSingleDiodeRooftopBuildingValidation.

+

The data record can be found here: https://reenergyhub.com/files/hersteller/Solibro/pdf/Solibro_SL2_CIGS_THIN-FILM_Module_G1.5-100-120_en.pdf

", - revisions=" +revisions="