首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用python实时模拟电池充电

用python实时模拟电池充电
EN

Stack Overflow用户
提问于 2022-06-23 08:05:37
回答 1查看 106关注 1票数 2

我试着用simpy模拟电池充电。所需参数是电池容量(W)、电池充电状态(百分比)和充电器充电功率(W/h)。

我的代码如下所示:

代码语言:javascript
复制
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的状态。

当我运行模拟时,会得到以下错误:

代码语言:javascript
复制
File "c:\Users\sc57978\Desktop\OCPP\sim_charge.py", line 17, in charge
power_per_minute = self.charging_power/60

TypeError: unsupported operand type(s) for /: 'Resource' and 'int'

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

EN

回答 1

Stack Overflow用户

发布于 2022-06-23 08:35:00

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

  • charging_capacity资源中获取值以解决实际错误
  • 添加yield self.env.timeout(1)以解决进一步的负责函数

错误

最终运行代码

代码语言:javascript
复制
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()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72726645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档