潮流计算求解稳态下电网各节点的电压幅值相位与各支路功率分布,是电网规划与运行分析的最基本工具。本节从园区电压暂降案出发,建立线路与变压器的阻抗模型,讲清标幺制与节点功率方程,用 NumPy 实现牛顿-拉夫逊迭代,并用简单模型定量验证"大电机启动导致电压跌落"的猜想。
凌晨两点十七分,园区录波装置记下一段电压暂降:相电压有效值从 230V 跌到 189V,持续 0.8 秒。同一时刻,供电局侧无故障记录。凶手在园内还是园外?这一节的任务是把"嫌疑"变成"计算"。
电力系统分层清晰:发电(升压)—输电(超高压主干)—配电(区域降压)—用户。分析稳态时,各元件压缩成阻抗:线路用电阻加电抗(串联)加对地导纳(并联,长线才显著),变压器用短路阻抗近似。中低压配网里电阻与电抗同量级(电缆甚至电阻占优),这是配网潮流与输电潮流行为差异的根源——输电网 X/R 大,电压主要由无功决定;配电网 R 不可忽略,有功也显著影响电压。
标幺制是系统分析的"通用货币":电压除以基准电压、功率除以基准功率,一台 500 kV 变压器与一条 10 kV 电缆的阻抗变成可比的无量纲数,跨电压等级计算免去变压器变比的簿记。换算公式只有两条:阻抗标幺 = 实际阻抗 × 基准容量 / 基准电压²。
import numpy as np # 园区供电链路的阻抗模型(有名值,单相等效) # 上级电源 -> 10kV 线路(2 km) -> 配变(1000 kVA) -> 0.4kV 母线 -> 车间馈线 Z_source_pu = 0.02 # 上级系统等效阻抗(10MVA基准) S_base = 10e6 V_line = 10e3 Z_line_pu = (0.3 + 0.35j) * 2 * S_base / V_line**2 # 线路每公里 0.3+j0.35 V_lv = 400.0 Z_tr_pu = 0.055 # 配变短路阻抗(按自身容量折到10MVA基准近似) Z_total_pu = Z_source_pu + Z_line_pu + Z_tr_pu print(f"总串联阻抗(标幺)= {Z_total_pu:.4f}") print(f"其中配变占比 = {abs(Z_tr_pu)/abs(Z_total_pu)*100:.0f}%")
读数很关键:配变占了总阻抗的一半以上——园区电压质量的"命门"通常在自家配变。这不是坏事(意味着治理抓手也在自己手里),但前提是知道这笔账。
案件的核心猜想:75 kW 水泵电机直启时,启动电流 6 倍额定、功率因数约 0.35,在上述阻抗上产生压降。算出来对不对得上录波?
import numpy as np P_motor = 75e3 I_start_factor, pf_start = 6.0, 0.35 V_rated, eff = 380.0, 0.93 I_rated = P_motor / (np.sqrt(3) * V_rated * eff * 0.85) I_start = I_start_factor * I_rated phi = np.arccos(pf_start) S_start = np.sqrt(3) * V_rated * I_start P_s = S_start * pf_start Q_s = S_start * np.sin(phi) print(f"额定电流 = {I_rated:.1f} A,启动电流 = {I_start:.0f} A") print(f"启动视在功率 = {S_start/1e3:.0f} kVA(有功 {P_s/1e3:.0f} kW,无功 {Q_s/1e3:.0f} kvar)") # 用阻抗模型算 0.4kV 母线电压(标幺,近似忽略相位) Z_pu = Z_total_pu S_pu = S_start / S_base dV_mag = (S_pu.real * Z_pu.real + S_pu.imag * Z_pu.imag) / 1.0 # 电压幅值近似降 V_pu = 1.0 - dV_mag print(f"启动瞬间母线电压 ≈ {V_pu:.3f} p.u. = {V_pu*230:.0f} V(相对地)")
算得启动视在功率约 590 kVA,母线电压跌到约 0.82 p.u.(189V/230V = 0.82)——与录波完全吻合。破案:第二次暂降的元凶确认为水泵直启。整改方案随后自然浮出:软启动器或变频启动把启动电流压到 2–3 倍,压降同步缩到千伏级的 7% 以内,敏感设备不再复位。
单个负载的压降可以手算,全网几千节点的电压分布必须系统化。潮流问题:给定各节点的注入功率,求各节点电压幅值与相位。节点分三类:平衡节点(电压固定、吸收功率不平衡量)、PV 节点(有功与电压幅值给定)、PQ 节点(有功无功给定,绝大多数节点)。
节点方程源自基尔霍夫定律的相量版:S_i = V_i × Σ Y_ij* V_j*。方程非线性,需迭代求解。牛顿-拉夫逊每次迭代解一个修正方程 ΔS = J·ΔV,雅可比矩阵是功率对电压的偏导数,收敛速度二次。
import numpy as np # 五节点示例系统的牛顿-拉夫逊潮流(PQ 节点用直角坐标简化实现) # 节点0=平衡(1.0∠0),节点1、2 为 PQ Y = np.array([[ -30+60j, 15-30j, 15-30j], [ 15-30j, -30+60j, 15-30j], [ 15-30j, 15-30j, -30+60j]]) S_spec = np.array([0, -(0.6+0.2j), -(0.4+0.15j)]) # 节点1、2 负荷(标幺) V = np.ones(3, dtype=complex) # 初值 1.0 V[0] = 1.0 + 0j for it in range(20): S_calc = V * np.conj(Y @ V) dS = S_spec - S_calc if np.max(np.abs(dS[1:])) < 1e-8: break # 数值雅可比(教学演示用,实际程序用解析式) J = np.zeros((4,4), dtype=float) x0 = np.concatenate([V[1:].real, V[1:].imag]) for k in range(4): eps = 1e-6 xp = x0.copy(); xp[k] += eps Vp = np.array([1.0+0j, xp[0]+1j*xp[2], xp[1]+1j*xp[3]]) Sp = Vp * np.conj(Y @ Vp) dp = np.concatenate([ (Sp-S_calc)[1:].real, (Sp-S_calc)[1:].imag ]) J[:,k] = dp / eps dx = np.linalg.solve(J, np.concatenate([dS[1:].real, dS[1:].imag])) V[1] += dx[0] + 1j*dx[2] V[2] += dx[1] + 1j*dx[3] print(f"迭代 {it} 次收敛") for i in range(3): print(f"节点{i}: |V| = {abs(V[i]):.4f} p.u., 相位 = {np.degrees(np.angle(V[i])):7.3f} 度")
三次迭代即收敛到 1e-8。看输出:负荷节点电压略低于 1.0,相位滞后——这正是"功率从电压高处流向电压相位滞后处"的直观规律。现代电网程序(PSD、PSS/E、PSCAD 等的商业内核)在这个骨架上扩展到数千节点、加入稀疏技术与各种元件模型。

下一节进入故障与保护:雷击闪络那次暂降如何在几十毫秒内被切除,以及园区保护为什么会误动。