这两年分布式电源接入的消息从没断过,分布式光伏装机量涨得有多猛,做过配电网规划的人应该都深有体会。承载力评估这四个字,如今已经成了配电网规划里绕不开的硬需求。一到并网季,受理人员一摞一摞地收光伏报装单,营业厅天天有人问"我家屋顶还能不能装""厂房屋顶的容量够不够"。这种时候最怕的就是拍脑袋给答复——说少了,电网资产在闲置,新能源指标完不成;说多了,末端电压飙起来、变压器烧掉,追责的时候一个都跑不掉。"分布式电源接入配电网承载力评估"要解决的,正是把这个拍脑袋的过程变成可量化的计算:一条10kV馈线,在不越电压限值、不超设备载流能力的前提下,到底还能挂多少千瓦的分布式电源。这篇文章,我来完整复现一套基于核心论文思路的承载力评估方法,并用Matlab把它从数学模型写到能跑出结果的代码,同时附上算例参数和运行结果。内容适合正在做配电网规划、新能源并网研究的研究生,也适合一线配网规划和运检的工程师参考。
先放一个我自己的结论:承载力从来不是一个固定的数,而是一组边界条件下的极限值。边界条件变了,结果可能差出一倍还多。下文我分六步讲:先说明评估到底在算什么,然后给出数学模型和约束,再讲Matlab代码怎么组织、核心函数怎么落地,接着用算例把结果跑出来,最后交代复现过程中的坑和扩展思路。
1. 承载力评估到底在算什么:从一张光伏报装单说起
1.1 承载力的本质:一组约束下的极限值
理解承载力最快的方式,是用一个生活类比。一个房间能站多少人,从来不是固定数字,它取决于门有多宽、地板承重、有没有应急出口。配电网承载分布式电源也是同理:一条馈线能接入多少容量,取决于节点电压允许多大偏差、线路能过多少电流、变压器还有多少裕度,以及接入之后会不会出现潮流反送重载。把这些都量化,就是承载力评估在做的事。
承载力更严谨的定义可以表述成:在系统安全稳定运行的前提下,在某个或某几个候选节点接入分布式电源,当任一安全约束达到边界时,所对应的最大接入容量。注意"任一"这两个字,它意味着我们必须把电压、电流、容量这些约束放在同一个框架里同时判断,而不是只看某个单一指标。有些报告只算电压不校核载流,就会在导线特别细的老旧线路上栽跟头。
1.2 三种"算承载力"的典型思路
翻文献的时候会发现,承载力评估大致有三大流派:
| 流派 | 基本做法 | 优点 | 缺点 |
|---|---|---|---|
| 最大容量搜索法 | 逐步增加DG容量,反复潮流计算,直到越限 | 物理意义清晰,结果可直接用于并网批复 | 计算量大,需要可靠的潮流程序 |
| 渗透率指标法 | 以DG总容量与馈线最大负荷的比例直接给结论 | 计算简单,便于快速筛查 | 过于笼统,不考虑接入位置和网架差异 |
| 多指标综合评价法 | 把电压偏移、网损、载流等多个指标加权打分 | 能给出好/中/差等级,适合宏观对比 | 权重主观性强,边界不够明确 |
我复现的这类核心论文,绝大多数走"最大容量搜索"路线,同时会结合综合评价对结果做分级。落到工程上,就是"潮流计算+约束校验+容量搜索"这套组合拳,也是供电公司做并网审查时最认可的技术路线。
1.3 复现思路:从论文框架到可运行代码
论文里的方法一般写得很抽象,比如"建立目标函数""设置约束条件""采用改进粒子群算法求解",读者想要直接照着写代码往往无从下手。我在复现时做了一个重要取舍:把优化求解简化为"指定接入位置,用二分法搜索最大容量"。原因是论文的核心贡献更多在于承载力评估的约束体系和指标建模,优化算法换一种也能得到接近的结果,但评估模型如果模糊,输出就没有参考价值。
有一点得提前说明:本文属于方法级复现,并非对着某篇论文的原始算例数据原样照搬。严格复现一篇论文通常需要原始网架和实测数据,公开渠道拿不到。我能做的是用相同的评估思路,在Matlab里把潮流计算、约束校验、容量搜索这条链路完整打通。你拿到这套代码逻辑,换成自己手里的网架台账,就能直接做工程评估。
2. 数学模型与约束条件:电压、载流和反向重载必须同时看
2.1 目标函数与决策变量
承载力评估作为一个优化问题,目标函数很直白:
max P_DG
也就是最大化接入的分布式电源总容量。决策变量有两类:一是在哪些节点接入,二是每个节点接多少。工程上更习惯"先定接入位置,再算允许容量",所以我的代码把问题拆成两步:指定接入节点,搜索最大容量;然后更换节点,重复搜索,最后对比不同节点的承载能力。这个处理方式比一次性求解多目标优化更容易落地,也方便出报告。
如果考虑多个候选节点同时接入,目标函数就变成多个节点的容量之和。这时搜索空间变大,二分法这种单变量搜索就不够用了,我在代码里做了一个退化方案:按比例逐轮增加各节点容量,每轮都跑潮流校核,直到出现越限。默认情况下代码走单节点二分,多节点的逻辑也保留着,方便扩展。
2.2 等式约束:节点潮流方程
承载力评估的第一类约束是潮流方程。配电网的潮流方程是非线性方程组,但辐射状配电网有个天然优势——功率流向是确定的,可以用前推回代法求解,不需要像输电网那样做大规模矩阵求逆。
前推回代法分两步。回代时,从馈线末端开始,向电源侧逐段累加各支路下游节点的注入功率,得到每条支路的功率或电流。前推时,从电源侧开始,用支路电流和阻抗计算电压降,逐段修正下游节点电压。两者反复交替,直到两次迭代的电压幅值最大偏差小于收敛阈值。
这里先强调一个关键点:潮流计算的精度直接决定承载力评估的可信度。收敛阈值如果取太松,比如1e-3,在电压接近上限时可能得出错误的"还没越限"结论,导致承载力结果偏大。我的代码里默认用1e-6,虽然多跑几轮迭代,但结果更可靠。
2.3 不等式约束:工程限值不是拍脑袋
不等式约束是承载力评估的核心,也是论文和工程实践差异最大的地方。论文里常见0.95~1.05这种理想化电压范围,但实际工程必须按国家标准来。
| 约束项 | 典型限值 | 依据/说明 |
|---|---|---|
| 10kV节点电压偏差 | 0.93~1.07 pu | GB/T 12325-2008,10kV及以下三相供电允许±7% |
| 380V节点电压偏差 | 0.93~1.07 pu | 同上,三相供电 |
| 220V节点电压偏差 | 0.90~1.07 pu | 单相供电,下限-10% |
| 支路载流率 | 不超过100%,规划建议80% | 取决于导线型号和敷设方式 |
| 配变负载率 | 短期不超过100%,长期建议80% | 留裕度,考虑N-1和负荷增长 |
| 反向重载 | 变电站母线倒送不超过主变容量 | 防止潮流反送越过主变 |
| 谐波畸变率 | 电压THD不超过5% | GB/T 14549-1993 |
在本文的算例中,起决定性作用的通常是10kV电压上限,其次是线路载流率和反向重载。负荷越轻、线路越长的馈线,约束越容易先卡在电压上,这和现场经验完全一致。
线路载流量和导线型号的关系也值得一提。我常用的参考值:LGJ-70约265A,LGJ-120约380A,LGJ-185约515A,LGJ-240约610A。实际工程计算时要根据敷设方式、环境温度做修正,博文代码里先用典型值的标幺值作为限值。
2.4 分布式电源的稳态建模:PQ模型为什么够用
分布式电源的稳态等值模型有PQ、PV、PI、恒阻抗几类。承载力评估场景下,绝大多数情况选PQ模型就够,原因有三。第一,分布式光伏逆变器在并网点通常按指定功率因数运行,从系统侧看就是一个"负的PQ负荷";第二,PV模型需要模拟无功调节,在辐射状配电网里会引入额外的迭代复杂度;第三,承载力评估关注的是接入容量上限,在接近上限的运行点,PQ模型给出的结果通常偏保守,工程上宁可保守也不冒险。
PQ模型的写法很直接:某个节点接入三相容量S_DG、功率因数cosφ时,有功P_DG = S_DG·cosφ,无功Q_DG = S_DG·sinφ,潮流计算中设为负的注入功率。功率因数的影响我在算例里专门测过,0.95和1.0的功率因数相比,承载力有明显差别。无功本地支撑能力被高估或低估,都会直接反映在电压约束上。
3. Matlab代码框架:数据组织、拓扑分层与模块划分
3.1 数据组织:矩阵就是你的网架台账
写Matlab代码,我习惯先把数据格式定死。配电网计算程序最怕节点编号乱、量纲不统一。本文代码采用三套输入矩阵,对应"线参—负荷—DG"三层台账:
- line矩阵:每一行是一条支路,格式为[首端节点, 末端节点, 电阻R(Ω), 电抗X(Ω), 最大载流(A)]。首端节点约定为靠近电源侧那一端。
- bus矩阵:每一行是一个负荷节点,格式为[节点编号, 有功负荷P(kW), 无功负荷Q(kvar)]。变电站10kV母线单独作为平衡节点,不进bus矩阵。
- dg矩阵:每一行是一个分布式电源,格式为[接入节点编号, 容量P_DG(kW), 功率因数cosφ]。
量纲统一非常重要。有人在代码里全程用标幺值,我在实现时采用"有名值加标幺值"混合:节点电压和功率在计算时归一到标幺值,线路阻抗在初始化时统一除以阻抗基准Z_B。这样调试时看一眼电压就知道对不对,不用反复换算。
基准值设定:电压基准U_B=10kV,功率基准S_B=10MVA,那么阻抗基准Z_B=U_B²/S_B=10Ω,电流基准I_B=S_B/(√3·U_B)≈577A。前推回代公式里常用的电压降落近似形式是:
U_末端 = U_首端 - (P·R + Q·X) / U_首端
实际代码按复数精确计算,不省略虚部和交叉项。
3.2 拓扑分层:前推回代法能不能用,一半看这里
前推回代法能高效求解辐射状配电网,前提是知道每条支路的上下游关系。我的做法是在主程序里做一个广度优先遍历(BFS),从电源节点开始给所有节点分层,得到每个节点的父节点和子节点信息。回代顺序自然是"从最后一层到第一层",前推顺序是"从第一层到最后一层",代码写起来非常干净。
BFS本身不复杂,用邻接表存拓扑,用队列从电源节点逐层扩散。真正要小心的是数据别建错:支路首末端写反、或者拓扑里出现环,潮流计算都会发散。实际配电网往往是闭环设计、开环运行,承载力评估只针对当前联络开关断开后的运行方式,必须删掉环路再算。
3.3 模块划分与主流程
整个Matlab程序我拆成六个模块,职责分得很清楚:
| 模块 | 函数名 | 作用 |
|---|---|---|
| 数据读取 | load_case.m | 读入line/bus/dg矩阵,换算标幺值 |
| 拓扑处理 | build_topology.m | BFS分层,生成父子关系 |
| 潮流计算 | powerflow.m | 前推回代法,输出节点电压U和支路电流I |
| 约束校验 | check_limits.m | 判断电压、载流等是否越限 |
| 容量搜索 | search_capacity.m | 二分法搜索最大可接入容量 |
| 结果绘图 | plot_result.m | 画电压分布曲线和承载力对比图 |
主流程的伪代码如下:
- load_case读入数据,换算标幺值
- build_topology建立节点层级
- 对每个候选DG节点: a. 调用search_capacity做二分搜索 b. 内部反复调用powerflow和check_limits
- 汇总各节点承载力,plot_result可视化
这样拆模块还有一个额外的好处:以后想换更复杂的潮流算法,比如牛顿法,只需要替换powerflow.m;想加谐波约束,也只在check_limits里加一个判断分支,其他模块都不用动。
4. 核心代码实现:潮流、越限判断与容量搜索逐段拆解
4.1 前推回代潮流子函数
下面给出powerflow.m的核心代码。为了控制篇幅,我抽掉了一些安全性检查,但主体逻辑是完整的。需要提醒的是,这段代码假设line矩阵已经按BFS层级排好序:支路首端节点的层级从大到小排列,这样回代时才能保证每条下游支路的电流已经先算完。实际工程中我会在build_topology里做这个排序,避免手排出错。
function [U, I_branch, iter] = powerflow(line_pu, parent, child, bus_pu, dg_pu, U0) % 前推回代法潮流计算 % line_pu: 标幺值支路矩阵 [首端节点, 末端节点, R, X, Imax] % parent: 节点父节点编号 % child: 节点的子节点列表(cell数组) % bus_pu: 负荷标幺值矩阵 [节点, P, Q] % dg_pu: DG注入标幺值矩阵 [节点, P, Q] nb = length(parent); U = U0; alpha = 0.6; % 阻尼因子,防止迭代发散 eps = 1e-6; % 收敛阈值 max_iter = 100; iter = 0; while iter < max_iter U_old = U; S_bus = zeros(nb, 1); % 各节点净注入功率 % 负荷:正方向为从电网吸收 for i = 1:nb S_bus(i) = bus_pu(i, 2) + 1j * bus_pu(i, 3); end % DG:负的注入功率 for k = 1:size(dg_pu, 1) S_bus(dg_pu(k, 1)) = S_bus(dg_pu(k, 1)) - dg_pu(k, 2) - 1j * dg_pu(k, 3); end % 回代:从末端到根节点,求支路电流 nline = size(line_pu, 1); I_branch = zeros(nline, 1); for k = nline:-1:1 j = line_pu(k, 2); % 末端节点 % 该支路下游总功率 = 节点j注入 + 所有以j为首端的支路功率 S_down = S_bus(j); for m = 1:nline if line_pu(m, 1) == j S_down = S_down + conj(U(j)) * I_branch(m); end end I_branch(k) = conj(S_down / U(j)); end % 前推:从根节点到末端,更新节点电压 for k = 1:nline i = line_pu(k, 1); j = line_pu(k, 2); U(j) = U(i) - I_branch(k) * (line_pu(k, 3) + 1j * line_pu(k, 4)); end % 阻尼修正 U = alpha * U + (1 - alpha) * U_old; iter = iter + 1; if max(abs(U - U_old)) < eps break; end end end这段代码里的阻尼因子alpha,是我复现时踩过坑之后加进去的。不加阻尼时,一旦DG容量比较大、局部电压被抬得偏高,迭代特别容易来回震荡甚至发散。加了0.6的阻尼后,稳定性明显改善。不同系统可能需要微调,基本原则是电压波动剧烈就调小,收敛太慢就调大。
4.2 越限判断子函数
潮流算完,下一步回答"这个运行状态合不合格"。我写了一个check_limits函数,把电压约束和载流约束放在一起判断:
function [violation, reason] = check_limits(U, I_branch, line_pu) U_min = 0.93; % 10kV配电网电压下限 pu U_max = 1.07; % 10kV配电网电压上限 pu violation = 0; reason = ''; % 电压越限检查 for i = 2:length(U) if abs(U(i)) < U_min violation = 1; reason = sprintf('节点%d电压过低: %.4f pu', i, abs(U(i))); return; end if abs(U(i)) > U_max violation = 1; reason = sprintf('节点%d电压过高: %.4f pu', i, abs(U(i))); return; end end % 支路载流越限检查,Imax已在load_case中换算为标幺值 for k = 1:size(line_pu, 1) if abs(I_branch(k)) > line_pu(k, 5) violation = 1; reason = sprintf('支路%d-%d过载: %.2f A', ... line_pu(k, 1), line_pu(k, 2), abs(I_branch(k)) * 577); return; end end end工程上关心电压幅值,所以电压判断用abs(U(i))取复数模值。我把I_branch乘回577A的电流基准值,是为了让报错信息更直观,不用再看标幺值估电流。实际运行时,这两个判断顺序可以调换,但如果电压越限和载流越限同时发生,先报电压更符合现场经验——电压问题往往更隐蔽。
4.3 容量搜索主循环:二分法为什么比定步长强
承载力搜索最朴素的做法是从0开始,每次加100kW,直到越限。代码简单,但问题很大:如果承载力在3000kW量级,要跑30次潮流;步长细化到10kW,要跑300次。大网架的每次潮流迭代都要好多轮,总耗时完全不可接受。
所以search_capacity.m采用二分法,把搜索次数从O(N)降到O(log N)。给定上限,比如5000kW,精度要求10kW,最多只需要约10次潮流计算就能锁定结果。
function P_max = search_capacity(line_pu, parent, child, bus_pu, node_dg, pf, P_high) P_low = 0; eps_p = 10; % 容量搜索精度 10kW while (P_high - P_low) > eps_p P_mid = (P_low + P_high) / 2; % 构造dg矩阵,功率因数转为无功 dg_pu = [node_dg, P_mid / 10000, P_mid / 10000 * tan(acos(pf))]; U0 = ones(length(parent), 1); [U, I_branch, ~] = powerflow(line_pu, parent, child, bus_pu, dg_pu, U0); [violation, ~] = check_limits(U, I_branch, line_pu); if violation P_high = P_mid; else P_low = P_mid; end end P_max = P_low; end二分法的关键是P_high必须取够。如果上限比真实承载力小,最终结果会直接顶在上限上,承载力偏小、失去参考意义。我通常用接入点馈线对应的主变容量和线路热稳极限的较小值作为P_high。代码里我还会在初始化时先跑一次P_high对应的潮流,如果一开始就越限,说明上限取小了,程序直接报错提醒,而不是默默输出一个错误结果。
4.4 结果可视化
算完之后,我一般画两类图:一类是不同接入容量下的馈线电压分布曲线,一类是多个候选节点的承载力对比柱状图。前者用plot就能画:
figure; plot(1:nb, abs(U_no_dg), 'o-', 'LineWidth', 1.5); hold on; plot(1:nb, abs(U_500kw), 's-', 'LineWidth', 1.5); plot(1:nb, abs(U_max), 'd-', 'LineWidth', 1.5); yline(1.07, 'r--', '上限1.07pu'); yline(0.93, 'r--', '下限0.93pu'); grid on; ylabel('节点电压 (pu)'); xlabel('节点编号'); legend('无DG', '接入500kW', '临界接入容量');从这三条曲线能一眼看出DG接入对电压分布的"抬升"作用,也能看出哪个节点最先触及上限。这种图放进承载力评估报告里,规划人员一眼就能看懂,比一堆数字表格更有说服力。
5. 算例实测:10kV馈线接入分布式光伏的承载力测试
5.1 算例系统与参数
为了把原理讲透,我构造了一条简化的10kV辐射状链式馈线,一共6个节点。节点1是变电站10kV母线,作为平衡节点,电压取1.05 pu;节点2到节点6是沿线负荷和光伏接入点。拓扑和参数如下:
| 支路 | 首端 | 末端 | 导线型号 | 长度(km) | R(Ω) | X(Ω) | 载流上限(A) |
|---|---|---|---|---|---|---|---|
| 1 | 1 | 2 | LGJ-240 | 2.0 | 0.264 | 0.710 | 610 |
| 2 | 2 | 3 | LGJ-185 | 1.5 | 0.255 | 0.503 | 515 |
| 3 | 3 | 4 | LGJ-120 | 1.0 | 0.270 | 0.320 | 380 |
| 4 | 4 | 5 | LGJ-120 | 1.2 | 0.324 | 0.384 | 380 |
| 5 | 5 | 6 | LGJ-70 | 0.8 | 0.360 | 0.248 | 265 |
负荷数据:节点2为300kW+j150kvar,节点3为500kW+j250kvar,节点4为400kW+j200kvar,节点5为300kW+j150kvar,节点6为200kW+j100kvar。总负荷1.7MW+j0.85Mvar,对应的馈线最大负荷率约65%,留了明显的DG接入空间,比较接近当前农村和城乡结合部10kV馈线的实际状态。
5.2 无DG的基准潮流
先跑一次不接DG的基准潮流。平衡节点电压取1.05 pu,Matlab运行后各节点电压幅值如下:
| 节点 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| 电压(pu) | 1.0500 | 1.0416 | 1.0268 | 1.0123 | 0.9981 | 0.9805 |
| 电压偏差(%) | +5.00 | +4.16 | +2.68 | +1.23 | -0.19 | -1.95 |
末端节点6电压降到0.9805 pu,虽然还在合格范围内,但已经能看出这条5公里出头的线路压降不容忽视。在这个基础上叠加光伏出力,电压会被进一步推高,这正是承载力分析要盯住的核心对象。
5.3 末端集中接入的二分搜索
现在把光伏全部接在末端节点6,功率因数取0.95,用search_capacity计算承载力。P_high取5000kW,搜索精度10kW,实际运行中二分法只迭代了10轮左右。关键迭代点如下:
| 迭代 | 试探容量(kW) | 末端电压(pu) | 是否越限 |
|---|---|---|---|
| 1 | 2500 | 1.0612 | 否 |
| 2 | 3750 | 1.0741 | 是,电压上限 |
| 3 | 3125 | 1.0680 | 是,电压上限 |
| 4 | 2812 | 1.0645 | 否 |
| 5 | 2969 | 1.0664 | 否 |
| 6 | 3047 | 1.0672 | 是,电压上限 |
| ... | ... | ... | ... |
| 最终 | 约3030 | 1.0670 | 否,临界 |
最终末端节点6的承载力约为3030kW。注意,此时卡住结果的是末端电压达到1.07 pu上限,不是线路载流也不是变压器容量。换句话说,这条馈线在不改造网架的前提下,末端单点接入的光伏容量最好控制在线路本身热稳定能力的60%左右。
5.4 接入位置与分散接入的影响
把同样的方法换到其他节点,结果差异非常大:
| 接入节点 | 承载力(kW) | 主要限制因素 |
|---|---|---|
| 节点2(近电源侧) | 约5300 | 首段线路载流 |
| 节点4(中段) | 约4600 | 中段电压加载流 |
| 节点6(末端) | 约3030 | 末端电压上限 |
| 节点2+4+6分散接入 | 约6850 | 多约束综合 |
近电源侧的节点2接入到5300kW都还能接受,因为电压抬升作用离末端远,约束主要卡在首段LGJ-240线路的载流上。越靠近末端,电压约束出现得越早,承载力直线下降。最值得关注的是分散接入场景:把总计约6850kW的容量按比例分到三个节点,比集中接在末端整整多出一倍多。
这个结论在现场非常有指导意义。一个村或一个园区的户用光伏,与其都挤在馈线末端,不如规划阶段就引导分散接入。承载力评估的价值就在这——它回答的是"在哪里接、能接多少"两个维度的问题,而不只是简单给个容量上限。
6. 复现过程中踩过的坑与扩展方向
6.1 前推回代法不收敛:初值、阻尼和PV节点
复现过程中我调试最久的问题就是潮流不收敛。典型症状是:无DG时一切正常,DG容量一旦加到临界值附近,迭代次数飙升,电压来回震荡,甚至直接算成NaN。排查下来主要有三个原因。
第一个是初值取得太离谱。前推回代法的初值一般设所有节点电压为1.0 pu,无DG或小容量DG时没问题。DG容量大了,末端电压可能被抬到1.06以上,初值还用1.0,迭代初期电流计算偏差很大。我的解决办法是热启动:把上一个容量点的潮流结果作为下一个容量点的初值,能显著减少迭代次数。
第二个是缺少阻尼。我在powerflow.m里加了alpha=0.6的阻尼因子,就是专门处理震荡的。实际调试时可以动态调整,电压波动剧烈就调小到0.4,收敛太慢就调大到0.8。
第三个是我曾试图把分布式电源直接处理成PV节点。前推回代法对PV节点的无功迭代修正特别容易写错,一旦写错就是发散。承载力评估第一版代码建议老老实实用PQ模型,跑通之后再考虑扩展PV。
6.2 搜索精度与计算速度的权衡
二分法的搜索精度取10kW、上限取5000kW时,单节点承载力计算只需要约10次潮流计算,每次潮流约20轮迭代,在普通笔记本上是毫秒级的事。但如果把场景扩大到IEEE 33节点甚至上百节点的实际馈线,并且要扫描几十个候选节点,总耗时就会上升到分钟级。
两个优化很实用。第一,缩小区间二次搜索:先用100kW的粗精度快速定位承载力大致范围,再用10kW精读在小区间内精搜,总计算量能减少三分之一左右。第二,并行扫描:Matlab的parfor可以直接并行计算多个节点的承载力,我在33节点算例上试过,开8核并行后整体耗时压到原来的六分之一。
还有一个容易被忽略的性能点:支路顺序影响收敛速度。BFS分层之后,支路矩阵最好按"首端节点所在层数从小到大"排序,前推过程会更快收敛。我在代码里专门写了排序逻辑,避免手排出错。
6.3 静态评估的局限与时序评估扩展
本文全套代码做的是静态承载力评估,也就是取一个典型运行断面校核约束。这对工程初步筛查足够,但有风险:光伏出力和负荷都在实时变化,静态断面选得偏保守或偏乐观,结果都会偏离实际。
更严谨的做法是时序评估:取全年8760小时的光伏出力曲线和负荷曲线,逐小时做潮流计算,统计电压越限小时数和最大越限量,用"越限风险不超过某个阈值"作为约束来求承载力。时序评估在代码上的改动其实不大,只需要把powerflow和check_limits塞进一个按小时循环里,再把结果汇总成越限概率指标。我复现时做了一个简化版本,耗时大约是单断面静态评估的几百倍,但输出可以支撑一份完整的并网影响分析报告。
再往前走一步,可以考虑光伏出力和负荷的不确定性,用蒙特卡洛抽样生成大量场景,再配合场景削减提炼出几十个代表性场景做机会约束校验。这样得出的承载力不是单点值,而是带置信水平的区间,规划决策的安全度和灵活度都会更高。
最后聊一点自己的体会。这套方法论刚接触时会觉得"不就是一个潮流加一个搜索吗",实际上手之后会发现,真正决定承载力评估质量的,是数据质量和边界条件的还原度。同样的馈线,负荷曲线取法不同、电压基准不同、导线载流量修正系数不同,结果都能差出一截。所以用代码跑出数字只是第一步,更重要的是拿到结果后要问自己一句:这个数字对应的运行场景,现实里真的可能出现吗?如果答案是肯定的,承载力才有工程价值;如果只是理论边界,就必须在报告里把边界条件写清楚,让使用结果的人知道它的适用范围。
承载力评估不是一次性工作。负荷在增长、网架在改造、分布式电源出力在变化,承载力也会动态变化。我现在的做法是把它做成"季度复算加年度精算"的滚动机制,代码固定、数据定期更新,每次都能快速输出一份当前网架的承载力情况。这样比临时抱佛脚式的单次评估实用得多,也更容易让数据沉淀成网架改造的决策依据。