@@ -202,16 +202,37 @@ MSChargingStation::checkTotalPower(SUMOTime currentTime) {
202202 if (sumReqWh > capWh && sumReqWh > 0 ) {
203203 const double ratio = capWh / sumReqWh;
204204 for (auto * charge : thisStepCharges) {
205+ MSDevice_Battery* battery = myChargedBatteries[charge->vehicleID ];
206+ double abc = battery->getActualBatteryCapacity ();
207+
205208 const double deliveredWh = charge->WCharged * ratio;
206209 const double excessWh = charge->WCharged - deliveredWh;
207210 charge->WCharged = deliveredWh;
211+ if (charge->chargingEfficiency > 0 && TS > 0 ) {
212+ // derive power [W] from energy [Wh]: Power = (Energy [Wh] * 3600) [Ws] / (efficiency * TS [s])
213+ // ergo we are doing [Ws/s -> W]
214+ charge->chargingPower = (deliveredWh * 3600.0 ) / (charge->chargingEfficiency * TS);
215+ }
216+ charge->actualBatteryCapacity = abc - excessWh;
217+ charge->totalEnergyCharged -= excessWh;
208218
209219 // inform also battery device
210- MSDevice_Battery* battery = myChargedBatteries[charge->vehicleID ];
211- double abc = battery->getActualBatteryCapacity ();
212220 battery->setActualBatteryCapacity (abc - excessWh);
213221 battery->setEnergyCharged (deliveredWh);
222+ myTotalCharge -= excessWh;
223+
224+ #ifdef DEBUG_SIMSTEP
225+ std::cout << " time=" << time2string (currentTime)
226+ << " vehID=" << charge->vehicleID
227+ << " requestedWh=" << (deliveredWh + excessWh)
228+ << " deliveredWh=" << deliveredWh
229+ << " deliveredW=" << charge->chargingPower
230+ << " ratio=" << ratio << std::endl;
231+ #endif
214232 }
233+ #ifdef DEBUG_SIMSTEP
234+ std::cout << " ===============\n\n " ;
235+ #endif
215236 }
216237 return DELTA_T;
217238}
0 commit comments