write alpha verison energy system
This commit is contained in:
		
							
								
								
									
										51
									
								
								EnergySystem.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								EnergySystem.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | |||||||
|  | from config import pv_config, ess_config, grid_config | ||||||
|  | import pandas as pd | ||||||
|  | class EnergySystem: | ||||||
|  |     def __init__(self, pv_type: pv_config, ess_type: ess_config, grid_type: grid_config): | ||||||
|  |         self.pv = pv_type | ||||||
|  |         self.ess = ess_type | ||||||
|  |         self.grid = grid_type | ||||||
|  |  | ||||||
|  |     # 优先使用PV供电给工厂 - 如果PV输出能满足工厂的需求,则直接供电,多余的电能用来给ESS充电。 | ||||||
|  |     # PV不足时使用ESS补充 - 如果PV输出不足以满足工厂需求,首先从ESS获取所需电量。 | ||||||
|  |     # 如果ESS也不足以满足需求,再从电网获取 - 当ESS中的存储电量也不足以补充时,再从电网购买剩余所需电量。 | ||||||
|  |     def simulate(self, data): | ||||||
|  |         total_benefit = 0 | ||||||
|  |         time_interval = 10 / 60  # 时间间隔,单位小时(10分钟) | ||||||
|  |         for index, row in data.iterrows(): | ||||||
|  |             time = row['time'] | ||||||
|  |             sunlight_intensity = row['sunlight'] | ||||||
|  |             factory_demand = row['demand'] | ||||||
|  |             electricity_price = self.grid.get_price_for_time(time) | ||||||
|  |  | ||||||
|  |             generated_pv_power = self.pv.capacity * sunlight_intensity  # 生成的功率,单位 kW | ||||||
|  |             generated_pv_energy = generated_pv_power * time_interval * self.pv.loss  # 生成的能量,单位 kWh | ||||||
|  |  | ||||||
|  |             if generated_pv_energy >= factory_demand * time_interval: | ||||||
|  |                 surplus_energy = generated_pv_energy - factory_demand * time_interval | ||||||
|  |                 charge_to_ess = min(surplus_energy, self.ess.charge_power * time_interval, self.ess.capacity - self.ess.storage) | ||||||
|  |                 self.ess_storage += charge_to_ess | ||||||
|  |                 surplus_after_ess = surplus_energy - charge_to_ess | ||||||
|  |                 if surplus_after_ess > 0 and generated_pv_power > self.ess.charge_power + factory_demand: | ||||||
|  |                     sold_to_grid = surplus_after_ess | ||||||
|  |                     sell_income = sold_to_grid * self.grid.sell_price | ||||||
|  |                     total_benefit += sell_income | ||||||
|  |                 total_energy = factory_demand * time_interval | ||||||
|  |             else: | ||||||
|  |                 needed_from_ess = factory_demand * time_interval - generated_pv_energy | ||||||
|  |                 if self.ess.storage >= needed_from_ess: | ||||||
|  |                     discharging_power = min(self.ess.discharge_power * time_interval, needed_from_ess) | ||||||
|  |                     self.ess.storage -= discharging_power | ||||||
|  |                     total_energy = generated_pv_energy + discharging_power | ||||||
|  |                 else: | ||||||
|  |                     total_energy = generated_pv_energy + self.ess.storage | ||||||
|  |                     self.ess.storage = 0 | ||||||
|  |                     needed_from_grid = factory_demand * time_interval - total_energy | ||||||
|  |                     net_grid = min(self.grid.capacity * time_interval, needed_from_grid) * (1 - self.grid_loss) | ||||||
|  |                     total_energy += net_grid | ||||||
|  |  | ||||||
|  |             unmet_demand = max(0, factory_demand * time_interval - total_energy) | ||||||
|  |             benefit = (total_energy - unmet_demand) * electricity_price | ||||||
|  |             total_benefit += benefit | ||||||
|  |  | ||||||
|  |         return total_benefit | ||||||
		Reference in New Issue
	
	Block a user