1. 浮标太阳能充电系统能量流建模与基准策略实现

能量流对象与建模假设

浮标太阳能充电系统的能量流可以抽象为三个储能/耗能节点:光伏阵列(发电)、蓄电池组(储能)、负载(耗能)。本节建立以1小时为步长的离散能量流模型,用于后续策略对照。建模前先固定以下约定,避免符号混乱:

  • 功率符号约定:流入蓄电池为正,流出为负。光伏发电功率 P_pv ≥ 0,负载功率 P_load ≥ 0。
  • 荷电状态 SOC 取 0~1,蓄电池可用容量 C_bat(Wh),充放电效率分别记为 η_ch、η_dis。
  • 基准策略采用固定阈值:SOC < SOC_on 时允许充电,SOC ≥ SOC_off 时停止充电;本节基准策略只做“充电允许/禁止”判断,不做功率限幅。
光伏阵列 P_pv(t) ≥ 0 受辐照与姿态影响 充电控制器 基准策略:固定阈值 SOC < SOC_on → 允许充电 SOC ≥ SOC_off → 禁止充电 η_ch 折算后注入电池 蓄电池组 SOC(t),C_bat η_ch / η_dis 浮标负载 P_load(t) ≥ 0 通信/传感/控制 P_pv P_ch P_dis SOC 反馈 离散能量平衡(步长 Δt = 1 h) ΔE = (P_pv·η_ch·u_ch − P_load/η_dis) · Δt SOC(t+1) = SOC(t) + ΔE / C_bat u_ch ∈ {0,1}:由固定阈值策略决定

基准策略实现

下面用 Python 实现该模型。输入为24小时的光伏功率与负载功率序列(示例数据,用于演示计算过程,非实测),输出逐时 SOC 与能量平衡结果。策略函数只依赖当前 SOC 与两个阈值,便于后续替换为优化策略时保持接口一致。

import numpy as np

# ---- 系统参数(示例值)----
C_bat   = 1200.0   # 蓄电池可用容量 Wh
SOC0    = 0.55     # 初始荷电状态
SOC_on  = 0.60     # 低于此值允许充电
SOC_off = 0.90     # 达到此值停止充电
eta_ch  = 0.95     # 充电效率
eta_dis = 0.95     # 放电效率
dt      = 1.0      # 步长 h

# ---- 24h 输入序列(示例数据)----
# 光伏:夜间为0,正午附近峰值约 180 W
P_pv = np.array([0,0,0,0,0,10,45,95,150,175,180,170,
                 150,120,80,40,10,0,0,0,0,0,0,0], dtype=float)
# 负载:通信与传感周期性工作,均值约 35 W
P_load = np.array([30,30,30,30,30,30,35,40,45,45,40,40,
                   40,40,40,40,40,40,35,35,30,30,30,30], dtype=float)

def baseline_charge_allowed(soc):
    """固定阈值基准策略:返回是否允许充电"""
    if soc < SOC_on:
        return True
    if soc >= SOC_off:
        return False
    # 处于 [SOC_on, SOC_off) 区间时保持上一状态,这里简化为允许
    return True

def simulate(P_pv, P_load):
    soc = SOC0
    rows = []
    for t in range(len(P_pv)):
        u_ch = 1 if baseline_charge_allowed(soc) else 0
        # 充电功率受光伏可用功率限制
        P_ch  = P_pv[t] * eta_ch * u_ch
        P_dis = P_load[t] / eta_dis
        dE = (P_ch - P_dis) * dt
        soc_new = soc + dE / C_bat
        # 物理约束:SOC 限制在 [0,1]
        soc_new = min(max(soc_new, 0.0), 1.0)
        rows.append((t, P_pv[t], P_load[t], u_ch, P_ch, P_dis, dE, soc_new))
        soc = soc_new
    return rows

rows = simulate(P_pv, P_load)
print(f"{'t':>3} {'P_pv':>6} {'P_load':>7} {'u_ch':>5} {'dE(Wh)':>8} {'SOC':>7}")
for r in rows:
    print(f"{r[0]:>3} {r[1]:>6.1f} {r[2]:>7.1f} {r[3]:>5d} {r[6]:>8.1f} {r[7]:>7.3f}")

E_in  = sum(r[4] for r in rows) * dt
E_out = sum(r[5] for r in rows) * dt
print(f"\n24h 充电能量: {E_in:.1f} Wh")
print(f"24h 放电能量: {E_out:.1f} Wh")
print(f"24h 净能量变化: {E_in - E_out:.1f} Wh")
print(f"末态 SOC: {rows[-1][7]:.3f}")

结果判读与基线记录

运行上述代码后,应重点核对三件事,它们构成后续优化的对照基线:

  • 能量守恒:净能量变化应等于 C_bat × (SOC_end − SOC0),若不等说明 SOC 被限幅截断,需在结果中标注。
  • 策略触发点:观察 u_ch 从 1 变 0 的时刻是否发生在 SOC 达到 SOC_off 之后,以及夜间 SOC 下降速率是否与负载一致。
  • 基线指标:记录末态 SOC、24h 净能量变化、充电被禁止的时长,作为例2、例3 优化效果的比较基准。
若把 SOC_on 与 SOC_off 设为相同值,策略会在阈值附近频繁切换;本节基准策略保留两个阈值,正是为了给后续状态机设计留出改进空间。
示例中的光伏与负载序列仅用于演示计算流程,不代表任何实际浮标站点的观测数据。实际应用时应替换为现场记录或经标定的估算序列,并重新核对容量与效率参数。