From bdcecc74b481427926ab91b543f45c8c10dbb7b1 Mon Sep 17 00:00:00 2001 From: L_J Date: Mon, 24 Mar 2025 14:18:24 +0800 Subject: [PATCH] Initial commit with PV files --- PV/peak_sunshine.xlsx | Bin 0 -> 44912 bytes PV/pv_product.xlsx | Bin 0 -> 17229 bytes PV/pv_total.py | 280 ++++++++++++++++++++++++++++++++++++++++++ readme.md | 0 4 files changed, 280 insertions(+) create mode 100644 PV/peak_sunshine.xlsx create mode 100644 PV/pv_product.xlsx create mode 100644 PV/pv_total.py create mode 100644 readme.md diff --git a/PV/peak_sunshine.xlsx b/PV/peak_sunshine.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d16edf96bc6bd061a1b9e4ec79a99188d38a7301 GIT binary patch literal 44912 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 O5Fr`fW@zcfzyAP}=OeQK literal 0 HcmV?d00001 diff --git a/PV/pv_product.xlsx b/PV/pv_product.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..86ecf4498f66f531a2057f640a21090e81a9c975 GIT binary patch literal 17229 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

-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 literal 0 HcmV?d00001 diff --git a/PV/pv_total.py b/PV/pv_total.py new file mode 100644 index 0000000..8fcf86b --- /dev/null +++ b/PV/pv_total.py @@ -0,0 +1,280 @@ +import pandas as pd +import math +from scipy.optimize import fsolve + +# 默认文件路径 +TILT_EXCEL_PATH = r"D:/A_software/research/Git/git_home/PV/peak_sunshine.xlsx" #各地区峰值小时数(注意城市名 +PV_EXCEL_PATH = r"D:/A_software/research/Git/git_home/PV/pv_product.xlsx" #部分光伏组件数值 + + +def calculate_pv_metrics(city, component_name, electricity_price, pv_number, q, longitude, latitude, + is_fixed=True, optimize=True, peak_load_hour=16, cost_per_kw=3.4, E_S=1.0, K=0.8): + """ + 计算光伏项目的各项指标,包括装机容量、年发电量、等效小时数、环境收益和内部收益率(IRR)。 + + 参数: + city (str): 城市名称,例如 "深圳" + component_name (str): 光伏组件名称,例如 "TWMHF-66HD715" + electricity_price (float): 电价(元/kWh) + pv_number (int): 光伏组件数量 + q (float): 运维成本占初始投资成本的比例(例如 0.02 表示 2%) + is_fixed (bool): 是否为固定式支架,True 为固定式,False 为跟踪式 + optimize (bool): 是否优化倾角和方位角 + longitude (float): 经度 + latitude (float): 纬度 + peak_load_hour (int): 峰值负荷小时,默认 16 + cost_per_kw (float): 每 kW 投资成本(元/kW),默认 3.4 元/kW + E_S (float): 标准辐射量,默认 1.0 + K (float): 系统效率,默认 0.8 + + 返回: + dict: 包含以下结果的字典: + - city: 城市名称 + - component_name: 组件名称 + - tilt: 倾角 (度) + - azimuth: 方位角 (度) + - array_distance: 阵列间距 (米) + - max_power: 单组件最大功率 (Wp) + - capacity: 装机容量 (kW) + - peak_sunshine_hours: 峰值日照小时数 (小时/天) + - single_daily_energy: 一天单个组件发电量 (kWh) + - annual_energy: 年发电量 (kWh) + - equivalent_hours: 等效小时数 (小时) + - coal_reduction: 标准煤减排量 (kg) + - CO2_reduction: CO₂ 减排量 (kg) + - SO2_reduction: SO₂ 减排量 (kg) + - NOX_reduction: NOx 减排量 (kg) + - IRR: 内部收益率 (%) + """ + + # 1. 获取城市的倾角和峰值日照小时数 + def get_tilt_and_peak_hours(city, excel_path=TILT_EXCEL_PATH): + """从Excel获取城市的倾角和峰值日照小时数""" + try: + df = pd.read_excel(excel_path) + if len(df.columns) < 5: + raise ValueError("Excel文件需包含至少5列:城市、倾角、峰值日照小时数等") + row = df[df.iloc[:, 1] == city] + if row.empty: + raise ValueError(f"未找到城市:{city}") + return {"city": city, "tilt": row.iloc[0, 2], "peak_sunshine_hours": row.iloc[0, 14]} + except FileNotFoundError: + raise FileNotFoundError(f"未找到Excel文件:{excel_path}") + except Exception as e: + raise Exception(f"读取Excel出错:{e}") + + # 2. 计算倾角和方位角 + def get_tilt_and_azimuth(is_fixed, optimize, longitude, city, excel_path=TILT_EXCEL_PATH, + peak_load_hour=peak_load_hour): + if optimize and not city: + raise ValueError("优化模式下需提供城市名称") + + if is_fixed: + if optimize: + tilt = get_tilt_and_peak_hours(city, excel_path)["tilt"] + azimuth = (peak_load_hour - 12) * 15 + (longitude - 116) # 方位角公式 + azimuth = azimuth % 360 if azimuth >= 0 else azimuth + 360 + else: + print("倾角:0°(水平)-90°(垂直) | 方位角:0°(正北)-180°(正南),顺时针") + tilt = float(input("请输入倾角(度):")) + azimuth = float(input("请输入方位角(度):")) + if not (0 <= tilt <= 90) or not (0 <= azimuth <= 360): + raise ValueError("倾角需在0-90°,方位角需在0-360°") + else: # 跟踪式 + azimuth = 180 # 固定朝南 + if optimize: + tilt = get_tilt_and_peak_hours(city, excel_path)["tilt"] + else: + print("倾角:0°(水平)-90°(垂直)") + tilt = float(input("请输入倾角(度):")) + if not (0 <= tilt <= 90): + raise ValueError("倾角需在0-90°") + return tilt, azimuth + + # 3. 获取光伏组件信息 + def get_pv_product_info(component_name, excel_path=PV_EXCEL_PATH): + try: + df = pd.read_excel(excel_path) + if len(df.columns) < 10: + raise ValueError("Excel文件需包含至少10列:组件名称、尺寸、功率等") + row = df[df.iloc[:, 1] == component_name] + if row.empty: + raise ValueError(f"未找到组件:{component_name}") + return { + "component_name": component_name, + "max_power": row.iloc[0, 5], + "efficiency": row.iloc[0, 9], + "pv_size": row.iloc[0, 3] + } + except FileNotFoundError: + raise FileNotFoundError(f"未找到Excel文件:{excel_path}") + except Exception as e: + raise Exception(f"读取Excel出错:{e}") + + # 4. 计算光伏阵列间距 + def calculate_array_distance(L, tilt, latitude): + beta_rad = math.radians(tilt) + phi_rad = math.radians(latitude) + return (L * math.cos(beta_rad) + + L * math.sin(beta_rad) * 0.707 * math.tan(phi_rad) + + 0.4338 * math.tan(phi_rad)) + + # 5. 计算等效小时数 + def calculate_equivalent_hours(P, P_r): + if P_r == 0: + raise ValueError("额定功率不能为 0") + h = P / P_r # 单位换算 + return h + + # 6. 计算装机容量 + def calculate_installed_capacity(max_power, num_components): + if max_power < 0 or num_components < 0 or not isinstance(num_components, int): + raise ValueError("功率和数量需为非负数,数量需为整数") + return (max_power * num_components) / 1000 # 单位:kW + + # 7. 计算年发电量 + def calculate_annual_energy(peak_hours, capacity, E_S=E_S, K=K): + if any(x < 0 for x in [peak_hours, capacity]) or E_S <= 0 or not 0 <= K <= 1: + raise ValueError("输入参数需满足:辐射量、容量≥0,E_S>0,K∈[0,1]") + return peak_hours * 365 * (capacity / E_S) * K # 单位:kWh + + # 8. 计算环境收益 + def calculate_environmental_benefits(E_p_million_kwh): + if E_p_million_kwh < 0: + raise ValueError("年发电量需≥0") + return { + "coal_reduction": E_p_million_kwh * 0.404 * 10, + "CO2_reduction": E_p_million_kwh * 0.977 * 10, + "SO2_reduction": E_p_million_kwh * 0.03 * 10, + "NOX_reduction": E_p_million_kwh * 0.015 * 10 + } + + # 9. 计算净现值和内部收益率 + def calculate_reference_yield(E_p, electricity_price, IC, q, n=25): + if E_p < 0 or electricity_price < 0 or IC <= 0 or not 0 <= q <= 1: + raise ValueError("发电量、电价≥0,投资成本>0,回收比例∈[0,1]") + + def npv_equation(irr, p, w, ic, q_val, n=n): + term1 = (1 + irr) ** (-1) + term2 = irr * (1 + irr) ** (-1) if irr != 0 else float('inf') + pv_revenue = p * w * (term1 / term2) * (1 - (1 + irr) ** (-n)) + pv_salvage = q_val * ic * (term1 / term2) * (1 - (1 + irr) ** (-n)) + return pv_revenue - ic + pv_salvage + + irr_guess = 0.1 + irr = float(fsolve(npv_equation, irr_guess, args=(E_p, electricity_price, IC, q))[0]) + if not 0 <= irr <= 1: + raise ValueError(f"IRR计算结果{irr:.4f}不合理,请检查输入") + npv = npv_equation(irr, E_p, electricity_price, IC, q) + return {"NPV": npv, "IRR": irr * 100} + + # 主计算流程 + try: + # 获取倾角和方位角 + tilt, azimuth = get_tilt_and_azimuth(is_fixed, optimize, longitude, city) + + # 获取组件信息 + pv_info = get_pv_product_info(component_name) + width_mm = float(pv_info["pv_size"].split("×")[1]) + L = (width_mm / 1000) * 4 + array_distance = calculate_array_distance(L, tilt, latitude) + + # 计算装机容量 + max_power = pv_info["max_power"] + capacity = calculate_installed_capacity(max_power, pv_number) # 单位:kW + + # 获取峰值日照小时数 + peak_hours = get_tilt_and_peak_hours(city)["peak_sunshine_hours"] + + # 计算一天单个组件发电量 + single_daily_energy = peak_hours * (capacity / pv_number) * K # 单位:kWh + + # 计算年发电量 + E_p = calculate_annual_energy(peak_hours, capacity, E_S, K) # 单位:kWh + + # 计算等效小时数 + h = calculate_equivalent_hours(E_p, capacity) # P_r 单位为 kW,E_p 单位为 kWh + + # 计算环境收益(转换为百万 kWh) + E_p_million_kwh = E_p / 1000000 # 转换为百万 kWh + env_benefits = calculate_environmental_benefits(E_p_million_kwh) + + # 计算初始投资成本 + IC = capacity * cost_per_kw * 1000 # 单位:元 + + # 计算 IRR + ref_yield = calculate_reference_yield(E_p, electricity_price, IC, q) + + # 返回结果 + return { + "city": city, + "component_name": component_name, + "tilt": tilt, + "azimuth": azimuth, + "array_distance": array_distance, + "max_power": max_power, + "capacity": capacity, + "peak_sunshine_hours": peak_hours, + "single_daily_energy": single_daily_energy, + "annual_energy": E_p, + "equivalent_hours": h, + "coal_reduction": env_benefits["coal_reduction"], + "CO2_reduction": env_benefits["CO2_reduction"], + "SO2_reduction": env_benefits["SO2_reduction"], + "NOX_reduction": env_benefits["NOX_reduction"], + "IRR": ref_yield["IRR"] + } + + except Exception as e: + raise Exception(f"计算过程中发生错误: {str(e)}") + + +# 示例用法 +if __name__ == "__main__": + try: + # 输入 + city = input("请输入城市:") + longitude = int(input("请城市经度:")) + latitude = int(input("请城市纬度:")) + component_name = input("请输入组件名称:") + electricity_price = float(input("请输入电价(元/kWh):")) + pv_number = 1200 # 固定组件数量 + q = 0.02 # 运维成本占初始投资成本的比例 + choice = input("选择光伏支架(固定式/跟踪式):") + optimize = input("是否优化倾角和方位角(是/否):") + + + # 调用主函数 + result = calculate_pv_metrics( + city=city, + component_name=component_name, + electricity_price=electricity_price, + pv_number=pv_number, + q=q, + is_fixed=(choice == "固定式"), + optimize=(optimize.lower() == "是"), + longitude=longitude, + latitude=latitude + ) + + # 打印结果 + print("\n") + print(f"城市:{result['city']}") + print(f"组件名称:{result['component_name']}") + print(f"倾角:{result['tilt']}° | 方位角:{result['azimuth']}°") + print(f"阵列间距:{result['array_distance']:.2f} 米") + print(f"单个组件最大功率(Wp):{result['max_power']}") + print(f"装机容量:{result['capacity']:.2f} kW") + print(f"峰值日照小时数:{result['peak_sunshine_hours']:.2f} 小时/天") + print(f"一天单个组件发电量:{result['single_daily_energy']:.2f} kWh") + print(f"年发电量:{result['annual_energy']:,.2f} kWh") + print(f"等效小时数:{result['equivalent_hours']:.2f} 小时") + print("环境收益:") + print(f"标准煤减排量:{result['coal_reduction']:,.2f} kg") + print(f"CO₂减排量:{result['CO2_reduction']:,.2f} kg") + print(f"SO₂减排量:{result['SO2_reduction']:,.2f} kg") + print(f"NOx减排量:{result['NOX_reduction']:,.2f} kg") + print(f"内部收益率 IRR:{result['IRR']:.2f}%") + + except Exception as e: + print(f"错误:{e}") diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..e69de29