官方文档参考:Electric
创建电动车
首先在rou.xml文件中定义一个电动车类型,例如:
<vType id="EV" length="5.00" minGap="2.50" maxSpeed="70.00" color="white" accel="1.0" decel="1.0" sigma="0.5">
<param key="airDragCoefficient" value="0.6"/>
<param key="constantPowerIntake" value="100"/>
<param key="frontSurfaceArea" value="5"/>
<param key="has.battery.device" value="true"/>
<param key="internalMomentOfInertia" value="0.01"/>
<param key="maximumBatteryCapacity" value="2000"/>
<param key="maximumPower" value="1000"/>
<param key="propulsionEfficiency" value="0.9"/>
<param key="radialDragCoefficient" value="0.5"/>
<param key="recuperationEfficiency" value="0.9"/>
<param key="rollDragCoefficient" value="0.01"/>
<param key="stoppingThreshold" value="0.1"/>
<param key="vehicleMass" value="10000"/>
</vType>
在定义了车辆类型后,在创建车辆时可以指定车辆类型为电动车,并且可以指定车辆当前的实际电量,例如:
<vehicle id="0" type="EV" depart="2.00" color="red">
<param key="actualBatteryCapacity" value="500"/>
<route edges="E1 E2"/>
</vehicle>
上述方法同样可以用于其他方式(如trip)定义的车辆当中。只需要将xml标签改成<trip></trip>
形式的标签,然后将上述参数设置的代码包含在其中。
需要注意的是:电动车的行为并不会受到实际电池电量的影响,即便电池电量为0仍然会继续行驶,如果要避免这种情况,需要通过TRACI来对电动车进行控制。
创建充电站
创建充电站可以在netedit中通过图形化的方式创建,也可以直接编辑.add.xml文件来创建,例如:
<additional>
<chargingStation chargeDelay="2" chargeInTransit="0" power="200000" efficiency="0.95" startPos="10" endPos="35" id="CS1" lane="E2_0"/>
</additional>
注:这里的power的单位是W,指每辆车充电的功率
电动车充电
SUMO中充电有两种方式:停车充电(charge stopped)、途经充电(charge in transit)。在sumocfg文件中加入以下内容,可以在输出的battery.out.xml报告中查看每个时间步各个车辆的充电、电能消耗情况。
<output>
<battery-output value="Battery.out.xml"/>
<battery-output.precision value="4"/>
<device.battery.probability value="1"/>
<summary-output value="summary_100.xml"/>
</output>
不同的充电方式在输出的battery.out.xml报告中有所体现。停车充电体现为:energyChargedStopped字段、途径充电体现为:energyChargedInTransit字段。充电时,相应的充电站会变成橙色。
途经充电
在充电站的参数chargeInTransit="1"时,表示开启途经充电,任何路过该充电站的电动车都会在此期间被充电。如果同时设置了停车充电,那么在刚进入充电站的时候会进行途经充电,然后电动车在充电站内停下时,只进行停车充电。
例如在这张图中,车辆刚进入充电站而还没停下,此时充电站变成橙色,说明电动车已经在充电,这种充电方式是途经充电。
停车充电
当车辆行驶到充电站最前端停下时,这时的充电方式为停车充电。要使一辆车在某充电站停下来充电,只需要在车流/车辆的定义之间加上这样一条内容:
<stop chargingStation="CS1" until="50"/>
上述定义会使车辆在充电站CS1停留直到第50个time step再继续原有的路线,参数的说明详见stops and waypoints
输出各车辆的充电过程信息
上面介绍的battery.out.xml报告中包含每个时间步各个车辆的充电和耗电情况。例如:(节选了部分)
<timestep time="24.00">
<vehicle id="0" energyConsumed="-11.4572" totalEnergyConsumed="177.1174" totalEnergyRegenerated="68.8627" actualBatteryCapacity="391.7453" maximumBatteryCapacity="2000.0000" chargingStationId="CS1" energyCharged="0.0000" energyChargedInTransit="0.0000" energyChargedStopped="0.0000" speed="4.5569" acceleration="-1.0000" x="157.5089" y="73.4923" lane="E2_0" posOnLane="11.3441" timeStopped="0"/>
</timestep>
<timestep time="25.00">
<vehicle id="0" energyConsumed="-8.8397" totalEnergyConsumed="177.1174" totalEnergyRegenerated="77.7024" actualBatteryCapacity="453.3628" maximumBatteryCapacity="2000.0000" chargingStationId="CS1" energyCharged="52.7778" energyChargedInTransit="52.7778" energyChargedStopped="0.0000" speed="3.5987" acceleration="-0.9582" x="157.5562" y="77.0904" lane="E2_0" posOnLane="14.9428" timeStopped="0"/>
</timestep>
...此处省略了几秒钟
<timestep time="29.00">
<vehicle id="0" energyConsumed="-0.8662" totalEnergyConsumed="177.1174" totalEnergyRegenerated="92.5414" actualBatteryCapacity="679.3129" maximumBatteryCapacity="2000.0000" chargingStationId="CS1" energyCharged="52.7778" energyChargedInTransit="0.0000" energyChargedStopped="52.7778" speed="0.0088" acceleration="-0.8366" x="157.6225" y="82.1412" lane="E2_0" posOnLane="19.9944" timeStopped="1"/>
</timestep>
第25秒时,车辆进入充电站区域,且充电站chargeInTransit参数为1,因此energyChargedInTransit从24秒的0变成了52.7778。第29秒时电动车在充电站停下,此时energyChargedInTransit变为0,转变为停车充电,此时energyChargedStopped从0变成52.7778。
报告中有几个比较关键的参数:
actualBatteryCapacity:当前时间步的电池电量。这个量是实时变化的,但如果在sumo gui中鼠标右键点击车辆,查看parameters时,会发现actualBatteryCapacity始终不变,这是sumo gui程序的问题,实际上这个值是变化的,以报告中输出的为准。
energyConsumed:当前时间步消耗的能量,可正可负。当为正值时表示车辆消耗了电能,负值出现在减速(acceleration<0)时刻,表示车辆动能回收产生的能量。
totalEnergyConsumed:从出发时刻到当前时间步累计消耗的电能。当动能回收时,这个量保持不变。
totalEnergyRegenerated:从出发时刻到当前时间步累计回收的电能,当energyConsumed为负时,这个值会累加。
energycharged:当前时间步充的电量=power/3600*efficiency 单位Wh。power是充电站在设置时指定的参数,是每个充电桩的功率。
以上几个量存在的关系:
actualBatteryCapacity=actualBatteryCapacity(0)-totalEnergyConsumed+totalEnergyRegenerated+∑energycharged
输出充电站充电过程的信息
在sumocfg文件内加入以下内容:
<output>
<chargingstations-output value="chargingstations.xml"/>
</output>
输出的chargingstations.xml文件内容大致为:
<chargingstations-export>
<chargingStation id="CS1" totalEnergyCharged="13827.78" chargingSteps="271">
<vehicle id="f_2.0" type="EV" totalEnergyChargedIntoVehicle="1741.67" chargingBegin="40.00" chargingEnd="73.00">
<step time="40.00" chargingStatus="waitingChargeStopped" energyCharged="0.00" partialCharge="0.00" power="200000.00" efficiency="0.95" actualBatteryCapacity="350.92" maximumBatteryCapacity="2000.00"/>
<step time="41.00" chargingStatus="chargingStopped" energyCharged="52.78" partialCharge="52.78" power="200000.00" efficiency="0.95" actualBatteryCapacity="403.70" maximumBatteryCapacity="2000.00"/>
……
其中有几个关键参数:
power:单位:W。
energyCharged:当前时间步该电动车充的电能,单位:W·h。
于是energyCharged = (power * efficiency)/(60 * 60),因为每个时间步默认为1s。
同时,根据对不同的车辆的每个时间步充的电能的分析可知,chargingStation的power参数是针对每个充电桩的。每个充电桩在工作时均具有相同的充电功率。根据充电车辆数和power就可以得到充电站的负荷。
更多有关充电站与电动车的内容(电动车通过TRACI控制充电、带有停车位的充电站、具有一定初始电量分布的电动车)会放在我的专栏里。