Eclipse SUMO - Simulation of Urban MObility
MSDevice_ElecHybrid.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2002-2020 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>
27 #include <utils/common/SUMOTime.h>
28 
29 // ===========================================================================
30 // class declarations
31 // ===========================================================================
32 class SUMOVehicle;
33 
34 
35 // ===========================================================================
36 // class definitions
37 // ===========================================================================
47 public:
51  static void insertOptions(OptionsCont& oc);
52 
53 
64  static void buildVehicleDevices(SUMOVehicle& v, std::vector<MSVehicleDevice*>& into);
65 
68 
69 
70 
73 
83  bool notifyMove(SUMOTrafficObject& tObject, double oldPos, double newPos, double newSpeed);
84 
93  bool notifyEnter(SUMOTrafficObject& tObject, MSMoveReminder::Notification reason, const MSLane* enteredLane = 0);
94 
95 
104  bool notifyLeave(SUMOTrafficObject& tObject, double lastPos, MSMoveReminder::Notification reason, const MSLane* enteredLane = 0);
105 
109  virtual void notifyMoveInternal(
110  const SUMOTrafficObject& tObject,
111  const double frontOnLane,
112  const double timeOnLane,
113  const double meanSpeedFrontOnLane,
114  const double meanSpeedVehicleOnLane,
115  const double travelledDistanceFrontOnLane,
116  const double travelledDistanceVehicleOnLane,
117  const double meanLengthOnLane);
119 
121  const std::string deviceName() const {
122  return "elecHybrid";
123  }
124 
126  std::string getParameter(const std::string& key) const;
127 
128  double getParameterDouble(const std::string& key) const;
129 
131  void setParameter(const std::string& key, const std::string& value);
132 
139  void generateOutput(OutputDevice* tripinfoOut) const;
140 
142  double getActualBatteryCapacity() const;
143 
145  double getMaximumBatteryCapacity() const;
146 
148  std::string getOverheadWireSegmentID() const;
149 
151  std::string getTractionSubstationID() const;
152 
154  double getEnergyCharged() const;
155 
156  void setEnergyCharged(double energyCharged);
157 
158  double getCircuitAlpha() const;
159 
160  double getPowerWanted() const;
161 
163  double getCurrentFromOverheadWire() const;
164 
165  void setCurrentFromOverheadWire(double current);
166 
168  double getVoltageOfOverheadWire() const;
169 
170  void setVoltageOfOverheadWire(double voltage);
171 
173  double getConsum() const;
174 
175  double getDistance() const {
176  return myDistance;
177  }
178 
180  bool isBatteryDischarged() const;
181 
183  void setActualBatteryCapacity(const double actualBatteryCapacity);
184 
185  void setConsum(const double consumption);
186 
187  double acceleration(SUMOVehicle& veh, double power, double oldSpeed);
188  double consumption(SUMOVehicle& veh, double a, double newSpeed);
189 
192  };
193 
195  return veh_elem;
196  }
197 
198 private:
204  MSDevice_ElecHybrid(SUMOVehicle& holder, const std::string& id,
205  const double actualBatteryCapacity, const double maximumBatteryCapacity, const double overheadWireChargingPower, const std::map<int, double>& param);
206 
207  void checkParam(const SumoXMLAttr paramKey, const double lower = 0., const double upper = std::numeric_limits<double>::infinity());
208 
209 protected:
212 
215 
218 
220  std::map<int, double> myParam;
221 
223  double myLastAngle;
224 
226  double myConsum;
227 
230 
233 
236 
239 
241 
248 
254 
258  double mySOCMin;
261  double mySOCMax;
263 
266 
269 
270  double myDistance;
271 
272  //circuit element of elecHybrid device
273  // ----|veh_pos_tail_elem|---------|pos_veh_node|--------
274  // |
275  // |
276  // |veh_elem|
277  // |
278  // |
279  // ----------------------------------|ground|------------
283 
285 
286 
287 private:
290 
293 
294 
295 };
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
A device which collects info on the vehicle trip (mainly on departure and arrival)
void setEnergyCharged(double energyCharged)
bool myCharging
Parameter, Flag: Vehicle is charging (by default is false)
MSDevice_ElecHybrid & operator=(const MSDevice_ElecHybrid &)
Invalidated assignment operator.
MSOverheadWire * getActOverheadWireSegment()
void setCurrentFromOverheadWire(double current)
double myMaximumBatteryCapacity
Parameter, The total vehicles's Battery Capacity in Wh, [myMaximumBatteryCapacity >= 0].
std::map< int, double > myParam
Parameter collection.
double getCircuitAlpha() const
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)
double getDistance() const
double getParameterDouble(const std::string &key) const
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 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.
void checkParam(const SumoXMLAttr paramKey, const double lower=0., const double upper=std::numeric_limits< double >::infinity())
double myOverheadWireChargingPower
Parameter, overhead wire charging power to battery, if the battery SoC is not full (in Watt)
void setVoltageOfOverheadWire(double voltage)
double myTotalPowerWasted
Energy that could not be stored back to the battery or traction station and was wasted on resistors....
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 substationn 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.
MSDevice_ElecHybrid(SUMOVehicle &holder, const std::string &id, const double actualBatteryCapacity, const double maximumBatteryCapacity, const double overheadWireChargingPower, const std::map< int, double > &param)
Constructor.
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
Representation of a lane in the micro simulation.
Definition: MSLane.h:82
Notification
Definition of a vehicle state.
Definition of overhead wire segment.
Abstract in-vehicle device.
Definition: Node.h:31
A storage for options typed value containers)
Definition: OptionsCont.h:89
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:60
Representation of a vehicle, person, or container.
Representation of a vehicle.
Definition: SUMOVehicle.h:58