Esempio n. 1
0
        /// <summary>
        /// Berechnet den für den Zeitschlitz zutreffenden Anteil der Selbstentladung des Energieträgers
        /// </summary>
        /// <param name="state">Zustandseigenschaften der Batterie</param>
        /// <param name="seconds">Zeitschlitz in Sekunden</param>
        private void SetSelfDischarge(BatteryFields initial, BatteryFields now, float seconds)
        {
            // Umrechnung sdr pro Jahr in sdr pro Sekunde: [ / Tag * h * min * s] [ / 365 * 24 * 60 * 60]; -> "31536000"
            var availableCharge = initial.Charge - now.Charge;
            var selfDischarge   = availableCharge * now.SDR;

            selfDischarge /= 31536000;
            selfDischarge *= seconds;

            now.SelfDischarge = selfDischarge;
        }
Esempio n. 2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="state"></param>
 /// <param name="qt">Charge of a time span t</param>
 /// <returns></returns>
 private void SetStateOfDischarge(BatteryFields initial, BatteryFields now, float qt)
 {
     /*
      * Berechnung des neuen State-Of-Discharge mittels des neuen timeSlots
      * SOD = SOD_0 + ((1 - SOD_0) / Q_0) * (qn) <--- PRÜFEN
      *
      * SOD      -> aktuell berechneter State-of-Discharge
      * SOD_0	-> initiale Selbstentladung "init_sod"
      * Q_0		-> initiale el. Ladung des BatteriePacks "Initial.Charge"
      */
     now.SoD = initial.SoD + ((1 - initial.SoD) / initial.Charge) * (qt + now.Charge);
 }
Esempio n. 3
0
 private float GetChargeConsumption(BatteryFields state, float seconds, float current)
 {
     /*
      * Berechnung des Ladungsverbrauchs für den Zeitraum t:
      * -----------------------------------------------------
      * qt = (i * t * at * bt) + (at * gt)
      *
      * qt		-> verbrauchte Ladung für den Zeitraum t
      * i		-> Strom ("mA")
      * t        -> Zeitraum in h, damit sich mAh ergeben
      * at		-> Korrekturfaktor alpha_t	(Temperaturkorrekturfaktor)
      * bt		-> Korrekturfaktor beta_t	(Stromkorrekturfaktor)
      * gt		-> Korrekturfaktor gamma_t	(Selbstentladungsfaktor)
      *
      * qn = Summe aller qt über die Zeit, quasi die gesamte verbrauchte Ladung
      */
     return((current * (seconds / 3600) * state.TemperaturFactor * state.CurrentFactor) + (state.TemperaturFactor * state.SelfDischarge));
 }
Esempio n. 4
0
        /// <summary>
        ///
        /// </summary>
        /// <returns>the resulting voltage </returns>
        private float GetDischargeVoltage(BatteryPack battery, BatteryFields now)
        {
            /*
             * Berechnung des Entladeverhaltens:
             * ---------------------------------
             * Polynom-Funktion des n ten-Grades, bestimmt durch die Länge des Arrays "polynomials"
             * die Laufvariable i entspricht der Potenz:
             * [0] -> x^0 | [1] -> x^1 | [2] -> x^2 ...
             *
             * resultierende Formel:
             * --------------------
             * v = poly.[0] + poly.[1] * sod ^ 1 + poly.[2] * sod ^ [2] ...
             * v *= Temperaturkorrektur
             */
            float v = 0;

            for (int i = 0; i < battery.Polynom.Length; i++)
            {
                v += (float)(battery.Polynom[i] * Math.Pow(now.SoD, i));
            }
            v *= now.TemperaturFactor;

            return(v);
        }
Esempio n. 5
0
        // --constructors

        public BatteryState(BatteryFields fields)
        {
            Initial    = fields;
            Now        = fields.Copy();
            Now.Charge = 0;                // actual used load should be zero and will be increased during simulation
        }