示例#1
0
        // Obtaining and Setting efficiency curve values from .CSYX file
        public void ConfigEffCurves(int ArrayNum, bool threeCurves)
        {
            // Configuration begins with a check if the Inverter has three efficiency curves or just one
            // Once determined, relevant values are collected from the .CSYX file
            if (threeCurves)
            {
                // Initiating an Array to hold Interpolated Values and the three voltage levels
                itsPresentEfficiencies[0] = new double[3];             // To hold the three voltage levels [Array, V]
                itsPresentEfficiencies[1] = new double[3];             // To hold the three efficiencies from interpolation [Array, %, Computed in Calculate Method]

                // Getting the Low, Medium and High Voltage Values used in the Curve
                itsLowVoltage = double.Parse(ReadFarmSettings.GetAttribute("Inverter", "Voltage", _Adder: "/Efficiency/Low", _ArrayNum: ArrayNum));
                itsPresentEfficiencies[0][0] = itsLowVoltage;
                itsMedVoltage = double.Parse(ReadFarmSettings.GetAttribute("Inverter", "Voltage", _Adder: "/Efficiency/Med", _ArrayNum: ArrayNum));
                itsPresentEfficiencies[0][1] = itsMedVoltage;
                itsHighVoltage = double.Parse(ReadFarmSettings.GetAttribute("Inverter", "Voltage", _Adder: "/Efficiency/High", _ArrayNum: ArrayNum));
                itsPresentEfficiencies[0][2] = itsHighVoltage;

                // Setting the lowest efficiency (i.e. at Threshold Power)

                List <double> lowEffIn    = new List <double>();
                List <double> lowEffFrac  = new List <double>();
                List <double> medEffIn    = new List <double>();
                List <double> medEffFrac  = new List <double>();
                List <double> highEffIn   = new List <double>();
                List <double> highEffFrac = new List <double>();
                double        effInPlaceholder;
                double        effFracPlaceholder;

                lowEffIn.Add(itsThresholdPwr * itsNumInverters);
                lowEffFrac.Add(0);
                medEffIn.Add(itsThresholdPwr * itsNumInverters);
                medEffFrac.Add(0);
                highEffIn.Add(itsThresholdPwr * itsNumInverters);
                highEffFrac.Add(0);
                // Get Low Voltage Efficiency Curve
                for (int eff = 1; eff < 8; eff++)
                {
                    effIn   = double.TryParse(ReadFarmSettings.GetInnerText("Inverter", "Efficiency/Low/IN" + (eff + 1).ToString(), _ArrayNum: ArrayNum, _default: null), out effInPlaceholder);
                    effFrac = double.TryParse(ReadFarmSettings.GetInnerText("Inverter", "Efficiency/Low/Effic" + (eff + 1).ToString(), _ArrayNum: ArrayNum, _default: null), out effFracPlaceholder);
                    if (effIn && effFrac)
                    {
                        ErrorLogger.Assert("The Inverter Efficiency Curve is Incorrectly defined. Check Inverter in Sub-Array " + ArrayNum + ".", double.Parse(ReadFarmSettings.GetInnerText("Inverter", "Efficiency/Low/Effic" + (eff + 1).ToString(), _ArrayNum: ArrayNum)) < 100, ErrLevel.FATAL);
                        lowEffIn.Add(effInPlaceholder * itsNumInverters * 1000);
                        lowEffFrac.Add(effInPlaceholder * effFracPlaceholder * itsNumInverters * 10);
                    }
                }
                itsLowEff[0] = lowEffIn.ToArray();
                itsLowEff[1] = lowEffFrac.ToArray();

                // Get Med Voltage Efficiency Curve
                for (int eff = 1; eff < 8; eff++)
                {
                    effIn   = double.TryParse(ReadFarmSettings.GetInnerText("Inverter", "Efficiency/Med/IN" + (eff + 1).ToString(), _ArrayNum: ArrayNum, _default: null), out effInPlaceholder);
                    effFrac = double.TryParse(ReadFarmSettings.GetInnerText("Inverter", "Efficiency/Med/Effic" + (eff + 1).ToString(), _ArrayNum: ArrayNum, _default: null), out effFracPlaceholder);
                    if (effIn && effFrac)
                    {
                        ErrorLogger.Assert("The Inverter Efficiency Curve is Incorrectly defined. Check Inverter in Sub-Array " + ArrayNum + ".", double.Parse(ReadFarmSettings.GetInnerText("Inverter", "Efficiency/Med/Effic" + (eff + 1).ToString(), _ArrayNum: ArrayNum)) < 100, ErrLevel.FATAL);
                        medEffIn.Add(effInPlaceholder * itsNumInverters * 1000);
                        medEffFrac.Add(effInPlaceholder * effFracPlaceholder * itsNumInverters * 10);
                    }
                }
                itsMedEff[0] = medEffIn.ToArray();
                itsMedEff[1] = medEffFrac.ToArray();

                // Get High Voltage Efficiency Curve
                for (int eff = 1; eff < 8; eff++)
                {
                    effIn   = double.TryParse(ReadFarmSettings.GetInnerText("Inverter", "Efficiency/High/IN" + (eff + 1).ToString(), _ArrayNum: ArrayNum, _default: null), out effInPlaceholder);
                    effFrac = double.TryParse(ReadFarmSettings.GetInnerText("Inverter", "Efficiency/High/Effic" + (eff + 1).ToString(), _ArrayNum: ArrayNum, _default: null), out effFracPlaceholder);
                    if (effIn && effFrac)
                    {
                        ErrorLogger.Assert("The Inverter Efficiency Curve is Incorrectly defined. Check Inverter in Sub-Array " + ArrayNum + ".", double.Parse(ReadFarmSettings.GetInnerText("Inverter", "Efficiency/High/Effic" + (eff + 1).ToString(), _ArrayNum: ArrayNum)) < 100, ErrLevel.FATAL);
                        highEffIn.Add(effInPlaceholder * itsNumInverters * 1000);
                        highEffFrac.Add(effInPlaceholder * effFracPlaceholder * itsNumInverters * 10);
                    }
                }
                itsHighEff[0] = highEffIn.ToArray();
                itsHighEff[1] = highEffFrac.ToArray();
            }
            else
            {
                // The Inverter only has one Efficiency Curve
                // Setting the lowest efficiency (i.e. at Threshold Power)
                itsOnlyEff[0][0] = itsThresholdPwr * itsNumInverters;
                itsOnlyEff[1][0] = 0;

                // Go through all .CSYX Nodes with Efficiency values and assign them into Array
                for (int eff = 1; eff < itsOnlyEff[0].Length; eff++)
                {
                    ErrorLogger.Assert("The Inverter Efficiency Curve is Incorrectly defined. Check Inverter in Sub-Array " + ArrayNum + ".", double.Parse(ReadFarmSettings.GetInnerText("Inverter", "Efficiency/EffCurve/Effic." + (eff + 1).ToString(), _ArrayNum: ArrayNum)) < 100, ErrLevel.FATAL);
                    itsOnlyEff[0][eff] = double.Parse(ReadFarmSettings.GetInnerText("Inverter", "Efficiency/EffCurve/IN" + (eff + 1).ToString(), _ArrayNum: ArrayNum, _default: itsNomOutputPwr.ToString())) * itsNumInverters * 1000;
                    itsOnlyEff[1][eff] = itsOnlyEff[0][eff] * double.Parse(ReadFarmSettings.GetInnerText("Inverter", "Efficiency/EffCurve/Effic." + (eff + 1).ToString(), _ArrayNum: ArrayNum, _Error: ErrLevel.FATAL)) / 100;
                }
            }
        }