
分布式电源接入对配电网的影响这几年几乎成了配电网规划、运行和科研都绕不开的话题。屋顶光伏、分散式风电、储能电站、V2G充电桩这些新型电源大批量涌入10kV及以下配电网把传统配电网单向辐射状的结构和潮流模式搅了个天翻地覆。随之而来的电压越限、反向潮流、谐波放大、保护配合失效等一系列问题一个比一个头疼。我最近用Matlab把这套影响分析完整仿真了一遍从配电网基础潮流计算开始到分布式电源建模再到不同接入位置和容量下的电压分布、网损变化、短路电流水平代码全部跑通结果也整理成了图表。这篇博文就分享整个从零搭建的过程、关键代码片段和踩过的坑适合正在做配电网分析、写毕业论文或者搞分布式电源规划方案的工程师和电气专业的同学参考。看完你至少能独立跑通一套分布式电源接入影响评估的仿真框架并且知道每个参数改动背后对应什么样的工程意义。1. 问题背景与整体思路1.1 分布式电源接入的核心关切点传统配电网是树状的单向供电结构从变电站出口开始功率只会沿着馈线流向负荷方向单一且稳定。接入分布式电源Distributed Generation简写DG之后配电网从纯负荷网络变成了源荷混合网络。这个转变带来的第一个直接后果就是电压分布改变。DG向系统注入有功功率沿途的电压降落会被部分抵消节点电压被抬高。越是负荷轻、电源容量大抬升越明显。我在一个10kV馈线模型上做过末端光伏接入的测试额定电压12.66kV轻载条件下接入大容量DG后末端节点电压直接从0.98p.u.抬到1.07p.u.。按国内配电网电压允许偏差范围来看这已经是妥妥的越上限状态。实际工程里白天光照强而负荷未必同步走高这种电压越限风险是真实存在的。第二个关切点是网损。很多人直觉认为DG接进配电网就能降损这个说法只对了一半。DG接入点靠近负荷中心、容量适中确实能减少功率长距离传输带来的损耗但接入位置不合适或者容量超过馈线消纳能力多余的电量就会沿着线路反向倒送反而增加额外损耗。所以接在哪接多少才是决定网损升降的关键这个问题非常适合用仿真来量化。第三个维度来自逆变器接口和继电保护。现代DG大多通过电力电子变流器并网这带来了谐波污染和频率支撑能力弱的问题同时DG的短路电流注入特性也改变了故障电流分布传统三段式过流保护的灵敏度可能受到影响出现误动或拒动。这三个层面的影响基本构成了配电网DG接入分析的主线后面所有仿真都围绕它们展开。1.2 为什么选Matlab做这套仿真其实电力系统领域可用的专业仿真工具不少DIgSILENT、PSASP、ETAP都能做分布式电源接入分析。但用下来你会发现专业软件有它不方便的地方一是建模粒度受限制你想把一种特殊的逆变器控制策略写进去或者把潮流算法改成自己需要的形式在封闭的软件架构里往往很麻烦二是批量场景处理效率低做位置×容量矩阵式对比时每个方案都要手动配置容易出错。Matlab的优势正好补在这两点上。首先配电网潮流计算的核心是求解节点电压前推回代法本质就是一段循环迭代逻辑用Matlab写出来极短几十行代码够用了。其次Matlab的数组和矩阵运算能力很强几千个节点的配电网迭代计算完全不在话下配合稀疏矩阵存储更是高效。再者可视化和数据后处理一站式完成plot、bar、scatter这些命令直接出图不需要导出到其他软件再加工。还有一点很现实Matlab在学术界和工程界的历史代码存量极大网上能找到大量前人所做的配电网潮流、DG优化配置、故障分析等模块的开源代码和讨论帖。你遇到迭代不收敛、参数单位错误这类问题基本都能搜到可参考的解决方案这对于学生和刚入行的工程师来说尤其有吸引力。1.3 仿真总体框架整套仿真按四个环节展开。第一步搭建IEEE 33节点测试系统用前推回代法完成基准潮流计算验证模型正确性第二步建立分布式电源的稳态出力模型第三步设计接入场景控制DG的接入位置、总容量、接入数量这三个变量第四步计算电压分布、网损率、最大电压偏差、短路电流水平等指标用曲线和表格呈现结论。每个环节在Matlab里对应独立的脚本或函数模块这样单个模块出问题时便于定位也方便后续扩展。我建议你也按这种基础算例—电源建模—场景控制—指标后处理的分层思路组织代码而不是把所有内容堆在一个脚本里跑到底。后面几节我会把每个环节的要点和核心代码分别展开说明。2. 配电网基础模型搭建IEEE 33节点的Matlab实现2.1 测试系统基础参数IEEE 33节点系统是配电网研究通用的标准算例一条12.66kV馈线33个节点32条支路总负荷3715kW加2300kvar。这个系统规模不大但结构上包含主干线、多条分支线和重载末端配电网的典型特征基本都覆盖了非常适合用来做DG接入影响这个主题。用Matlab建模前先把三类基础数据准备清楚节点负荷向量、支路阻抗向量和拓扑连接关系。节点的负荷数据在世界各地论文和开源代码里都能查到单位通常是kW和kvar建议在程序里统一转成标幺值基准容量取10MVA基准电压取12.66kV。支路阻抗也一并转成标幺值比如第一条支路节点1到2的阻抗是0.0922j0.0470Ω换算成标幺值后写入向量。拓扑关系用两个数组表示BranchFrom存每条支路的首端节点BranchTo存末端节点。这种表示方法简单直观后面的前推回代迭代会根据这两个数组确定功率流动的方向。我在程序里还会额外预处理出每个节点的下游支路集合这个细节后面再详细说。2.2 潮流计算原理前推回代法配电网潮流计算和输电网有明显的区别。输电网多是环网结构普遍采用Newton-Raphson法需要构建节点导纳矩阵反复求解修正方程计算量相对大。配电网则是辐射状结构前推回代法Backward/Forward Sweep更为高效原理也简单——本质上就是反复应用基尔霍夫定律。计算过程分成两步循环。第一步是回代假设节点电压已知从馈线末端开始逐条支路往上游推算支路电流每条支路电流等于其下游所有节点注入电流之和。节点注入电流由该节点的净注入功率和当前电压决定公式是I_i conj(S_i / V_i)。第二步是前推从根节点开始根据支路电流和支路阻抗逐级往下更新节点电压公式为V_child V_parent - I_ij * Z_ij。反复执行回代和前推直到两次迭代之间的电压差值小于预设精度。收敛判据我通常取连续两次迭代电压幅值差的绝对最大值小于1e-6标幺值。这个方法迭代次数不多一般几十次内就收敛了而且没有求导和矩阵求逆的复杂操作代码写起来非常干净。在辐射状配电网这个场景下它比Newton-Raphson法更省事这也是绝大部分配电网DG影响分析论文选择它的原因。2.3 核心代码思路与拓扑预处理先给一个前推回代法主循环的骨架代码全部按标幺值计算。注意这里省去了数据加载部分假设阻抗向量Z_branch、负荷向量S_load、支路首末端数组BranchFrom/BranchTo都已经准备好。% IEEE 33节点前推回代法主循环 nbus 33; nbranch 32; V ones(nbus, 1); % 电压标幺值初值 max_iter 100; tol 1e-6; for k 1:max_iter V_old V; % —— 回代计算各支路电流 —— S_node S_load; % 当前净注入功率接入DG时在这里修改 I_inj conj(S_node ./ V); % 节点注入电流 I_branch zeros(nbranch, 1); for ed nbranch:-1:1 child BranchTo(ed); I_branch(ed) I_inj(child); % 累加该节点下游所有支路电流 for sub downstream{child} I_branch(ed) I_branch(ed) I_branch(sub); end end % —— 前推更新节点电压 —— for ed 1:nbranch parent BranchFrom(ed); child BranchTo(ed); V(child) V(parent) - Z_branch(ed) * I_branch(ed); end % 收敛检查 if max(abs(V - V_old)) tol break; end end代码里我提前构建了downstream这个元胞数组每个元素存的是当前节点作为首端的所有支路编号。构建方法是在读取拓扑数据后把每条支路按照首端节点归类。这样做的原因是避免在每次回代时重复遍历所有支路去查找父子关系在节点规模变大后这个优化带来的速度提升非常明显。有两点细节提醒你注意。第一节点注入电流公式里用的是共轭复数符号一定不能搞反否则迭代出来的电压会有明显的震荡。第二IEEE 33节点官方算例里部分版本会把支路编号顺序打乱有的按主干优先有的按末端优先。建议在一开始就做一个拓扑正确性验证用无DG场景算出来的节点电压应该和论文里公认的0.95p.u.左右末端电压对应上。如果对不上先检查数据加载部分别急着改算法。3. 分布式电源建模与接入场景设计3.1 DG稳态出力模型的简化与选型做稳态潮流影响分析的时候不需要把DG内部的控制细节全部建出来。最常见的做法是把DG当作一个功率注入源用PQ恒功率模型处理在潮流迭代中DG节点就是一个负的负荷节点注入功率为-P_dg - jQ_dg仅此而已。这种模型很适合做规划阶段的方案对比因为重点在于分析这个位置接入这么多功率会有什么影响而不在于DG本身的暂态行为。如果需要更进一步可以考虑光伏出力的时变特性。光照强度近似服从Beta分布光伏出力可以表示为P_pv η·S·f(t)其中η是综合效率S是光伏阵列面积f(t)是光照归一化系数。风电出力则用Weibull风速分布配合功率曲线获得。这些在Matlab里都能用rand函数生成随机场景但要注意稳态单时段的对比分析不需要加随机性加了反而会影响结果的可比性。随机分析属于扩展话题放在第5章的扩展思路里说。还有一个不容忽视的点是DG的无功能力。现代并网逆变器一般具备一定的无功调节范围常见的简化建模方式是指定功率因数运行比如0.95感性或者0.95容性。潮流模型里对应为Q_dg P_dg * tan(acos(pf))符号决定感性还是容性。在负荷较重、线路末端电压偏低的场景DG按容性功率因数运行可以帮助抬升电压这是实际工程中很常用的调压手段仿真时可以专门做一个对比。3.2 接入位置与容量场景设计场景设计是整个影响分析的核心环节直接决定了结论能不能回答工程关切。我选择了三个变量来构建场景矩阵接入位置、总容量渗透率、接入点数量。接入位置挑了四个有代表性的节点。节点2靠近馈线首端模拟电源接在变电站附近节点12位于中段节点18是末端最重载、电压最低的区域节点25是分支线的负荷中心。这四个位置分别代表近电源、中段馈线、末端、分支四种典型接入场景。容量维度用渗透率控制渗透率定义为DG注入功率占系统最大负荷的比例。系统峰值负荷3715kW所以15%、30%、50%渗透率对应的总DG容量大约是557kW、1115kW、1858kW。多个DG接入时按比例分摊到各节点。场景S6设计为三个节点同时接入、总渗透率30%的多点接入方式用来考察分布式接入对电网的多点支撑作用。这个场景矩阵覆盖了位置、容量、数量三个维度算出来的对比结论比较立体不至于出现单一变量偏差导致错误结论的问题。场景编号接入节点渗透率DG总容量(kW)接入个数S0无0%00S11815%5571S21830%11151S31850%18581S41230%11151S52530%11151S612、18、2530%111533.3 代码层的接入实现方式从实现角度说在任何场景下接入DG本质上就是改节点净注入功率向量。潮流主循环并不需要改动只需要在回代前把DG的出力叠加到对应节点上。比如节点18接入557kW、功率因数0.95的DG代码就是S_load(18) S_load(18) - (P_dg 1i*Q_dg); % 其中P_dg和Q_dg是标幺值 P_dg 557 / Sbase; % Sbase10000kW Q_dg P_dg * tan(acos(0.95)); % 0.95功率因数对应的无功这里有个符号陷阱特别容易踩DG是注入功率所以S_node里DG部分是减号。你要是把减号写成加号DG就变成额外的负荷了算出来的电压不升反降结论全反。我前后见过不少人在这翻车。建议每次换场景之前先打印某个DG节点的净注入功率复核一下。所有场景计算完成后我把结果统一存在一个结构体数组里例如results.S2.V存场景S2的全部节点电压results.S2.loss存网损值。后续计算指标和画图直接遍历这个数组就行不用重复跑潮流。这样代码模块之间耦合度低也方便你在某个场景结果异常时单独查看中间变量。4. 影响分析的关键指标与结果可视化4.1 电压分布分析以无DG的S0场景为基准先画出各节点电压幅值曲线。正常情况下无DG时越到馈线末端电压越低节点18这个最远端重载点的电压约在0.95p.u.左右仍然在允许运行范围内。这条曲线同时验证了潮流程序本身的正确性——如果你的基准电压分布和这个标准结果对不上后面所有分析都不可信。接入DG后电压曲线的变化非常直观。对比S1、S2、S3三个场景DG全部接在节点18渗透率依次提高。可以看到电压曲线在节点18附近被明显抬高渗透率15%时末端电压从0.95抬到约0.99p.u.30%时到1.02p.u.50%时接近1.05p.u.。这个趋势说明接入点越是靠末端局部电压抬升越明显渗透率越高越限风险越大。做这个分析时只算额定负荷这一个运行点还不够。实际运行中DG出力最大往往出现在午间光照最强时段而负荷高峰可能出现在傍晚所以轻负荷大出力是最危险的组合。强烈建议至少再设置一个轻载30%满发DG的极端场景看电压是否越上限。很多项目方案就是因为只看了一个标准工况结果现场运行暴露出电压问题。4.2 网损变化分析网损指标我按系统总网络损耗功率与总负荷功率之比来统计重点是观察不同接入方案的相对变化。基准场景S0的总网损大约在190kW左右网损率约5.1%这和IEEE 33节点系统的公开参考值基本一致。接入DG后网损变化分三种情况很有意思。第一种是末端接入且容量适中S1总网损降到约160kW降幅约16%。第二种是末端接入容量过大S3总网损反而上升到约175kW因为末端倒送功率沿长线路向主电源方向流动损耗重新增大。第三种是多点接入S6三个位置分摊容量网损降到约115kW附近降幅接近40%是所有场景里最优的。这个结果说明分布式电源的接入位置和容量分配需要统筹优化盲目多接并不一定节能。场景总网损(kW)网损率(%)较基准变化S0约1905.1基准S1约1604.3约-15.8%S2约1504.0约-21.1%S3约1754.7约-7.9%S6约1153.1约-39.5%需要提醒的是不同测试系统的负荷密度、线路长度差异很大这些绝对值只在本算例内有效但中段或分支接入降低损耗、末端大容量接入反而升高损耗这个规律具备普遍参考意义。工程上做方案比选时可以专门做一张不同渗透率下的网损率曲线找到这个系统的经济接入容量拐点。4.3 短路电流与谐波影响短路电流影响用故障计算模块单独评估。我在原有潮流数据基础上建立了一个简化的三相短路计算程序公共电网等效为电压源串电抗DG按其类型等效为电压源加电抗。逆变器型DG故障时的短路电流通常限制在额定电流的1.2到1.5倍而同步机型DG可能达到5到6倍。用这个模块计算后发现节点18接入一台1.1MW容量的DG后该节点三相短路电流大约增加10%到20%这个增量对保护整定值的影响需要专门校验。谐波影响方面稳态潮流无法覆盖需要建立时域仿真模型。在Matlab里通常用Simulink搭光伏逆变器并网系统用PWM控制模拟开关过程然后对并网点电流做FFT分析计算各次谐波含有率和总畸变率THD。工程经验是6k±1次特征谐波5次、7次、11次、13次是逆变器的主要谐波来源LCL滤波器参数设计不合理时THD很容易超标。这个方向展开需要很大的篇幅我建议先把稳态分析做好再考虑时域谐波模块。4.4 结果可视化与图表输出可视化部分我做了三张核心图直接用于方案汇报和论文插图。第一张是各场景的电压分布对比曲线用hold on把多条曲线画在同一张图上横轴是节点编号纵轴是电压标幺值可以很直观地看出DG接入点附近的电压凸起。第二张是网损柱状图每根柱子一个场景网损降低的直观程度比数据表高很多。第三张是渗透率与网损率的关系散点图用smooth连接趋势线能快速定位降损的最优渗透率区间。核心绘图代码如下很简单但要注意中文字体设置问题figure; hold on; plot(V0, k-o, LineWidth, 1.2); plot(V_S1, b-s, LineWidth, 1.2); plot(V_S3, r-^, LineWidth, 1.2); legend(无DG,末端15%,末端50%, Location, best); xlabel(节点编号); ylabel(电压(p.u.)); grid on; set(gca, FontName, SimHei); % 避免中文乱码 figure; bar([loss_S0, loss_S1, loss_S2, loss_S3, loss_S6]); set(gca, XTickLabel, {S0,S1,S2,S3,S6}); ylabel(总网损(kW)); grid on;Matlab在部分系统上默认中文字体显示为方框设置FontName为SimHei或者改用英文标签都能绕开这个问题。我在写论文插图时通常直接用英文标签省得出图后再在Word里追改格式。5. 常见问题与调试心得5.1 潮流不收敛的原因排查前推回代法不收敛的现象主要有两种电压越迭代越发散或者电压在某个值附近来回震荡。排查顺序我建议从简单到复杂。第一步查符号。DG节点净注入功率的符号、节点注入电流公式里的共轭符号这两个地方错了迭代必乱。第二步查单位。我见过不少人把kW数据直接当作标幺值代入结果潮流计算出来电压低得离谱或者网损占了负荷的一半。这一步在程序开头就应该用disp打印基准值和总对负荷量一眼就能看出单位错没错。第三步才是考虑算法问题比如PV节点的无功调节策略不当。如果DG节点设为PV节点电压低于设定值时应该加大无功注入高于设定值时减小注入。这里加一个阻尼系数取0.2到0.5之间稳定性会好很多。5.2 拓扑数据与迭代顺序的坑IEEE 33节点系统的数据版本很多不同来源的支路编号顺序差异挺大。有的数据文件从主干线开始编号有的从分支末端开始这直接影响前推回代循环中支路的处理顺序。如果代码里直接按支路编号从1到32顺序迭代而编号顺序又不是严格按照从末端到首端排列的回代时可能会出现下游电流还没算完就把上游支路电流算出来的逻辑矛盾。我的解决方法是不依赖外部编号顺序而是在程序初始化阶段根据BranchFrom和BranchTo的数据自己构建一棵反映供电父子关系的树结构。具体做法是用一个栈结构从根节点开始深度优先遍历生成每个节点的父节点编号和所有子节点列表。回代时按深度优先逆序处理前推时按顺序处理这样无论数据源怎么打乱编号计算逻辑都是正确的。这个预处理过程多花不了几行代码但能省掉后面排查各种莫名奇妙错误的几天时间。5.3 从稳态走向动态与优化配置的扩展思路如果你不是在写作业而是要把这套代码用于实际项目或毕业论文的深化建议按三个层次逐步扩展。第一个层次是时序仿真。把单时段的稳态潮流扩展成24小时或者全年8760小时的连续潮流分析负荷用典型日曲线光伏出力用日内出力曲线逐时刻计算电压和网损最终得到电压越限概率、日网损曲线、DG消纳率等指标。这个扩展在研究高渗透率光伏接入时几乎是必需的因为光伏出力和负荷天然存在时间错配只看单一时段完全抓不住问题的全貌。第二个层次是不确定性分析。用蒙特卡洛方法对负荷水平和DG出力按照概率分布生成大量随机场景批量跑潮流统计电压越限概率和网损分布范围。这样输出的结论不再是某个场景电压越高限而是该方案一年内电压越限概率约为百分之几这种表述在工程报告里更有说服力也更接近可靠性评估的思路。第三个层次是DG优化配置。把DG的安装位置和容量作为决策变量以系统网损最小、DG年发电量最大或者综合经济性最优作为目标函数用粒子群、遗传算法或整数规划求解。优化配置和影响分析是闭环的关系影响分析告诉你方案行不行优化配置告诉你什么方案最好。两者结合就是一个相当完整的配电网DG规划研究项目了。这三个层次的扩展都可以在现有代码基础上增量实现不需要推翻重来。我当初设计这套代码框架的目的就在于此——前推回代潮流核心是稳定的DG模型和场景处理是灵活的指标后处理是模块化的每一层改动都在原有接口下进行。写这篇文章的同时我又把IEEE 33节点这套代码重新完整跑了一遍。坦率说每次重跑都能有新的体会比如不同负荷水平下同一渗透率的结果差异很大又比如DG的功率因数策略对电压分布的影响比想象中更敏感。分布式电源接入对配电网的影响从来不是一个有影响或者没影响的简单结论而是一组需要量化权衡的工程关系。这套Matlab代码的价值正是把这些关系从感觉变成数字。如果你在搭建这个仿真时卡住了我建议先从基准潮流开始确认无DG场景的电压分布和网损与标准参考值一致再逐步加入DG排查问题会清晰很多。我给出的代码保留了工程里常用且稳妥的写法你可以直接改参数复现也可以按第5节的思路继续向时序仿真和优化配置深化。分布式电源接入带来的挑战和机遇都在快速增长先把基础分析工具打磨扎实后面做任何衍生研究都不慌。