Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
MSDevice_ElecHybrid.h
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2002-2024 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
19// A device which stands as an implementation ElecHybrid and which outputs movereminder calls
20/****************************************************************************/
21#pragma once
22#include <config.h>
23
25#include <microsim/MSVehicle.h>
29
30// ===========================================================================
31// class declarations
32// ===========================================================================
33class SUMOVehicle;
35
36
37// ===========================================================================
38// class definitions
39// ===========================================================================
49public:
53 static void insertOptions(OptionsCont& oc);
54
55
66 static void buildVehicleDevices(SUMOVehicle& v, std::vector<MSVehicleDevice*>& into);
67
70
71
72
75
85 bool notifyMove(SUMOTrafficObject& tObject, double oldPos, double newPos, double newSpeed);
86
95 bool notifyEnter(SUMOTrafficObject& tObject, MSMoveReminder::Notification reason, const MSLane* enteredLane = 0);
96
97
106 bool notifyLeave(SUMOTrafficObject& tObject, double lastPos, MSMoveReminder::Notification reason, const MSLane* enteredLane = 0);
107
111 virtual void notifyMoveInternal(
112 const SUMOTrafficObject& tObject,
113 const double frontOnLane,
114 const double timeOnLane,
115 const double meanSpeedFrontOnLane,
116 const double meanSpeedVehicleOnLane,
117 const double travelledDistanceFrontOnLane,
118 const double travelledDistanceVehicleOnLane,
119 const double meanLengthOnLane);
121
123 const std::string deviceName() const {
124 return "elecHybrid";
125 }
126
128 std::string getParameter(const std::string& key) const;
129
130 double getParameterDouble(const std::string& key) const;
131
133 void setParameter(const std::string& key, const std::string& value);
134
141 void generateOutput(OutputDevice* tripinfoOut) const;
142
144 double getActualBatteryCapacity() const;
145
147 double getMaximumBatteryCapacity() const;
148
150 std::string getOverheadWireSegmentID() const;
151
153 std::string getTractionSubstationID() const;
154
156 double getEnergyCharged() const;
157
158 void setEnergyCharged(double energyCharged);
159
160 double getCircuitAlpha() const;
161
162 double getPowerWanted() const;
163
165 double getCurrentFromOverheadWire() const;
166
167 void setCurrentFromOverheadWire(double current);
168
170 double getVoltageOfOverheadWire() const;
171
172 void setVoltageOfOverheadWire(double voltage);
173
175 double getConsum() const;
176
177 double getDistance() const {
178 return myDistance;
179 }
180
182 bool isBatteryDischarged() const;
183
185 void setActualBatteryCapacity(const double actualBatteryCapacity);
186
188 double storeEnergyToBattery(const double energy);
189
191 void updateTotalEnergyWasted(const double energyWasted);
192
193 void setConsum(const double consumption);
194
195 double acceleration(SUMOVehicle& veh, double power, double oldSpeed);
196
198 double consumption(SUMOVehicle& veh, double a, double newSpeed);
199
201 double computeChargedEnergy(double energyIn);
202
206
208 return veh_elem;
209 }
210
211private:
217 MSDevice_ElecHybrid(SUMOVehicle& holder, const std::string& id,
218 const double actualBatteryCapacity, const double maximumBatteryCapacity, const double overheadWireChargingPower);
219
220protected:
223
226
229
232
235
237 double myConsum;
238
241
244
247
250
252
259
265
269 double mySOCMin;
272 double mySOCMax;
274
277
280
282
283 //circuit element of elecHybrid device
284 // ----|veh_pos_tail_elem|---------|pos_veh_node|--------
285 // |
286 // |
287 // |veh_elem|
288 // |
289 // |
290 // ----------------------------------|ground|------------
294
296
297
298private:
301
304
305
306};
A device which collects info on the vehicle trip (mainly on departure and arrival)
void setEnergyCharged(double energyCharged)
MSDevice_Emissions * myEmissionDevice
Parameter holding emission device.
bool myCharging
Parameter, Flag: Vehicle is charging (by default is false)
MSOverheadWire * getActOverheadWireSegment()
void setCurrentFromOverheadWire(double current)
double myMaximumBatteryCapacity
Parameter, The total vehicles's Battery Capacity in Wh, [myMaximumBatteryCapacity >= 0].
MSOverheadWire * myPreviousOverheadWireSegment
Parameter, Pointer to the act overhead wire segment in previous step (by default is nullptr),...
static void buildVehicleDevices(SUMOVehicle &v, std::vector< MSVehicleDevice * > &into)
Build devices for the given vehicle, if needed.
void deleteVehicleFromCircuit(SUMOVehicle &veh)
double getVoltageOfOverheadWire() const
Get actual voltage on the overhead wire segment.
double myEnergyCharged
Energy flowing into (+) or from (-) the battery pack in the given timestep.
bool notifyLeave(SUMOTrafficObject &tObject, double lastPos, MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
Saves arrival info.
double mySOCMax
Maximal SOC of the battery pack, battery will not be charged above this level. (But the buffer may st...
double getMaximumBatteryCapacity() const
Get the total vehicle's Battery Capacity in kWh.
double consumption(SUMOVehicle &veh, double a, double newSpeed)
return energy consumption in Wh (power multiplied by TS)
double computeChargedEnergy(double energyIn)
compute charged energy properly considering recuperation and propulsion efficiency during charging ba...
double getParameterDouble(const std::string &key) const
double myTotalEnergyWasted
Energy that could not be stored back to the battery or traction station and was wasted on resistors....
void setConsum(const double consumption)
bool isBatteryDischarged() const
Get consum.
void generateOutput(OutputDevice *tripinfoOut) const
Called on writing tripinfo output.
double myConsum
Parameter, Vehicle consumption during a time step (by default is 0.)
void setActualBatteryCapacity(const double actualBatteryCapacity)
Set actual vehicle's Battery Capacity in kWh.
std::string getParameter(const std::string &key) const
try to retrieve the given parameter from this device. Throw exception for unsupported key
double acceleration(SUMOVehicle &veh, double power, double oldSpeed)
double storeEnergyToBattery(const double energy)
Attempt to store energy into battery pack and return the energy that could not be accommodated due to...
void updateTotalEnergyWasted(const double energyWasted)
Add energyWasted to the total sum myTotalEnergyWasted.
MSDevice_ElecHybrid & operator=(const MSDevice_ElecHybrid &)
Invalidated assignment operator.
double myLastAngle
Parameter, Vehicle's last angle.
double getCurrentFromOverheadWire() const
Get actual current in the overhead wire segment.
MSDevice_ElecHybrid(const MSDevice_ElecHybrid &)
Invalidated copy constructor.
bool myBatteryDischargedLogic
Parameter, Flag: Battery of Vehicle is fully discharged (by default is false)
const std::string deviceName() const
return the name for this type of device
bool notifyMove(SUMOTrafficObject &tObject, double oldPos, double newPos, double newSpeed)
Checks for waiting steps when the vehicle moves.
double myOverheadWireChargingPower
Parameter, overhead wire charging power to battery, if the battery SoC is not full (in Watt)
void setVoltageOfOverheadWire(double voltage)
static void insertOptions(OptionsCont &oc)
Inserts MSDevice_ElecHybrid-options.
MSOverheadWire * myActOverheadWireSegment
Parameter, Pointer to the actual overhead wire segment in which vehicle is placed (by default is null...
double myActualBatteryCapacity
Parameter, The actual vehicles's Battery Capacity in Wh, [myActualBatteryCapacity <= myMaximumBattery...
double getEnergyCharged() const
Get charged energy.
std::string getTractionSubstationID() const
Get actual traction substation ID.
virtual void notifyMoveInternal(const SUMOTrafficObject &tObject, const double frontOnLane, const double timeOnLane, const double meanSpeedFrontOnLane, const double meanSpeedVehicleOnLane, const double travelledDistanceFrontOnLane, const double travelledDistanceVehicleOnLane, const double meanLengthOnLane)
Internal notification about the vehicle moves.
bool notifyEnter(SUMOTrafficObject &tObject, MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
Saves departure info on insertion.
double getActualBatteryCapacity() const
Get the actual vehicle's Battery Capacity in kWh.
double getConsum() const
Get consum.
double myCircuitCurrent
Parameter, Current wanted at overhead wire in next timestep.
std::string getOverheadWireSegmentID() const
Get actual overhead wire segment ID.
void setParameter(const std::string &key, const std::string &value)
try to set the given parameter for this device. Throw exception for unsupported key
A device which collects vehicular emissions.
Representation of a lane in the micro simulation.
Definition MSLane.h:84
Notification
Definition of a vehicle state.
Definition of overhead wire segment.
Abstract in-vehicle device.
Definition Node.h:39
A storage for options typed value containers)
Definition OptionsCont.h:89
Static storage of an output device and its base (abstract) implementation.
Representation of a vehicle, person, or container.
Representation of a vehicle.
Definition SUMOVehicle.h:62