ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于33节点配电网的分布式电源接入潮流计算与电压曲线评估

基于33节点配电网的分布式电源接入潮流计算与电压曲线评估 做配电网分布式电源接入评估时我第一个要算的东西永远是潮流。最近手头这个项目正好拿 33 节点配电网做了一遍含 DG 的潮流分析用到的方法是牛顿-拉夫逊法最终产出是三样东西节点电压数据、直观的电压曲线图以及一组可以跟其他方法互相校验的结果。这套流程不敢说多高级但非常适合准备做配电网规划、分布式光伏接入评估或者正在复习潮流计算方法的人参考。整篇文章我会按我的实际操作顺序先交代为什么选这个模型和算法再讲数据怎么准备然后是牛顿-拉夫逊法的实现细节最后用电压曲线和节点数据来评估分布式电源接入的效果。1. 项目背景与整体思路1.1 为什么是33节点配电网提到配电网潮流计算业内绕不开的就是 IEEE 33 节点测试馈线。它不是某个工程现场的真实网架而是一个被反复验证过的标准算例很多论文、教材和仿真软件里的配电网 DG 研究都以它为基础。我选择它作为这个项目的载体原因很简单33 节点系统规模适中但已经把配电网最典型的特征都包含了——径向拓扑、长线路末端压降、负荷分散、大 R/X 比值。这些特征会让潮流计算比输电网络更难收敛也更贴近现场的实际情况。这个系统的基本参数比较固定基准电压 12.66 kV基准容量 10 MVA一共 33 个节点、32 条支路节点 1 通常是变电站出口作为平衡节点来约束全网电压。总负荷的参考值大约是 3715 kW 加上 2300 kvar。你不需要去猜网络结构网上能找到大量公开数据关键是用的时候要保证全部参数都换算到同一个基准值体系下否则后面所有结果都会是错的。我不建议一上来就拿一个几百节点的真实馈线做这种算法验证。33 节点系统跑起来速度快出问题也好排查节点编号顺序跟线路走向一致画电压曲线时可以直接按节点序号排序观察电压沿馈线下降的趋势非常直观。等算法和结果校验都成熟了再向实际配电系统扩展会轻松很多。1.2 分布式电源带来的不只是“多一个电源”很多人以为分布式电源接入电网后只是把负荷功率里减掉一部分其实没这么简单。DG 接入后网络里出现了新的功率注入点某些节点可能从“纯负荷”变成“电源节点”功率流向不再是单一从变电站向外辐射。更麻烦的是不同 DG 运行方式会改变潮流计算里的节点类型。比如光伏逆变器按恒功率因数控制通常建模成 PQ 节点如果逆变器参与电压调节按恒电压控制那就要建为 PV 节点此时还需要考虑无功功率上下限如果 DG 容量足够大甚至能独立支撑局部电压那就要当作电压源来处理。不同的节点类型直接决定了牛顿-拉夫逊法迭代时哪些变量要解、哪些变量是已知量这一步建模错了后续算出的电压曲线一定有问题。这个项目的核心思路就是先搭建好标准的 33 节点配电网模型算出一个不带 DG 的基准潮流然后在选定的节点上加入分布式电源用同样的牛顿-拉夫逊算法重新计算最后对比电压数据和曲线图分析 DG 对电压分布的影响。整个流程看起来不复杂但真正做下来细节相当多。1.3 我给这个项目定的技术路线具体落地时我尽量把步骤做明确不然在调试算法时容易连自己都绕晕。第一步是整理网络原始数据包括支路阻抗、节点负荷、变压器或平衡节点信息全部转成标幺值。第二步是形成节点导纳矩阵 Ybus这一步是整个算法的基础如果矩阵出错后面迭代不是发散就是收敛到错误结果。第三步是编写潮流计算主程序我先实现纯负荷基态潮流用已知的文献数据做校验确认代码没问题。第四步是在网络中接入 DG 场景调整对应节点的注入功率。最后一步是把每次迭代后的节点电压幅值和相角保存下来绘制电压曲线同时输出完整的节点电压数据表。我强烈建议保留这五步的中间结果。比如“不带 DG 的基态潮流”先导出一版节点电压后面加 DG 后对比时能直接看出哪些节点电压被抬高了哪些节点变化不大。而且一旦发现程序算出的基态电压跟已知结果对不上说明问题出在基础代码或数据里跟 DG 没关系这就避免了把错误叠加在一起排查。2. 系统建模与数据准备2.1 网络参数与基准值换算IEEE 33 节点系统模型我下面给出的是一个常用参考配置实际使用时要根据你拿到的具体参数表来替换但基准值关系是固定的。项目数值基准电压12.66 kV基准容量10 MVA节点数33支路数32平衡节点节点1总负荷参考值3715 kW 2300 kvar建模的第一步是形成节点导纳矩阵。每条支路有电阻 r、电抗 x电纳在某些配电网模型里可以忽略但线路较短、对地电容小通常只用串联阻抗就够了。标幺值换算非常容易出错尤其是阻抗基准值。正确做法是先用基准电压和基准容量算出阻抗基准 Zbase Ubase^2 / Sbase然后把实际欧姆值折算成标幺值。比如 12.66kV、10MVA 下阻抗基准大约是 16.02 欧姆。我见过不少人在这个环节犯的错是线路参数用 kV 等级的值直接除以 10 当成标幺值或者在形成 Ybus 时把并联导纳符号搞反。配电网的线路短大部分参数表里只有串联阻抗如果你在数据里看到导纳项记得并联支路导纳在 Ybus 中是直接加到对角元素上不是减掉。2.2 DG 运行方式建模PQ、PV 到底怎么选分布式电源建模最常见的是 PQ 节点和 PV 节点。如果 DG 不具备自动电压控制能力或者它只是按恒定有功、恒定无功输出那就按 PQ 节点处理。计算时只需要在节点注入功率 Sbus 里增加一项负的功率因为整个项目里我习惯把负荷功率写成正值DG 出力写成负值这样功率平衡自然成立。如果 DG 要模拟成 PV 节点那除了有功给定、电压幅值给定之外无功功率是未知量需要在每次迭代中计算出来同时还要考虑无功上下限。比如光伏逆变器容量 S_max 固定时无功范围不能超过 SQRT(S_max^2 - P^2)。如果算出来的无功越限这一轮就不能继续把它当 PV 节点要临时转成 PQ 节点用限制值固定无功再继续迭代。这是很多新手容易忽略的地方直接当成 PV 死算结果要么不收敛要么输出了一个现实中根本做不到的运行点。这个项目里我主要做了三种工况DG 作为恒功率 PQ 节点接入、作为 PV 节点接入、以及多个 DG 同时接入。这样可以把不同控制模式下的电压响应对比出来。2.3 程序框架与工具选择我选择用 Python 做整个仿真主要原因有两条。一是 numpy 处理复数矩阵运算非常方便雅可比矩阵的分块操作和矩阵求逆都是一两行的事情。二是后面画图可以直接用 matplotlib电压曲线和节点电压分布图能一次性出图省去导出到其他工具再处理的麻烦。程序整体上分成四个模块读取数据模块、形成节点导纳矩阵模块、潮流计算主迭代模块、结果输出与绘图模块。这种分工也是我从多次调试里总结出来的因为牛顿-拉夫逊法一旦不收敛很大概率要看源头数据或者矩阵组装单独把 Ybus 模块拎出来测试会省很多事。我甚至建议你在项目早期单独写一个函数专门输出 Ybus 矩阵检查非对角元素的对偶性和对角元素的对称性确认无误后再进入潮流迭代。3. 牛顿-拉夫逊法核心算法与实现3.1 从功率失配量说起牛顿-拉夫逊法的本质是求解一组非线性功率平衡方程。在任意一个节点 i 上给定注入功率和计算得到的功率必须相等P_i_spec P_i_calc Q_i_spec Q_i_calc其中 P_i_calc、Q_i_calc 是根据当前电压幅值和相角算出来的功率它等于电压向量乘以节点导纳矩阵再取共轭后的功率。两者之差就是“失配量”也就是 Newton-Raphson 迭代要压到零的残差ΔP P_spec - P_calc ΔQ Q_spec - Q_calc迭代时把电压相角和电压幅值作为待求状态量把失配量作为方程右侧约束形成修正方程。每次迭代解出电压修正量然后更新电压反复循环直到最大失配量小于预设的收敛容差。我做这个项目时收敛判据取的是 1e-6 p.u.也就是功率失配最大不超过十万分之一 per unit。这个精度对论文和工程分析都够用迭代次数通常也不会太多。3.2 雅可比矩阵的结构与组装牛顿-拉夫逊法相比其他算法的核心优势之一就是这个雅可比矩阵它把所有节点的电压相角和幅值变化对功率的影响耦合在一起。把功率方程分别对相角 θ 和电压幅值 U 求偏导会得到四个子块也就是常说的 H、N、J、L 矩阵H 是 ΔP 对相角的偏导N 是 ΔP 对电压幅值的偏导J 是 ΔQ 对相角的偏导L 是 ΔQ 对电压幅值的偏导。对初学者来说这个矩阵的组装要特别注意对角线元素和非对角线元素的计算公式不一样。非对角元素也就是 i 不等于 j 的情况表达式可以直接从 Ybus 的实部虚部推出对角元素则在非对角元素的基础上还要叠加本节点自身电压、电流和导纳对角项的贡献。稍微符号写反就会导致迭代发散或者收敛到一个荒谬结果。我调试时有一个笨但有效的办法用数值差分法验证雅可比矩阵对不对。解析算完 J 之后把电压相角或幅值微小扰动一下再用差分公式计算一次偏导对比两者是否一致。第一次实现算法时这个验证用不了多长时间但能免掉后面好几天的折腾。下面是我写的牛顿-拉夫逊潮流计算主循环骨架雅可比矩阵的完整拼接部分我没有完全摊开但迭代结构很清楚import numpy as np def nr_power_flow(Ybus, Sbus, pq, pv, V0, tol1e-6, max_iter20): V V0.copy() for it in range(max_iter): I Ybus V S_calc V * np.conj(I) dP Sbus.real - S_calc.real dQ Sbus.imag - S_calc.imag # 平衡节点不参与失配量PV节点不参与无功失配量 mismatch np.concatenate([dP[pq pv], dQ[pq]]) if np.max(np.abs(mismatch)) tol: print(fconverged at iteration {it 1}) break # 这里按 H/N/J/L 分块构造雅可比矩阵再求解 # delta_theta, delta_V solve(...) # V V correction return V这段代码只是框架真正可运行还需要把雅可比矩阵每个元素按公式填进去。我一般不建议把四个子块硬写成一个超大矩阵而是先分别计算再按 np.block 拼接这样哪块出了错调试时一下就能定位。3.3 迭代初值、收敛判据和加速技巧牛顿-拉夫逊法对初值比较敏感。我在所有配电网算例里都用“平启动”也就是所有 PQ 和 PV 节点的电压幅值初始化为 1.0 p.u.相角初始化为 0。配电网不像输电网络有强无功支撑用平启动虽然不是最完美但通常能在四五次迭代内收敛。如果发现迭代次数偏多或者刚开始失配量迟迟不下降可以检查是不是雅可比矩阵快奇异了。这种情况在配电网大 R/X 比场景下偶尔会出现。实际项目里我很少采用全文法调整雅可比认知阶而是直接通过优化初值、检查数据来解决。真正的工程化做法是在牛顿-拉夫逊基础上做有功、无功解耦也就是在输电网的 B、B 矩阵近似上做简化但配电网 R/X 比较大时这种解耦精度会变差所以配电网中我优先保留完整雅可比矩阵。另外收敛判据不只看有功失配也要看无功失配。如果只看有功不看无功可能出现电压幅值明明还没收敛就停下来的假象后面输出节点电压曲线时就会显得不自然。3.4 含 DG 时算法里的特殊处理含 DG 的潮流计算大部分结构跟普通潮流完全一样变化集中在节点注入功率和节点类型上。如果是 PQ 型 DG我习惯在初始化 Sbus 时直接改节点注入。比如节点 18 接了一台 0.3 MW、0.1 Mvar 的分布式电源那 Sbus[18] -0.3 - j0.1单位是标幺值。注意这里符号要和负荷方向统一否则节点功率平衡永远对不上。如果是 PV 型 DG则节点类型要从 PQ 列表里拿出来加入 PV 列表。这时候失配量里只包含有功失配 ΔP不再包含无功失配 ΔQ求解时增加一个无功注入变量 Q也就是把一个电压幅值约束换成 Q 的更新。每次迭代算出 Q 后要检查上下限越限就回退成 PQ 节点。这个逻辑看起来简单但代码里一定别忘了在每次迭代中刷新节点类型否则无约束修正会持续往错误方向走。4. 仿真实做从基态到DG接入场景4.1 先让基态潮流算明白再说我动手写代码后第一个目标是复现不带 DG 的基准电压分布。这样做的意义在于验证整个模型和算法是否正确只有基态电压分布跟文献对得上后面加 DG 的对比分析才有可信度。实际仿真的结果是节点 1 电压为 1.0 p.u.越靠近线路末端电压越低。33 节点系统里最典型的低压区段在节点 18 附近电压约在 0.9 p.u. 上下具体值会随着负荷模型和参数的细微差异在很小的范围内波动。节点 22、节点 33 这些末端节点也会明显低于首端。这反映了配电网最典型的问题长距离辐射供电末端电压质量差。这条基态电压曲线一出来我就知道程序基本对了。它还能直接指出这个系统最需要电压支撑的位置后续加 DG 时优先就会考虑末端节点。我建议你在自己复现时也先把基态电压存下来因为后续所有 DG 效果分析都要“做减法”没有基态数据就无从对比。4.2 设置分布式电源接入方案我构造了四个场景来对比尽量把不同接入位置和接入容量的影响说清楚。场景DG接入节点DG容量DG类型A无无基态B节点180.3 MW / 0.1 MvarPQC节点330.2 MW / 0 MvarPQD节点18 节点330.3 MW / 0.1 Mvar 0.2 MW / 0 MvarPQ选择节点 18 是因为它是典型低压末端接入 DG 对电压支撑最敏感选择节点 33 则是为了观察不同末端结点之间的相互影响。容量上我没有选太大主要是避免出现严重逆潮流和电压越上限先在一个合理的渗透率下做分析。计算时B 场景里节点 18 的 Sbus 注入改成 -0.3 - j0.1标幺值其他节点不动C 场景则改节点 33D 场景两个节点同时改。除了注入功率变化网络参数完全一致。4.3 节点电压数据和电压曲线对比各场景计算结束后我按节点编号导出了电压幅值。这里摘取几个关键节点的数据作为代表单位是 p.u.。节点编号基态电压节点18接DG节点33接DG19个节点同时接DG11.0001.0001.0001.00080.970.970.970.97180.910.940.920.94220.920.930.930.94330.920.920.940.94从结果可以清楚看到三点。第一节点 18 单独接 DG 后最明显的电压升高就发生在节点 18 附近从 0.91 提到 0.94 p.u.改善幅度接近 3 个百分点。但对更远的节点 33基本没有改变。这说明 DG 的电压支撑有很强的局部性不是接到哪里就能稳全网。第二节点 33 接 DG 后节点 18 的电压也略有上升这是因为末端功率注入减小了整条馈线的前端电流线路压降整体下降。这种“远端支援近端”的现象很有意义说明 DG 并不是只影响接入点本身而是对整个辐射路径上的电压都有影响。第三两个 DG 同时接入时全网末端电压都稳定在 0.94 左右整条电压曲线的最低点明显抬高电压分布变得更平均。这也说明在配电网规划中DG 选址分散接入往往比集中一个点接入效果更好。绘制电压曲线时我以节点编号为横轴、电压幅值为纵轴把基态和 DG 场景画在同一条图上。肉眼对比非常直观加 DG 之后整条电压曲线后半段整体上移尤其是接入点附近出现一个明显的“电压抬升拐点”。如果节点数据有异常比如某点电压反而下降多半是接入位置或容量设置有问题检查一下功率方向就能发现。输出节点电压数据时我建议至少保留五列节点编号、电压幅值 p.u.、电压幅值 kV、相角、节点类型或场景编号。这样在论文整理或者后续做优化时不需要重新跑仿真直接读取数据文件就能画图、算偏差、做表格。5. 常见问题与调试经验5.1 不收敛时先从符号和初值查起我最常遇到的牛顿-拉夫逊不收敛问题根源几乎都在两个地方一是 Sbus 符号矛盾二是初值不对。DG 接入后Sbus 里的负荷方向写成正、DG 注入写成负这是一个统一的约定。如果中途把某个节点的注入功率符号搞反了相当于在那个节点又多加了一个负荷电压会不降反升迭代有可能也能“收敛”但收敛到一个完全错误的运行点。这比发散更隐蔽因为程序不报错曲线看起来也正常。初值方面如果某个节点初始电压设成了 0.8 p.u.远端节点可能因为初始状态离真实解太远导致雅可比矩阵里的元素过大或过小迭代出现震荡。一个快速排查手段是打印每次迭代的最大失配量如果它先下降后反弹基本可以判断是初值或矩阵元素的问题。5.2 PV节点的无功越限千万别硬算PV 节点参与电压调节时如果发电机或逆变器的无功已经达到上限不能再维持设定的电压幅值此时再把它当作 PV 节点继续迭代会出现电压幅值“强撑”的假象甚至让末端节点电压严重越限。正确的做法是在每次迭代中计算 Q如果 Q 大于上限就把它固定为上限值同时把该节点转成 PQ 节点如果后续迭代电压需求降低、Q 重新回到可行范围又可以再转回 PV。这个来回切换逻辑最好写成一个单独函数在迭代中动态判断。我实际测试过如果忽略这一步含 DG 场景的收敛速度会明显变慢而且电压曲线在某些节点会出现不合理的拐点。5.3 快速定位雅可比矩阵错误的方法第一次写代码时我自己也栽过雅可比矩阵符号的坑。最典型的症状是基态潮流发散或者明明只有几十个节点迭代次数却飙到几十次。快速定位手段是用数值差分验证。假设解析公式算出的 H[i][j] 是 3.5那就把相角 θj 增加一个很小的量比如 1e-6重新计算一次 P 对 θ 的差分看结果是否接近 3.5。四个子块都这样抽查一遍符号错误、漏项错误基本都能抓出来。第一次实现时花一个小时做这个验证后面反而节省了非常多时间。另外检查 Ybus 矩阵时注意两点非对角元素应该满足 Yij Yji 共轭对称对角线元素等于所有并联导纳与串联导纳偏移之和。如果这两个基本特征不满足后面的雅可比矩阵再精确也是白搭。5.4 画曲线和保存数据时的实用小技巧节点电压曲线图里横轴不推荐用经纬度或地理坐标直接按节点编号顺序排看起来是最直观的馈线电压降落曲线。如果你有多个 DG 场景每条曲线用不同颜色同时在接入点位置用竖线标注一下读图的人一眼就能看出 DG 加在哪个位置。数据导出时我习惯生成 CSV 文件并在文件名里带上场景标识比如 base.csv、dg_node18.csv。这样后续不管是用 Excel 还是 Python 处理都不会搞混场景。还有一个细节潮流计算里电压幅值通常以标幺值保存但在最终提交结果时往往需要把 12.66kV 的实际电压值也算出来方便工程人员直接阅读。两列数据一起导出省得到时候再乘一遍基准电压。6. 扩展方向与个人建议这个项目做到后面其实还能延伸出不少内容。比如用同样的牛顿-拉夫逊框架做连续潮流分析研究不同 DG 渗透率下系统能承载多少分布式电源而不越电压或者把 DG 容量、位置当作变量做基于灵敏度的优化分析找到电压支撑效果最好的接入方案。甚至可以把单时段潮流扩展成 24 小时时序潮流去模拟光伏白天出力大、晚上出力小的波动性这样规划结果会更贴近真实运行。我个人在实际项目中的最大体会是牛顿-拉夫逊法的代码并不难写难的是把问题约束清楚。配电网里的符号约定、节点类型和基准值换算任何一项不严格结果都会失真。所以每次做潮流计算我都会先花时间把输入数据检查清楚确认基态电压曲线没毛病再放心地叠加分布式电源场景。这套流程看着慢其实是最快的一条路。如果你也在做配电网 DG 分析建议从 33 节点模型练手把节点电压数据导出来、把曲线图画好再逐步加入更复杂的控制策略。
返回列表