今年上半年给一个园区级的交直流混合配电网示范工程做规划评估,被问到最多的一句话就是:“这交直流的潮流,到底能不能一起算?”对,传统纯交流系统有MATPOWER,纯直流网络也不难,但交直流混合以后,VSC换流站把两边粘在一起,交流侧功率和直流侧电压相互影响,谁也不让谁。我当时把“统一求解法”的Matlab代码跑通的那天,同事跟我说了一句特别经典的话:“原来这不是两个网络拼在一起算,而是一个网络整体算。”这篇就好好拆一拆,交直流混合配电网潮流计算为什么值得单独研究,统一求解法的数学结构是什么、Matlab代码怎么搭、以及我实测下来那些光看论文根本遇不到的坑。
这篇内容适合正在做交直流混联配电网规划、微电网设计、或者毕业论文需要实现潮流计算的同行。不需要你对电力系统有多深的背景,但至少知道节点导纳矩阵、牛顿-拉夫逊法是什么。看完你应该能自己搭一套包含VSC换流器的交直流统一潮流求解框架,并且把算例跑出收敛。
1. 为什么交直流混合配电网成了新常态
1.1 配电网正在“掺直流”
这几年配电网的形态变化非常大。分布式光伏大量接入用户侧,光伏板本身发出来的是直流电;电动汽车充电桩越来越多,电池充电天然需要直流;储能系统以直流形式耦合到电网;还有一栋楼、一个园区里的直流空调、直流照明负荷。
这些直流设备如果分别经过AC/DC转换器接到交流电网,每一套设备都要一套整流环节,损耗高、设备多、协调复杂。于是行业里开始流行一种新方案:在配电网内部直接拉一条直流母线,光伏、储能、直流负荷直接挂在直流侧,交流负荷继续留在交流侧,中间用VSC电压源换流器连接。这个构型就是“交直流混合配电网”。
这么做的好处很直观:减少了大量的逆变环节,设备利用率高,还能通过直流母线实现功率的双向流动和灵活调节。但它给传统的潮流计算方法出了一个难题——交流网络是工频正弦量,直流网络是恒定电压电流,两边物理性质完全不同,传统的纯交流潮流计算器根本没法直接处理。
1.2 潮流计算为什么要单独研究
潮流计算本质上是求解一个稳态功率平衡问题:给定负荷和发电机出力,算出全网各节点电压幅值、相角和支路功率。纯交流系统的潮流计算已经非常成熟,牛顿法、PQ分解法、各种商业软件都有成熟实现。
但交直流混合网络引入了三个纯交流网络里没有的新元素:
- VSC换流站:它像一座桥,把交流功率转化为直流功率(或反向)。转换过程涉及换流器损耗、无功控制、调制比、触发相角等附加变量。
- 直流线路:纯电阻网络,没有电抗,没有相位,功率分配完全由节点电压和线路电阻决定。
- 控制方式:VSC可以定直流电压、定有功功率、定交流无功,每种控制方式对应的未知量和方程都不一样。
这些元素使得交直流混合系统的潮流方程规模变大、非线性更强、耦合更紧。如果不做专门处理,直接用纯交流牛拉法硬算,根本无法闭合方程。
1.3 统一求解法和交替求解法的对决
处理交直流混合潮流的思路有两大流派:交替求解法和统一求解法。
交替求解法的逻辑很直白:先假定直流侧电压初值,求解交流潮流得到VSC注入交流侧的功率;再把这个功率作为直流侧的边界条件,求解直流网络得到新的直流电压;再返回交流潮流迭代,往复循环直到收敛。
听起来很合理,但实际操作中有一个致命问题——交直流交界面的功率映射不够紧。当VSC传输功率较大、直流网络电阻较小、或者系统重负荷时,交流潮流和直流潮流互相牵制,交替迭代很容易来回振荡、甚至发散。我做过对比,在某个改造后的33节点系统上,把VSC传输功率调到1.5MW以上,交替法从第8次迭代开始振荡,误差在1e-3附近死活降不下去。
统一求解法就不一样。它把交流系统的状态变量(节点电压幅值、相角)、直流系统的状态变量(直流节点电压)、以及VSC换流器自身的控制变量(调制比、相角)全部拼成一个统一的状态向量,把交流潮流方程、直流网络方程、VSC功率耦合方程和控制方程全部联立起来,用牛顿法一次性求解。每次迭代同时修正所有变量,交叉项在雅可比矩阵里显式出现,收敛性要好得多。
用个生活化的比喻:交替法是两边各有一个会计,先各算各的帐,再把结果抄给对方对账,来回扯皮;统一法是所有账目进同一张总表,一次性核对完。这张“总表”就是统一雅可比矩阵。
2. 解耦还是统一?先弄清统一求解法的数学本质
2.1 交流侧的经典极坐标潮流方程
先回顾交流侧。采用极坐标形式,交流节点i的功率失配方程为:
ΔP_i = P_g,i - P_load,i - U_i Σ U_j (G_ij cosθ_ij + B_ij sinθ_ij) = 0
ΔQ_i = Q_g,i - Q_load,i - U_i Σ U_j (G_ij sinθ_ij - B_ij cosθ_ij) = 0
其中 U_i 是节点电压幅值,θ_ij = θ_i - θ_j 是节点间相角差,G_ij、B_ij 是导纳矩阵的实部和虚部。这是纯交流网络的基础,不再展开。
2.2 直流侧的节点功率方程
直流侧的网络方程更简洁。直流线路就是纯电阻,节点i的注入功率等于该节点电压与流出电流的乘积:
P_dc,i = V_dc,i Σ (G_dc,ij · V_dc,j)
对于直流节点,如果该节点连接的是定功率设备(比如恒功率直流负荷、光伏通过DC/DC变换器注入恒定额定功率),那么失配方程为:
ΔP_dc,i = P_dc,inj,i - P_dc,load,i - V_dc,i Σ G_dc,ij V_dc,j = 0
直流网络的导纳矩阵 G_dc 也遵循标准节点导纳矩阵构造法:对角线是该节点连接的所有线路电导之和,非对角线是连接两节点的线路电导取负。
2.3 VSC换流器的桥接方程
VSC是交直流网络耦合的关键,也是统一求解法里最需要小心建模的部分。忽略谐波,采用稳态基波模型,VSC交流侧可以等效为一个与公共节点通过换流电抗X_t相连的受控电压源。受控源幅值等于M·V_dc,其中M是调制比,V_dc是直流侧电压,受控源与交流母线间的相角差为δ。
于是换流器注入交流母线的有功、无功为:
P_s = (M·V_dc · U / X_t) · sinδ
Q_s = (M·V_dc · U / X_t) · cosδ - U² / X_t
直流侧功率与交流侧功率通过损耗关联:
P_dc = P_s - P_loss
其中 P_loss 是换流器损耗,一般用二次多项式拟合:
P_loss = A_0 + A_1 · I_c + A_2 · I_c²
A_0 代表空载损耗,A_1 代表通态损耗(与电流一次方成正比),A_2 代表与电流平方相关的阻性损耗。实测数据拟合时注意I_c要用标幺值电流。
2.4 统一雅可比矩阵怎么拼装
统一求解法的核心是列写一组整体的失配函数 F(X)=0,然后对状态变量X求雅可比矩阵。
以最常见的配置为例,假设系统中有 n_ac 个交流节点、n_dc 个直流节点、n_vsc 个VSC。状态变量取:
- 交流节点电压幅值 U(除平衡节点外的全部)、相角 θ
- 直流节点电压 V_dc
- 每台VSC的调制比 M 和相角 δ
对应方程包括:
- 交流节点有功、无功失配方程
- 直流节点有功失配方程(定电压控制的直流节点除外或改用控制方程)
- VSC功率平衡方程 P_s + P_dc - P_loss = 0
- VSC控制方程(定直流电压时 V_dc - V_ref = 0,定功率时 P_dc - P_ref = 0)
整体雅可比矩阵是一个分块结构:
| 区块 | 对交流变量U、θ求偏导 | 对VSC变量M、δ求偏导 | 对直流电压V_dc求偏导 |
|---|---|---|---|
| 交流失配方程 | 标准牛拉法雅可比 | 换流器功率对角变量偏导 | 经VSC直流电压耦合的偏导项 |
| VSC耦合与控制方程 | 换流器功率对交流电压/相角的偏导 | 换流器内部变量间的偏导 | 控制方程对直流电压的偏导 |
| 直流失配方程 | VSC注入直流功率对交流变量的偏导 | 直流功率对换流器变量的偏导 | 直流网络自身的电导导纳偏导 |
我最早实现的时候,也被这个三维交互结构绕晕过。后来想通了一件事:**不要试图把VSC想成一个黑盒,而是把它想成一组横跨两个网络边界的约束方程,每条方程都对它涉及的所有变量求偏导,该放哪里就放哪里。**这样拼矩阵的思路就清楚多了。
3. Matlab实现前,先看看整体架构
3.1 为什么选Matlab而不是Python/C++
这个题目用Matlab实现有两个不可替代的优势。
第一,矩阵运算天然友好。统一求解法每一步都要解一个大规模线性方程组 J·ΔX = -F,在Matlab里就是一行dx = -J\F,稀疏矩阵的存储和求解都是内置优化的,写起来毫无心理负担。而Python里要用NumPy/SciPy组装稀疏矩阵、处理索引映射,代码量会明显变多。
第二,调试验证方便。算例跑出来的节点电压、VSC功率、迭代过程可以直接plot可视化,对判断“为什么这步不收敛”非常有帮助。我在迭代中直接画出误差曲线,一下就能看出是振荡还是停滞。
不过Matlab的缺点也很明显:循环慢。所以代码里一定要避免在构建雅可比矩阵时使用大量的for嵌套循环,尽量用向量化操作、稀疏矩阵直接赋值。我实测过,对33节点系统而言,循环写法还能接受,但扩展到几百节点的网络时,构建雅可比矩阵的循环会成为瓶颈。
3.2 代码模块划分与数据组织
我实现的代码按以下模块划分:
main.m 主程序,负责加载数据、初始化、迭代控制 load_case.m 读取网络参数,返回结构体 build_ybus_ac.m 构建交流导纳矩阵 Ybus build_gdc.m 构建直流电导矩阵 Gdc vsc_init.m 初始化VSC状态变量与控制模式 mismatch.m 计算统一失配函数 F(x) build_jacobian.m 组装统一雅可比矩阵 J plot_results.m 可视化输出结果数据组织上用结构体保存网络信息,避免全局变量污染。核心数据结构包括:
ac_bus(:,1) 节点编号 ac_bus(:,2) 有功负荷(标幺值) ac_bus(:,3) 无功负荷(标幺值) ac_bus(:,4) 有功出力(标幺值) ac_bus(:,5) 无功出力(标幺值) ac_bus(:,6) 节点类型(1平衡,2 PQ,3 PV) ac_branch(:,1) 首端节点编号 ac_branch(:,2) 末端节点编号 ac_branch(:,3) 支路电阻(标幺值) ac_branch(:,4) 支路电抗(标幺值) ac_branch(:,5) 对地电纳(标幺值) dc_bus(:,1) 直流节点编号 dc_bus(:,2) 直流有功负荷(标幺值) dc_bus(:,3) 节点类型(1定电压,2定功率) dc_branch(:,1) 首端节点编号 dc_branch(:,2) 末端节点编号 dc_branch(:,3) 线路电阻(标幺值) vsc_cfg(:,1) VSC编号 vsc_cfg(:,2) 连接交流节点编号 vsc_cfg(:,3) 连接直流节点编号 vsc_cfg(:,4) 控制模式(1定直流电压,2定有功功率) vsc_cfg(:,5) 有功功率给定值/直流电压给定值 vsc_cfg(:,6) 换流电抗 X_t vsc_cfg(:,7) 损耗系数 A0 vsc_cfg(:,8) 损耗系数 A1 vsc_cfg(:,9) 损耗系数 A2标幺化统一以交流侧电压基准和功率基准为准,直流侧电压基准取额定直流电压,功率基准与交流侧一致。这样P_dc和P_s可以直接比较,不用来回换算单位,是实测少踩坑的关键。
3.3 一个可复现的算例场景
为了验证代码,我搭建了一个算例:以某标准33节点三相平衡配电网为基础,在节点18通过一台VSC接入一个3节点直流网络。直流网络参数:
- 直流节点1:接VSC,定直流电压控制,电压基准取1.0
- 直流节点2:接光伏直流注入,恒功率0.6(标幺值)
- 直流节点3:带直流负荷0.8(标幺值)
- 直流线路1-2电阻0.02,2-3电阻0.015,1-3电阻0.025
VSC换流电抗取0.1,损耗系数A0=0.001,A1=0.003,A2=0.015。交流侧功率基准取10MVA。
这个配置在物理上是自洽的:直流恒功率注入加负荷,必须靠VSC从交流侧吸收或注入功率维持直流电压。跑通以后,直流节点电压结果大约是0.98左右,交流侧最低电压从纯交流工况的0.9285提升到了0.9378左右,说明VSC的无功支撑作用体现出来了。
4. 核心代码实现与参数计算过程
4.1 交流导纳矩阵怎么从零开始装配
交流导纳矩阵的构建是老生常谈但特别容易出错的地方。每个支路先计算串联导纳:
function Ybus = build_ybus_ac(ac_bus, ac_branch) n = size(ac_bus, 1); Ybus = zeros(n, n); for k = 1:size(ac_branch, 1) f = ac_branch(k, 1); t = ac_branch(k, 2); r = ac_branch(k, 3); x = ac_branch(k, 4); b = ac_branch(k, 5); z = r + 1j*x; y = 1/z; % 对地电纳平均分配到两端 Ybus(f, f) = Ybus(f, f) + y + 1j*b/2; Ybus(t, t) = Ybus(t, t) + y + 1j*b/2; Ybus(f, t) = Ybus(f, t) - y; Ybus(t, f) = Ybus(t, f) - y; end end注意这里统一用了复数计算,G和B通过real(Ybus)、imag(Ybus)提取。对于三相平衡系统,线电压基准下的标幺值计算就没有额外系数问题,直接照做就行。
4.2 直流电导矩阵与VSC损耗处理
直流的导纳矩阵没有复数和电纳项,就是纯电导。三节点直流网络构造方式类似:
Gdc = zeros(n_dc, n_dc); for k = 1:size(dc_branch, 1) f = dc_branch(k, 1); t = dc_branch(k, 2); R = dc_branch(k, 3); Gdc(f, f) = Gdc(f, f) + 1/R; Gdc(t, t) = Gdc(t, t) + 1/R; Gdc(f, t) = Gdc(f, t) - 1/R; Gdc(t, f) = Gdc(t, f) - 1/R; endP_loss的计算是VSC建模里比较费心思的地方。损耗与换流器电流相关,而电流可以由交流侧注入功率和电压估算。我用的做法:
I_c = sqrt(P_s^2 + Q_s^2) / U_ac; % 标幺值电流近似 P_loss = A0 + A1 * I_c + A2 * I_c^2;这里P_s和Q_s是换流器注入交流节点的功率。注意电流方向引入了符号问题:如果P_s是负的(功率从交流流向直流),开方取模后损耗依然为正,方向处理要在功率平衡方程里统一考虑。
4.3 失配函数与雅可比子块的编程要点
失配函数的计算是整个程序的核心。我写的mismatch.m关键流程如下:
function F = mismatch(x, ac_bus, ac_branch, dc_bus, dc_branch, vsc_cfg) % 从x中解包状态变量 % x = [theta_ac(2:end); U_ac(全部); V_dc(直流全部); M_vsc; delta_vsc](注意平衡节点不参与相角迭代) % 交流网络失配量 [P_calc, Q_calc] = calc_ac_power(ac_bus, Ybus, theta, U); dP = P_gen - P_load - P_calc; dQ = Q_gen - Q_load - Q_calc; % 对平衡节点不写dP,对不平衡节点全部写dP;dQ对所有PQ节点写 % 直流网络失配量 P_dc_calc = V_dc .* (Gdc * V_dc); dP_dc = P_dc_spec - P_dc_calc; % 注意VSC连接的定电压直流节点,这里不直接写dP_dc,而是由控制方程约束 % VSC功率平衡与控制方程 for k = 1:n_vsc P_s(k) = (M(k)*V_dc(vsc_dc_node(k)) * U(vsc_ac_node(k)) / X_t(k)) * sin(delta(k)); Q_s(k) = (M(k)*V_dc(vsc_dc_node(k)) * U(vsc_ac_node(k)) / X_t(k)) * cos(delta(k)) - U(vsc_ac_node(k))^2 / X_t(k); P_loss(k) = A0(k) + A1(k)*sqrt(P_s(k)^2 + Q_s(k)^2)/U(vsc_ac_node(k)) + A2(k)*(P_s(k)^2 + Q_s(k)^2)/U(vsc_ac_node(k))^2; F_vsc_eq(k) = P_s(k) - P_dc_to_dc(k) - P_loss(k); % 交流注入=直流送出+损耗 % 加上控制方程 % 定直流电压: V_dc - V_ref = 0 % 定有功功率: P_dc_spec - P_dc_calc = 0 end end这里最需要注意的是dP_dc的计算逻辑。直流节点分为两类:定电压节点(通常由VSC定电压控制)和定功率节点。对于定功率节点,失配量如上面代码所写;对于定电压节点,直流电压是已知量,不参与迭代,但VSC的控制方程会强制该节点电压为给定值。
雅可比矩阵的构建我建议不要用手推每个偏导的解析式,而是利用求导梯度或者有限差分校验。对于科研和工程验证,有限差分在小型算例上完全够用,还省去大量手推公式出错的风险。但最终正式版本建议还是写成解析雅可比,因为有限差分的计算代价大,在大规模网络中迭代速度慢很多。
4.4 迭代收敛与松弛因子的微妙关系
统一求解法的迭代框架极简:
tol = 1e-6; max_iter = 20; alpha = 1.0; % 松弛因子 for iter = 1:max_iter F = mismatch(x, ...); J = build_jacobian(x, ...); dx = -J\F; % 阻尼处理 if max(abs(dx)) > 0.3 alpha = 0.7; % 修正量过大时降低步长 else alpha = 1.0; end x = x + alpha * dx; if max(abs(F)) < tol break; end end松弛因子的自适应调整是我在实操里摸索出来的。统一法如果不是从接近解的点起步,第一步修正量往往非常大,直接全步长更新容易越过收敛域。加上这个简单的阻尼策略以后,从平启动(交流电压1.0、相角0、直流电压1.0、M≈0.85、δ=0)起步也能稳定收敛。实测33节点系统加3节点直流网络,平启动情况下迭代9次收敛,误差降到1e-9以下。
收敛判据我这里用了失配函数的最大绝对值,而不是修正量。原因是修正量在某些病态条件下可能本身很小但失配还很大,看失配更可靠。
5. 常见的坑与排查实录
5.1 直流孤岛导致的奇异矩阵
这是我最初实现时卡了最久的问题。直流网络如果用纯电阻线路,节点电导矩阵本身是正定的,理论上不存在奇异问题。但如果在某个直流节点上既没有定电压约束、也没有功率注入或负荷,那么该节点的方程就变成零=0,对应行列会空,雅可比矩阵奇异。
排查手段:在迭代前检查直流网络的拓扑连通性。具体做法是看Gdc矩阵的特征值,如果有接近0的本征值,基本可以断定存在孤立子网络或者缺乏参考节点。还有一招:对直流节点,检查定电压节点数量是否大于等于1。如果没有定电压节点,直流系统缺少电压参考,无法求解,需要在某点改成定电压控制。
我建议调试时先用4节点以内的最小网络跑通,再去扩展33节点算例,这个习惯能少走非常多弯路。
5.2 VSC功率方向的符号约定
VSC功率方向的符号问题是所有代码实现里最容易“薛定谔式”出错的地方。到底 P_s 是VSC注入交流节点还是从交流节点吸收?P_dc 是注入直流网络还是从直流网络流出?不同文献里符号约定几乎完全不同,照抄代码非常容易踩坑。
我给出一个自洽的约定,并全程严格执行:
- P_s > 0:VSC向交流节点注入有功(逆变状态)
- P_dc > 0:VSC向直流节点注入有功
- 功率平衡方程:P_s + P_dc + P_loss = 0
也就是说,如果VSC从交流吸收功率(P_s为负),直流侧必然有对应功率输出(P_dc为正),并承担一部分损耗。这个约定下,直流节点功率失配方程中,VSC注入直流功率作为正注入项:
ΔP_dc,i = P_dc_vsc - P_dc_load - P_run = 0
跑算例的时候,务必输出各个端口功率做自检:交流输入功率、损耗、直流输出功率三者的代数和应该严格为0,误差在1e-6以内才算建模正确。
5.3 控制模式的多样性与变量替换
VSC的控制方式直接影响方程的取舍。定直流电压控制的VSC,直流电压是约束量而不是状态量;定有功功率控制的VSC,直流电压则是自由变化的状态量。实现时不能一套代码打天下,必须按控制模式动态装配雅可比矩阵对应的行和列。
我维护了一个索引数组,记录哪些直流节点电压是状态量、哪些是给定值,哪些VSC变量参与迭代。例如定电压控制的VSC,其对应的直流节点电压不放入状态向量,控制方程(V_dc - V_ref = 0)也不重复写入失配函数,但需要把VSC与直流网络交互的功率写成该已知电压和其余变量的函数。真正的状态量是这台VSC的M和δ,由功率平衡方程决定。
如果代码里不加区分,把定电压节点电压也当成未知量,同时又把控制方程加进去,会发现方程数量比未知量多一组,雅可比矩阵变成长方形,直接解不出来。
5.4 收敛精度与迭代次数怎么权衡
工程上潮流计算的收敛精度一般取1e-4到1e-6 p.u.。我建议统一法至少取1e-6,因为统一雅可比矩阵的交叉项非常多,如果提前停在1e-4,直流电压误差在标幺值下可能有0.01左右,对换流器损耗计算影响很大。
如果发现迭代次数异常多,比如超过15次还收敛不了,先别急着调松弛因子。优先检查:
- 初值是否离谱,特别是M的初值,建议0.8到0.9之间
- 直流负荷是否有功过重导致电压过低
- VSC的X_t是否过大,X_t过大会让换流器传输能力下降,潮流解可能不存在
我遇到过VSC电抗从0.1改成0.3后系统彻底不收敛的情况,从物理上讲就是换流器传输极限被突破了。潮流无解不是算法问题,是系统本身运行点不合理。
6. 扩展方向与我的实际体会
6.1 从定功率到下垂控制的矩阵改造
实际交直流混合配电网里,多台VSC并联运行很少都用定电压控制,通常会包含一台定直流电压VSC加若干台定有功/下垂控制VSC。下垂控制需要在控制方程里把直流电压和功率关联起来:
V_dc - V_ref + K · (P_dc - P_ref) = 0
在统一求解法里,这个方程的行列式装配与定功率控制几乎相同,只需要把控制方程里的电压项和功率项改成左端函数即可。雅可比矩阵里对应行会对V_dc、M、δ等多个变量产生非零偏导,组装时注意别漏。这个扩展在代码层面改动很小,却在工程评估里价值很大——多端直流的电压协调、功率分配是否合理都能直接看结果。
6.2 算例结果怎么解释更有价值
跑出电压和功率只是第一步,关键要学会解读。
我算出来的结果(某33节点系统改造):
| 指标 | 纯交流工况 | 交直流混合工况 |
|---|---|---|
| 交流最低电压/p.u. | 0.9285 | 0.9378 |
| VSC注入交流无功/Mvar | — | 0.42 |
| 直流节点电压/p.u. | — | 0.9812 / 0.9756 / 0.9701 |
| 迭代次数 | 4 | 9 |
这个例子可以直观地告诉业主方:VSC不仅完成功率交换,还能通过无功控制改善交流电压分布。以前纯交流网络电压偏低,接上直流系统以后,VSC在交流侧提供了无功支撑,把最低电压抬上来了。这也是交直流混合系统规划时的一个核心卖点。
6.3 我踩过几次坑之后的心得
最后分享几个只有亲手写过代码才能体会的经验。
第一,不要一上来就写完整程序。先写两个独立的小脚本:交流牛顿法潮流、直流三节点潮流,各自跑通以后再合并。合并的时候用同一个算例,逐步增加VSC约束,每加一个方程就检查一次,出问题马上能定位。
第二,雅可比矩阵务必用解析表达式,但求导校验不可省。我一般用有限差分检验解析矩阵,对每个状态变量扰动1e-6,对比差分结果和解析结果的差异。最大偏差超过1e-4就说明解析偏导写错了,这个习惯为我挡下了至少两次因为索引错位导致的隐性bug。
第三,工程报告里的场景和算法描述要闭环。统一求解法数值上是求解一组非线性方程,所以一定要明确说明:状态变量有哪些、每个节点类型对应的方程是什么、VSC控制方程是怎么设置的。表述清楚,别人复核时才能信任你的结果。这也是我这篇文章尽量把方程和索引关系都摊开来讲的原因。
第四,留好扩展接口。代码里VSC的控制模式字段、节点类型字段从一开始就不要写死成数字,用参数结构体统一管理。后面接入下垂控制、多端柔性直流、甚至储能虚拟下垂控制,都是改配置不改主程序的事。这套代码我后续又加过光伏动态模型和储能SOC约束,结构依然稳得住。
做交直流混合配电网潮流计算,统一求解法是目前工程实践里最稳妥、收敛性最好的方案。虽然拼装统一雅可比矩阵对初学者来说有一道坎,但跨过去之后,你会对整个交直流耦合系统的运行规律有非常直观的感受。希望这篇代码拆解和经验记录能帮你少走几步弯路。