我第一次接到这个课题时,导师问的问题很简单:你凭什么说分布式电源接入会对配电网产生影响?当时我觉得这不算什么问题,分布式电源接进去,电网多了一个电源,自然有影响。但真正上手用Matlab做仿真之后,我才发现自己对这个课题的理解有多浅。分布式电源、配电网、Matlab代码实现,这三个词组合在一起,背后涉及的潮流计算、短路电流分析、电压分布评估、渗透率边界判断,每一个拿出来都够写一篇完整的文章。这篇博文就是我从零开始做这个课题的完整记录,包括建模思路、仿真方案、代码逻辑和踩过的坑,希望给正在做相关研究或者课程设计的朋友一条可以直接走的路。
先说清楚这个课题是做什么的。分布式电源(Distributed Generation, DG)指分散安装在中低压配电网附近的发电单元,常见的光伏、小型风机、储能、微型燃机都算。传统配电网是单向辐射状结构,电源在变电站侧,负荷在末端,功率流向单一。接入分布式电源之后,配电网从"无源网络"变成了"有源网络",节点电压、支路潮流、故障电流水平都会发生变化。Matlab作为仿真平台,在这个课题里的角色是用代码实现配电网的数学模型,定量评估DG接入位置和接入容量对电压分布、网络损耗、短路电流的影响。这个内容适合电气工程专业的本科生做毕业设计、研究生做前期探索,也适合刚入行的配电网规划工程师建立对DG接入影响的基本直觉。
1. 问题拆解:分布式电源接入为什么会让配电网"敏感"
1.1 配电网的原始设计假设被打破
传统配电网在设计时遵循一个基本假设:功率从变电站单向流向负荷。所有保护配置、电压调节策略、无功补偿方案都是基于这个单向潮流逻辑做的。比如10kV馈线的电压调节,通常靠变电站侧的有载调压变压器和线路上的无功补偿装置,线路越长、负荷越重,压降越大,这个规律是确定的。
接入分布式电源之后,情况变了。DG在负荷侧直接注入功率,馈线上的潮流不再是单调递减的,某些区段可能从"往末端送功率"变成"从中间节点往两端送功率"。这种双向潮流会让原来准确的电压计算出现偏差,保护定值的配合关系也可能失效。我一开始以为这只是理论上的问题,实际仿真跑完之后才发现,某些场景下线路末端电压不但不降,反而比首端还高,这直接颠覆了我对配电网电压分布的基础认知。
1.2 影响维度远不止"多了一个电源"
从数学建模的角度看,DG接入对配电网的影响可以拆成三个层面。第一是稳态层面,DG改变节点注入功率,直接影响潮流方程的解,表现为电压分布改变和网损改变;第二是故障层面,DG在短路故障期间会向故障点贡献短路电流,抬高馈线短路电流水平,可能超过原有开关设备的遮断容量;第三是动态层面,DG出力波动(比如云遮挡时光伏出力骤降)会引起电压波动和频率稳定问题。对于入门级研究,前两个层面是必做的,第三个层面更多是拓展方向。
这三个层面需要的分析工具是不同的。稳态分析用潮流计算,故障分析用短路电流计算,动态分析要用时域仿真。我这篇文章主要讲前两个,因为Matlab代码实现的重点也在这里。
1.3 为什么Matlab是这类研究的常用平台
不是我吹Matlab,而是在这个课题上它确实方便。配电网分析本质上就是解方程组,Matlab的矩阵运算特性非常契合潮流计算和短路计算的实现逻辑。更何况Matlab有电力系统工具箱(Matpower、Simscape Electrical等),即使不用工具箱,自己写前推回代法也就几十行代码的事情。跟Python相比,Matlab在矩阵索引、复数和稀疏矩阵处理上有天然优势,尤其在配电网这种大量稀疏节点的场景里,写起来更顺手。
2. 模型搭建:IEEE 33节点系统与DG等效模型的选择逻辑
2.1 为什么选IEEE 33节点系统作为配电网模型
做配电网研究绕不开IEEE标准测试系统。常用的有IEEE 13节点、33节点、69节点和123节点系统。我选的是IEEE 33节点系统,原因很直接:系统规模适中、节点参数公开可查、文献对照多、收敛性好、可视化方便。33节点系统是一个10kV辐射状配电网,基准电压12.66kV,基准功率10MVA,总负荷约3715kW加2300kvar,有一条主馈线和三条分支。
这个系统有一个好处是每个节点的线路参数和负荷数据都是公开的,做研究的人可以直接从文献里抄数据,不用自己编。我自己建模型时还顺手验证了空载和纯负荷两种条件下的潮流结果,跟文献里的标准结果对比完全一致,说明模型搭对了。这也是整个课题最重要的一步——基础模型错了,后面所有结论都没有意义。
2.2 分布式电源的等效模型:PQ和PV两种处理方式
DG在潮流计算里的等效模型有两种主流处理方式。一种是PQ节点,把DG看成恒功率注入,即给定有功出力P和无功出力Q,这适用于逆变器并网的光伏电站、恒功率因数运行的风机;另一种是PV节点,给定有功出力P和电压幅值V,适用于有自动电压调节能力的同步机型DG。
实际仿真中,我大部分场景用的都是PQ模型。原因很简单:光伏逆变器并网通常运行在单位功率因数附近,无功出力设为0,只要给定有功出力就行,实现简单且符合实际。PV模型虽然更接近某些DG的真实控制特性,但配电网潮流计算中PV节点的处理要反复修正无功出力,编程复杂度上升不少。如果做的是入门级研究,先用PQ模型把影响规律摸清楚,再考虑PV模型对比。
2.3 场景设计的三个变量
做完基础建模之后,下一步就是设计仿真场景。DG接入影响研究本质上就是看三个变量怎么影响结果:接入位置、接入容量、接入数量。我的做法是这样的:
- 接入位置:从节点2到节点32(除变电站节点1外)逐一接入DG,考察同一容量下不同位置的电压和网损变化,画出曲线;
- 接入容量:从0开始按步长增加DG出力,渗透率从0逐步提高到100%甚至更高,考察电压和网损随渗透率的变化趋势;
- 接入数量:在多个节点同时接入多个DG,对比单点接入和多点接入的效果差异。
这三个变量排列组合,就有了全套仿真场景。有一点要注意,配电网稳态分析中通常用渗透率(DG总出力占系统总负荷的比例)来表征接入规模,这个指标比单纯看装机容量更能说明接入程度。
| 场景类型 | 控制变量 | 考察指标 | 结论看点 |
|---|---|---|---|
| 单点位置扫描 | 接入位置 | 电压分布、网损率 | 最佳接入位置在哪里 |
| 单点容量扫描 | 接入容量/渗透率 | 最高电压、最低电压、网损率 | 容量上限在哪里 |
| 多点接入组合 | 接入位置+容量 | 全网电压偏差、总网损 | 多点接入是否更优 |
3. 影响评估的三个硬指标:电压分布、网络损耗、短路电流
3.1 电压分布:DG出力和电压抬升的因果关系
电压分析的物理本质是欧姆定律。馈线上的压降等于线路阻抗乘以传输功率,DG接入后,节点注入功率发生变化,馈线传输功率随之变化,节点电压也就跟着变。
在纯负荷场景下,电压沿着馈线方向逐渐降低,末端电压最低。接入DG后,情况分两种。如果DG接入点靠近馈线中后段,DG出力首先满足当地负荷,多余功率沿着馈线往回送,这会显著减小DG接入点之前区段的传输功率,压降减小,整条馈线的电压分布被抬高。如果DG容量进一步加大,接入点附近甚至会出现倒送功率,电压可能被抬到高于变电站母线电压的水平。
这就带来了过电压问题。配电网运行规程通常要求用户电压偏差在额定电压的±7%以内,10kV系统就是10.35kV到11.85kV(按10kV额定电压算)。仿真结果显示,在33节点系统末端接入DG时,渗透率超过60%以后,末端节点电压就开始逼近甚至超过上限。这个结论对实际规划很有参考意义——不是想装多少就装多少。
3.2 网络损耗:DG到底是降损还是增损
网损是另一个反直觉的指标。一开始我以为DG接入必然会降低网损,因为电源离负荷近了,输电距离短了。但仿真结果打了我的脸。
网损变化的本质是:网损等于各支路电流平方乘以电阻之和,DG改变了支路电流分布,所以网损变化取决于DG接入位置与负荷分布的匹配程度。DG接入点靠近负荷中心时,馈线传输功率减小,电流减小,网损显著下降;但如果DG接入点比较偏远,功率需要长距离倒送,某些支路电流非但不降反而增大,网损可能比不接入时还高。
我做了完整的单点扫描:在33节点系统每个节点分别接入同等容量DG,网损率从1.5%左右可以降到0.8%,也可以升到2%以上,差距非常大。最佳位置通常在馈线中段或负荷较重区域,最差位置则在分支末端且本身负荷轻的节点。
3.3 短路电流:DG对故障水平的贡献和影响
短路电流分析的逻辑是:配电系统发生短路时,所有接在系统上的电源都会向故障点注入短路电流。传统配电网只有变电站一个电源,短路电流水平是确定的;接入DG后,故障期间DG也会贡献电流,相当于故障点附近多了额外电流源,短路电流水平被抬高。
这里要注意区分DG类型。旋转型DG(如小型燃气轮机、柴油发电机)的短路电流贡献很大,可以达到额定电流的4~6倍;逆变器型DG(如光伏)受电力电子器件限流控制,短路电流通常被限制在额定电流的1.2~1.5倍。所以光伏渗透率高了,短路电流会上升,但上升幅度相对可控;如果有旋转型DG接入,对开关设备遮断容量的冲击会明显得多。
我在仿真里做的是简化的三相短路计算,用短路电流公式I = E/Z计算各节点短路电流水平,再对比接入DG前后的变化。结果符合预期:越靠近DG接入点,短路电流变化越明显;DG容量越大,贡献越显著。这个结论落到工程上就是,DG接入方案必须校核原有断路器和开关的遮断容量,如果超了就要更换设备或者加装限流电抗器。
4. Matlab实现要点:潮流计算、短路计算与场景批量对比的代码细节
4.1 前推回代法:最适合辐射状配电网的潮流算法
配电网潮流计算有很多算法,Newton-Raphson法、快速分解法、前推回代法都可以。对于辐射状配电网,前推回代法是最高效、最容易实现的,不需要求雅可比矩阵,从根节点开始逐层推公式就行,收敛速度快且稳定。
前推回代法的核心就两步。第一步前推:从末端节点向首端节点,根据节点负荷和DG出力计算每条支路的功率;第二步回代:从首端节点向末端节点,根据支路功率和首端电压计算各节点电压。迭代这两步直到前后两次计算结果差小于设定精度。
我写这段代码时把系统处理成节点-支路关联结构,用一个branch矩阵存每条支路的首端节点和末端节点,用load矩阵存各节点负荷,用dg矩阵存各节点DG出力。核心循环如下:
% 前推:从末端向根节点计算支路功率 for k = nBranch:-1:1 j = branch(k, 2); % 支路末端节点 i = branch(k, 1); % 支路首端节点 % 聚合节点注入功率:负荷减DG出力 S_node(j) = load_p(j) - dg_p(j) + 1i*(load_q(j) - dg_q(j)); % 末端节点的功率加上它下游所有支路功率 S_branch(k) = S_node(j) + sum(S_child{j}); end % 回代:从根节点向末端计算节点电压 V(1) = 1.0; % 根节点电压标幺值 for k = 1:nBranch i = branch(k, 1); j = branch(k, 2); dV = S_branch(k)/V(i) * conj(Z_branch(k)); V(j) = V(i) - dV; end这段代码是最精简的核心逻辑,实际使用还要加收敛判断、支路父子关系建立、电压越限记录。但就是这几十行代码,跑完一次潮流仿真基本只要零点几秒,做全节点扫描也就是几十秒的事情,效率很高。
4.2 短路电流计算的简化实现
短路电流计算在Matlab里有几种做法。用Simscape Electrical建故障模型做时域仿真最精确,但速度慢而且建模复杂。用经典方法做稳态短路计算足够了,尤其是做大量场景对比时,我只保留了核心内容。
简化方法的核心是计算故障点上游的总阻抗。配电系统发生三相短路时,短路电流等于母线电压除以故障点看进去的系统等效阻抗。DG的处理方式是作为一个附加电流源,注入故障点的电流按DG类型和容量估算。完整代码里我计算了每个节点的三相短路电流,然后和接入DG前的值做对比,得到"短路电流增量"指标。
这里有一个很关键的处理细节:计算DG贡献时不能直接拿DG的额定电流往上加,要考虑DG接入位置到故障点之间的线路阻抗衰减。线路阻抗会消耗一部分压降,所以离故障点远的DG贡献比离得近的小。我在代码里用叠加原理处理:先算无DG时的短路电流,再把各DG单独作用时的贡献叠加进去,效果很好。
4.3 批量场景跑数与结果导出的工程化写法
做这个课题免不了批量跑场景:33个接入位置、10个容量水平、加各种组合,几十上百个场景很正常。一开始我一个一个手动改参数跑,后来实在受不了,写了一个自动化脚本。
我的做法是用两层循环把场景参数全部枚举出来,每次循环调用同一个潮流计算函数,把结果存到一个大数组里,跑完之后统一画图或导出Excel。代码逻辑大概是:
results = zeros(nPos, nLevel, 3); % 位置x容量x指标 for p = 1:nPos for k = 1:nLevel dg_p = zeros(33, 1); dg_p(p) = base_kW * level(k); % 给指定节点注入有功 [V, loss, iter] = pf_radial(system, dg_p); results(p, k, 1) = max(V); % 最高电压 results(p, k, 2) = min(V); % 最低电压 results(p, k, 3) = loss; % 网损 end end这样一个脚本跑完,数据全在矩阵里,后面要三维曲面图、热力图还是一张张曲线图,都很方便。我个人强烈建议做成这种"数据先存后画"的模式,不要跑一个场景画一张图,否则数据量上来之后代码会乱到没法维护。
4.4 短路分析代码:故障点枚举与DG贡献叠加
再贴一段短路分析的简化代码思路,这个部分很多同学卡壳,我详细说一下怎么处理的。首先建立节点阻抗矩阵Z,无DG时短路电流I_sc0 = V0 / Z(k,k)。然后对每个DG节点m,计算它到故障点k的转移阻抗Z(k,m),DG贡献的短路电流为ΔI = E_dg / Z(k,m)。最后总短路电流用模值叠加近似,这里要用一个修正系数,考虑DG电流和系统短路电流不一定完全同相位,工程上通常做保守估计。
I_sc_new = zeros(nNode, 1); for k = 1:nNode % 枚举故障点 I_sc0 = Vbase / abs(Zbus(k, k)); delta = 0; for m = 1:nDG Zmk = abs(Zbus(k, m)); delta = delta + Idg(m) * (Zmk / (Zmk + Zdgin)); end I_sc_new(k) = I_sc0 + delta; end这段代码里的Zdgin是DG内部等效阻抗,逆变器型DG通常取得比较大,用来模拟限流特性。配合这个模型,我跑出来的短路电流增量基本符合文献里的规律。
5. 仿真结果解读:几个反直觉但非常重要的结论
5.1 DG不是接得越多越好:过电压和短路水平先"报警"
我跑完全部场景之后,最大感受是"越多越好"这个直觉完全错了。随着渗透率提高,电压分布抬升、网损先降后升、短路电流持续增大,三个指标并不是同步变化的。
以末端节点接入为例,渗透率在30%~50%区间时,电压改善最明显,网损也降到最低;继续提高渗透率,末端电压开始快速上升,在渗透率60%左右触顶,超过上限;同时网损进入上升区间,因为末端多余的功率开始倒送,线路损耗重新变大。这说明每个接入位置都存在一个最优渗透率范围,不是装机容量越大收益越大。
5.2 接入位置比接入容量更敏感
另一个重要结论是:接入位置的影响往往比接入容量更显著。我把不同位置、相同容量的DG结果放在一起对比,电压分布的最大差异可以超过5%,网损率的差异超过一倍。而同一位置容量加倍的电压影响,往往不如换个位置来的明显。
这个结论落到配电网规划上很有价值:与其在一个节点堆大容量DG,不如在多个合适位置分散接入。多点接入的仿真也验证了这一点——相同总容量下,分散接入比单点集中接入的电压分布更平缓,网损更低,短路电流水平也更均匀。
5.3 短路电流水平的"距离衰减效应"
短路电流的分布有个特点:DG对短路电流的影响随电气距离快速衰减。这意味着DG接入点附近的断路器、隔离开关面临的风险最大,而距离较远的馈线段影响很小。在做保护定值校核时,不需要对所有设备做大面积改造,只需要重点校核DG接入点上游一定范围内的保护设备。
这个结论是我在做故障点枚举时发现的——同样一个5MW的DG,接在变电站出口附近和接在馈线末端,对同一故障点的短路电流贡献相差好几倍。原因是中间隔着线路阻抗,而短路电流跟阻抗成反比。做规划时,DG位置选择要综合考虑电压、网损和短路电流,不能只顾着一个指标。
5.4 综合评估:多指标权衡才是最终落脚点
仿真做完不能只看单条曲线,要把所有指标放在一张表里综合看。我在论文里整理过一个综合对比表,列出不同接入方案下的电压合格率、网损率、短路电流增量和DG消纳量,直接对比优劣。这样看的结论才立体:某个方案电压最好但短路电流超标,不能选;某个方案网损最低但DG消纳太少,浪费了清洁能源。配电网规划的实质就是在这些互相制约的指标里找平衡点。
| 接入方案 | 电压合格率 | 网损率 | 短路电流增量 | 综合评价 |
|---|---|---|---|---|
| 不接DG | 偏低,末端越限 | 基准值 | 基准值 | 无消纳能力 |
| 单点中段接入 | 高,各节点均合格 | 降低明显 | 较小 | 推荐方案 |
| 单点末端大容量 | 末端过电压 | 升高 | 明显增大 | 不推荐 |
| 多点分散接入 | 高且均匀 | 最低 | 均匀分散 | 最优方案 |
6. 实操经验与避坑记录:做这类仿真最容易翻车的细节
6.1 基准值换算:最容易算错但没有技术含量的坑
配电网仿真最烦的不是算法,是单位和基准值。IEEE 33节点系统的数据看起来都是"正常"数值,但如果不统一用标幺值计算,很容易出问题。我做第一次短路计算时,电压用V、阻抗用欧姆、功率用kW直接混着算,结果短路电流算出来离谱到无法解释。后来把所有量统一转换成标幺值,问题才消失。
标准做法是选三个基准值:基准电压(通常取线路额定电压12.66kV)、基准功率(取10MVA或100MVA)、基准阻抗由前两个推导出来。所有数据在进入计算之前都除以基准值,计算结果再转换回有名值展示。这个习惯在Matlab里用简单的除法就能实现,但一定要做。
6.2 收敛性判断和迭代初值设置
前推回代法本身对辐射状网络收敛性很好,但也有翻车的时候。最常见的坑是DG容量设得过大,节点电压偏离初值太远,迭代出现振荡。解决方法是设置合理的初值(一般从1.0标幺值开始)和加迭代上限(比如50次),同时监控收敛过程。如果50次还没收敛,不是初值的问题就是模型有问题,这时候直接输出中间迭代值排查,比盲目加迭代次数更有效。
6.3 结果合理性校验
做仿真最重要的一步别人很少强调:结果合理性校验。我习惯在跑完整组场景之前,先做两个标准测试。第一个是无DG纯负荷潮流测试,结果要和文献里的经典结果对得上;第二个是单DG接入的简单场景,用人工计算的结果验证代码输出。两个测试都过了,再跑批量场景才有底气。
无DG时33节点系统末端电压大约在0.903标幺值左右,如果算出来差太多,说明模型或代码有bug。我排查过一遍,发现是某条支路的节点编号写反了,导致整条馈线电压计算错误。这种错误如果不做基准校验,跑完几百个场景都不会发现,最后结论全是错的。
6.4 Matlab代码的性能小优化
配电网节点数最多几十个上百个,Matlab代码就算写得粗糙,单次仿真也很快。但批量跑几百个场景时,性能差距就会显现。有个很实用的优化:尽量把循环里的重复计算提到外面,比如支路阻抗矩阵Z、父子节点关系这些跟DG无关的量,提前算好存储起来,循环里只更新节点注入功率。这样批量仿真速度能提升好几倍。
还有一个经验是把结果存储用预分配的矩阵做,不要在循环里动态扩展数组。Matlab动态扩展数组会不断触发内存重新分配,数据量大时慢得离谱。我吃过这个亏,一个跑200个场景的脚本,修改前跑了一个多小时,修改后不到两分钟,差距巨大。
6.5 画图展示的细节
最后说一个写论文阶段才意识到的问题——仿真图表的可读性。Matlab默认画图配色和字体大小,直接放进论文或报告里通常不够清晰。我的做法是所有图都统一设置字体为Times New Roman、字号10pt以上,线宽2磅左右,图例放空白处,坐标轴加单位。做多曲线对比时,对每个方案用不同颜色加不同线型(实线、虚线、点划线),黑白打印也能区分。
我还习惯把所有结果图统一导出为矢量格式,这样在word或者latex里放大缩小都不会模糊。Matlab里设置一下导出选项,一行代码的事,但很多人忽略。
这个课题做完,我自己最大的体会是:理论推导和编程实现之间存在一条不浅的鸿沟,而跨过这条鸿沟的唯一办法就是老老实实从基础模型开始,一步一步验证,不要想着一步到位。如果你正在做类似的分布式电源接入配电网影响研究,我的建议是先把IEEE 33节点系统模型搭扎实,再用单一DG场景跑通影响规律,最后再扩展到多点接入和容量扫描。这条路看起来慢,但实际上是最快的路径。后面如果对动态分析、电能质量、保护配合这些方向有兴趣,也可以在现在这套代码基础上继续扩展,底子搭好了,后面都是加法。