系统状态

def update_ambient_temp(self, ambient_temp): """更新环境温度""" self.ambient_temp = ambient_temp

def _thermal_model(self, T, t, heat_generation, fan_power, pump_power, compressor_power): """电池热动力学模型""" # 计算热生成项(来自充电/放电) q_gen = heat_generation # W

def _calculate_energy_consumption(self, dt): """计算热管理系统能耗""" # 风扇能耗 (W) fan_energy = self.fan_power * 10 * dt # 假设最大10W

def pid_controller(self, current_temp, target_temp, error_sum, last_error, kp=20, ki=0.5, kd=5): """PID控制器计算控制信号""" # 计算当前误差 error = target_temp - current_temp

def simulate(self, duration, time_step=1, charging_profile=None): """模拟热管理系统运行""" if charging_profile is None: # 默认充电功率曲线 (kW) charging_profile = [50 if t < duration/2 else 25 for t in range(0, int(duration), int(time_step))]

# 目标温度 (°C)
target_temp = 30# PID控制器参数
kp_fan = 20
ki_fan = 0.5
kd_fan = 5kp_pump = 15
ki_pump = 0.3
kd_pump = 3# 初始化PID状态
error_sum_fan = 0
last_error_fan = 0
error_sum_pump = 0
last_error_pump = 0# 模拟循环
current_time = 0
for i in range(len(charging_profile)):# 当前充电功率转换为热生成率 (W)charge_power = charging_profile[i] * 1000  # kW to Wheat_generation = charge_power * 0.05  # 假设5%的能量转化为热量# 使用PID控制器计算控制信号fan_power, error_sum_fan, last_error_fan = self.pid_controller(self.current_temp, target_temp, error_sum_fan, last_error_fan,kp_fan, ki_fan, kd_fan)pump_power, error_sum_pump, last_error_pump = self.pid_controller(self.current_temp, target_temp, error_sum_pump, last_error_pump,kp_pump, ki_pump, kd_pump)# 简化:假设压缩机仅在高温时工作compressor_power = 100 if self.current_temp > 40 else 0# 记录控制参数self.fan_power = fan_powerself.pump_power = pump_powerself.compressor_power = compressor_power# 求解热动力学方程time_points = [0, time_step]result = odeint(self._thermal_model, self.current_temp, time_points, args=(heat_generation, fan_power, pump_power, compressor_power))# 更新当前温度self.current_temp = result[-1][0]# 更新时间和温度历史current_time += time_stepself.time_history.append(current_time)self.temp_history.append(self.current_temp)# 计算能耗self._calculate_energy_consumption(time_step)return {'time': self.time_history,'temperature': self.temp_history,'fan_power': [self.fan_power] * len(self.time_history),'pump_power': [self.pump_power] * len(self.time_history),'compressor_power': [self.compressor_power] * len(self.time_history),'energy_consumption': self.energy_consumption / 3600000  # kWh
}

def visualize_results(self, simulation_results): """可视化模拟结果""" plt.figure(figsize=(14, 10))

# 绘制温度变化
plt.subplot(2, 1, 1)
plt.plot(simulation_results['time'], simulation_results['temperature'], 'b-', linewidth=2)
plt.axhline(y=30, color='g', linestyle='--', label='目标温度')
plt.axhline(y=45, color='r', linestyle='--', label='高温警戒线')
plt.xlabel('时间 (秒)')
plt.ylabel('电池温度 (°C)')
plt.title('电池温度变化')
plt.grid(True)
plt.legend()# 绘制控制参数
plt.subplot(2, 1, 2)
plt.plot(simulation_results['time'], simulation_results['fan_power'], 'r-', label='风扇功率 (%)')
plt.plot(simulation_results['time'], simulation_results['pump_power'], 'g-', label='泵功率 (%)')
plt.plot(simulation_results['time'], simulation_results['compressor_power'], 'b-', label='压缩机功率 (%)')
plt.xlabel('时间 (秒)')
plt.ylabel('功率 (%)')
plt.title('热管理系统控制参数')
plt.grid(True)
plt.legend()plt.tight_layout()
plt.show()# 打印总能耗
print(f"热管理系统总能耗: {simulation_results['energy_consumption']:.4f} kWh")