研究筆記

把陽光儲起來:離網住宅的太陽能與電池配置

以逐時能源守恆模型設計離網住宅的太陽能與儲能容量,區分 kW 與 kWh、容量與功率、充放電效率與可靠度,並重新評估概念性水泥電池。

2024年9月22日 · 約 6 分鐘閱讀

封存文章

本文源自 HiMCM 2021 Problem A。舊程式把「每日 15 kWh」誤當成每小時 15 kWh,又用一星期只有一個週期的正弦波和最高 5 kWm25\ {\rm kW\,m^{-2}} 模擬日照,因而產生約 1,900 kWh unmet demand。 本版本重建能源帳;原有技術排名與水泥電池成本數字不視為有效結果。

離網住宅沒有電網隨時補足差額。設計儲能時,平均每日發電等於平均需求仍不夠: 系統還要跨過夜晚、陰天、高峰功率、季節低日照和設備損失。

一個可用模型要同時回答:

  1. 住宅每個時段需要多少 power(kW)?
  2. 一天或數天需要多少 energy(kWh)?
  3. 太陽能陣列在指定地點和傾角每小時可產生多少?
  4. 電池的 usable capacity、charge/discharge power 和效率是否足夠?
  5. 在一年或多年天氣中,停電風險是否低於目標?
  6. 哪一組 PV、battery 和 backup 組合的 lifecycle cost 最合理?

一、先建立負載清單

對 appliance ii,令額定功率為 PiP_i,時段 tt 的 on-fraction 為 zi(t)z_i(t)

Pload(t)=iPizi(t)+Pstandby(t).P_{\rm load}(t) =\sum_iP_i z_i(t)+P_{\rm standby}(t).

時間步長為 Δt\Delta t 小時時,

Eload(t)=Pload(t)Δt.E_{\rm load}(t)=P_{\rm load}(t)\Delta t.

要分開 critical 與 flexible loads:

類別例子模型用途
關鍵冰箱、醫療、通訊不容許或極少 unmet
可移時洗衣、熱水、充電可移到太陽充足時段
可削減部分空調、非必要照明emergency control
瞬時高峰水泵、壓縮機啟動inverter surge rating

住宅面積本身不是需求的充分預測量。住戶數、氣候、供暖燃料、煮食方式、 熱水、泵和行為都更重要。

二、太陽能發電

若有 plane-of-array irradiance GPOA(t)G_{\rm POA}(t)

PPV(t)=PSTCGPOA(t)GSTCfT(t)fsoilingfmismatchηinverter.P_{\rm PV}(t) =P_{\rm STC} \frac{G_{\rm POA}(t)}{G_{\rm STC}} f_T(t)f_{\rm soiling}f_{\rm mismatch} \eta_{\rm inverter}.

或從面積表示:

PDC(t)=APVηmodule(Tc)GPOA(t).P_{\rm DC}(t) =A_{\rm PV}\eta_{\rm module}(T_c)G_{\rm POA}(t).

GG 的單位是 kWm2\rm kW\,m^{-2},乘面積和效率後得到 kW; 再乘 Δt\Delta t 才是 kWh。地面晴天峰值通常在 1 kWm21\ {\rm kW\,m^{-2}} 左右的量級,舊模型的 5 倍峰值不合理。

def pv_energy(pv_kw_stc, poa_kw_m2, temperature_factor,
              system_factor, dt_hours):
    power_kw = (
        pv_kw_stc
        * poa_kw_m2 / 1.0
        * temperature_factor
        * system_factor
    )
    return np.maximum(power_kw, 0) * dt_hours

應使用至少一整年逐時 weather file;一個星期只有一次日照正弦週期, 會令六天近乎沒有太陽。

三、電池狀態與能源守恆

StS_t 是電池內可用 energy(kWh),容量為 CC。 把 round-trip efficiency 拆成 ηc\eta_cηd\eta_d,例如可近似

ηc=ηd=ηrt.\eta_c=\eta_d=\sqrt{\eta_{\rm rt}}.

充電端接收 EtcE_t^c、負載端輸出 EtdE_t^d

St+1=St+ηcEtcEtdηd.S_{t+1} =S_t+\eta_cE_t^c-\frac{E_t^d}{\eta_d}.

並有:

SminStSmax,0EtcPcmaxΔt,0EtdPdmaxΔt.\begin{aligned} S_{\min}&\le S_t\le S_{\max},\\ 0&\le E_t^c\le P_c^{\max}\Delta t,\\ 0&\le E_t^d\le P_d^{\max}\Delta t. \end{aligned}

SminS_{\min} 反映最大 depth of discharge; continuous power 和短時間 surge power 不能由 capacity 取代。

正確 dispatch

from dataclasses import dataclass

@dataclass
class Battery:
    capacity_kwh: float
    min_soc_fraction: float
    max_charge_kw: float
    max_discharge_kw: float
    eta_charge: float
    eta_discharge: float
    soc_kwh: float

def dispatch_step(load_kwh, pv_kwh, battery, dt_hours):
    direct = min(load_kwh, pv_kwh)
    remaining_load = load_kwh - direct
    excess_pv = pv_kwh - direct

    room_at_input = (
        battery.capacity_kwh - battery.soc_kwh
    ) / battery.eta_charge
    charge_input = min(
        excess_pv,
        battery.max_charge_kw * dt_hours,
        room_at_input,
    )
    battery.soc_kwh += battery.eta_charge * charge_input
    curtailed = excess_pv - charge_input

    min_soc = battery.capacity_kwh * battery.min_soc_fraction
    available_at_load = max(
        0,
        (battery.soc_kwh - min_soc) * battery.eta_discharge,
    )
    discharge_to_load = min(
        remaining_load,
        battery.max_discharge_kw * dt_hours,
        available_at_load,
    )
    battery.soc_kwh -= discharge_to_load / battery.eta_discharge
    unmet = remaining_load - discharge_to_load

    return {
        "direct_pv_kwh": direct,
        "charged_kwh": charge_input,
        "discharged_kwh": discharge_to_load,
        "curtailed_kwh": curtailed,
        "unmet_kwh": unmet,
        "soc_kwh": battery.soc_kwh,
    }

discharge() 先改 SOC,再用改後 SOC 判斷 shortfall,並把輸入/輸出 energy 方向混在一起,所以不守恆。上面的函數每一步都可檢查:

EPV+Edischarged=EloadEunmet+Echarged+Ecurtailed,E_{\rm PV}+E_{\rm discharged} =E_{\rm load}-E_{\rm unmet} +E_{\rm charged} +E_{\rm curtailed},

但要留意 charged/discharged 是電池哪一側的量;最可靠是明確標註 bus-side 與 cell-side。

四、可靠度指標

總 unmet energy:

Eunmet=tUtE_{\rm unmet}=\sum_tU_t

之外,離網系統還應報告:

Loss of load probability

LOLP=1Tt1(Ut>0).\mathrm{LOLP} =\frac1T\sum_t\mathbf1(U_t>0).

Loss of power supply probability

LPSP=tUttEload(t).\mathrm{LPSP} =\frac{\sum_tU_t}{\sum_tE_{\rm load}(t)}.

Autonomy

若沒有 PV,電池可供關鍵負載的小時或日數。簡單日數估算:

DautonomyCusableηdEcritical/day,D_{\rm autonomy} \approx \frac{C_{\rm usable}\eta_d} {E_{\rm critical/day}},

但逐時峰值仍需另行檢查。

Resilience event

模擬連續陰天、設備故障或 smoke/dust event,檢查關鍵負載能否維持。 平均天氣下零 unmet 不代表極端情景安全。

五、配置最佳化

決策變數可包括:

z=(PPV,Cbatt,Pinverter,battery type,Pbackup).z=(P_{\rm PV},C_{\rm batt},P_{\rm inverter}, \text{battery type},P_{\rm backup}).

以 discounted lifecycle cost 為目標:

minz[C0(z)+y=1YCO&M(y)+Creplacement(y)+Cfuel(y)(1+r)y],\min_z \left[ C_0(z) +\sum_{y=1}^{Y} \frac{C_{\rm O\&M}(y)+C_{\rm replacement}(y) +C_{\rm fuel}(y)} {(1+r)^y} \right],

並限制:

LPSPϵ,PinverterPpeak,SOCt[Smin,Smax].\mathrm{LPSP}\le\epsilon,\qquad P_{\rm inverter}\ge P_{\rm peak},\qquad \mathrm{SOC}_t\in[S_{\min},S_{\max}].

若可靠度是硬性要求,不能只把 unmet demand 以很小 penalty 加入成本。

def evaluate_design(pv_size, battery_spec, load, weather, dt):
    trace = simulate_year(pv_size, battery_spec, load, weather, dt)
    return {
        "lpsp": trace.unmet.sum() / load.sum(),
        "lolp": (trace.unmet > 0).mean(),
        "curtailment": trace.curtailed.sum(),
        "cycles": trace.equivalent_full_cycles,
        "cost": lifecycle_cost(pv_size, battery_spec, trace),
    }

六、舊 15 kWh/day 範例的錯誤

HomeEnergyDemand(base_demand=15) 在每個 hour 返回:

return self.base_demand * demand_factor

所以 15 kWh/day 被當成至少 15 kWh/hour;基本負載變成 360 kWh/day, 晚間還乘 1.5。這解釋了七日 unmet demand 為 1,677–1,893 kWh, 亦解釋了 10、13.5、50 kWh 電池結果幾乎相同:主要缺口是發電與負載單位錯誤, 不是 battery technology 的證據。

正確做法是先建立 normalized hourly shape sts_t,使

tdayst=1,\sum_{t\in\text{day}}s_t=1,

然後:

Eload(t)=Edailyst.E_{\rm load}(t) =E_{\rm daily}s_t.
shape = np.array([
    0.025, 0.022, 0.020, 0.020, 0.022, 0.030,
    0.050, 0.055, 0.045, 0.035, 0.030, 0.030,
    0.032, 0.030, 0.032, 0.038, 0.050, 0.070,
    0.085, 0.090, 0.080, 0.060, 0.045, 0.035,
])
shape = shape / shape.sum()
hourly_kwh = 15.0 * shape

這只是示範 shape;真實住宅應由 smart-meter 或 appliance diary 建立。

七、電池技術比較

Lithium-ion/LFP

優點通常包括較高 round-trip efficiency、較高 energy density、 良好 power capability 與成熟 inverter integration。需要考慮 thermal management、 BMS、cycle/calendar degradation、低溫性能與消防規範。

Lead-acid

初始成本可較低,技術成熟,但 usable depth of discharge、cycle life、 效率、維護與通風會影響實際 lifetime cost。不能只比較 nameplate kWh。

Flow battery

energy 與 power 可相對獨立擴展,適合長時儲能概念,但家用規模的成本、 泵與空間要按具體產品評估。

「水泥電池」

2021 年研究展示 electrically conductive cement-based rechargeable battery 的概念, 但 energy density 遠低於商用 electrochemical batteries,技術成熟度、cycle life、 結構安全、維修、回收與 code compliance 都未足以支持住宅產品比較。

舊文假設:

  • 50 kWh 水泥電池;
  • 65% 效率;
  • $100/kWh;
  • 十年固定 degradation factor;

卻沒有資料來源。由此算出的 $0.05/kWh lifetime cost 和「水泥比鋰電更划算」應刪除。建築材料同時承重和儲能亦會產生 failure coupling:電化學維修不能危及結構。

八、混合系統

混合儲能只有在 dispatch 把各技術分工時才有意義,例如:

  • 高功率 battery 處理短峰值;
  • 長時儲能跨夜或多日;
  • thermal storage 承擔熱水/空調負載;
  • controllable backup 只在稀有低資源事件啟動。

把兩個 Battery 分別獨立跑同一負載,再各自報 unmet demand, 並不是 hybrid simulation。真正模型需要共同 power balance:

PPV+P1d+P2d+Pbackup=Pload+P1c+P2c+Pcurtailed.P_{\rm PV}+P_1^{d}+P_2^{d}+P_{\rm backup} =P_{\rm load}+P_1^{c}+P_2^{c}+P_{\rm curtailed}.

控制規則亦要說明哪個先充、哪個先放,以及保留多少 emergency reserve。

九、敏感度與不確定性

至少改變:

  • annual load 及 hourly shape;
  • critical-load fraction;
  • weather year;
  • PV degradation;
  • battery usable capacity、efficiency 和 replacement year;
  • temperature-dependent derating;
  • component cost、discount rate;
  • required LPSP;
  • outage/multi-day low-solar events。

不要在每個 sensitivity run 重新抽一組 weather,否則參數效果與天氣 noise 混在一起。 可用相同 weather years 作 paired comparison,再用多個 years 表達 climate variability。

十、驗證清單

  1. 全時段 energy balance residual 接近零;
  2. SOC 從不超出界線;
  3. charge/discharge power 不超上限;
  4. 全零 PV 時,SOC 和 autonomy 與手算一致;
  5. 無限容量但有限 PV 時,年度能量不足仍會造成 unmet;
  6. 增加容量不應在其他條件不變時增加 unmet;
  7. 減小 Δt\Delta t 後結果收斂;
  8. 與成熟工具或一個已知 benchmark 比較。

結論

離網儲能選擇不是按 capacity、efficiency 和 price 做一張簡單排名。 先要建立逐時負載和當地 solar resource,再用守恆 dispatch 同時限制 SOC、 continuous power、surge power、efficiency 與 degradation,最後以可靠度約束和 lifecycle cost 找出可行設計。

原實驗的大量 unmet demand 主要源自每日/每小時單位錯誤和不合理 irradiance, 所以不能用來支持 lithium、lead-acid 或 cement 的優劣。修正後的研究價值在於 展示一套可泛化流程:需求盤點 → PV 模型 → 電池守恆 → 可靠度 → 成本與不確定性

參考資料

  • COMAP, Inc. (2021). HiMCM 2021 Problem A: Storing the Sun.
  • Masters, G. M. (2013). Renewable and Efficient Electric Power Systems (2nd ed.). Wiley.
  • Duffie, J. A., & Beckman, W. A. (2013). Solar Engineering of Thermal Processes (4th ed.). Wiley.
  • IEEE. (2007). IEEE Std 1561-2007: Guide for Optimizing the Performance and Life of Lead-Acid Batteries in Remote Hybrid Power Systems.
  • Zhang, E., Tang, L., Zhang, Y., et al. (2021). Rechargeable concrete battery. Buildings, 11(3), 103.