使用python simpy实时模拟电池充电



我试图做一个模拟与简单的电池充电。所需参数为电池容量(W)、电池充电状态(百分比)、充电器充电功率(W/h)

我的代码是这样的:

import simpy
import random
battery_percentage = []
class ChargingCycle(object):
def __init__(self, env, battery_capacity, SoC, charging_power):
self.env = env
self.battery_capacity = battery_capacity
self.SoC = SoC
self.charging_power = simpy.Resource(env,charging_power)
def charge(self, battery):
print(self.charging_power)
power_per_minute = self.charging_power/60
charge_in_kw = (self.SoC/100)/self.battery_capacity
charge_in_kw += power_per_minute
self.SoC = charge_in_kw/self.battery_capacity*100

def start_charging(env, battery, charging):
with charging.charging_power.request() as request:
yield request
yield env.process(charging.charge(battery))

def run_charging(env, battery_capacity, SoC, charging_power):
charging = ChargingCycle(env, battery_capacity, SoC, charging_power)
battery = 0
while True:
yield env.timeout(1)
battery += 1
env.process(start_charging(env, battery, charging))
def main():
env = simpy.Environment()
env.process(run_charging(env,45000, 10, 7630))
env.run(until=360)
if __name__ == "__main__":
main()

基本上我想获得每分钟的充电功率,每分钟我将充电器给电池的功率添加到变量charge_in_kw中,并更新充电状态SoC

当我运行模拟时,我得到这个错误:

File "c:Userssc57978DesktopOCPPsim_charge.py", line 17, in charge
power_per_minute = self.charging_power/60
TypeError: unsupported operand type(s) for /: 'Resource' and 'int'

有人知道我怎么能解决这个问题吗?

在运行和做了大量的调试之后,我能够运行你的代码,我做了以下更改,使其运行

  • charging_capacity资源中获取值来解决实际错误
  • 添加yield self.env.timeout(1)以解决充电功能的进一步错误

最终运行代码

import simpy
import random
battery_percentage = []
class ChargingCycle(object):
def __init__(self, env, battery_capacity, SoC, charging_power):
self.env = env
self.battery_capacity = battery_capacity
self.SoC = SoC
self.charging_power = simpy.Resource(env, charging_power)
def charge(self, battery):
print(self.charging_power)
power_per_minute = self.charging_power.capacity/60
charge_in_kw = (self.SoC/100)/self.battery_capacity
charge_in_kw += power_per_minute
self.SoC = charge_in_kw/self.battery_capacity*100
yield self.env.timeout(1)

def start_charging(env, battery, charging):
with charging.charging_power.request() as request:
yield request
yield env.process(charging.charge(battery))

def run_charging(env, battery_capacity, SoC, charging_power):
charging = ChargingCycle(env, battery_capacity, SoC, charging_power)
battery = 0
while True:
yield env.timeout(1)
battery += 1
env.process(start_charging(env, battery, charging))
def main():
env = simpy.Environment()
env.process(run_charging(env,45000, 10, 7630))
env.run(until=360)
if __name__ == "__main__":
main()

最新更新