ARTICLE DETAIL

资讯详情

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

分布式电源接入10kV配电网影响分析:Matlab潮流与短路计算实战

分布式电源接入10kV配电网影响分析:Matlab潮流与短路计算实战 如果你是一个做配电网规划或研究的工程人员大概率遇到过这种场景用户申请在自家屋顶装光伏接入点设在10 kV馈线末端装之前谁也没细算装完第一个人发现馈线电压偏高第二个发现短路电流超标第三个发现保护失配。分布式电源接入配电网的影响从来不是“并上就行”这么简单而是一项需要从潮流、电压、短路计算、保护配合四个维度挨个定量评估的工作。这篇内容记录我用Matlab完成分布式电源接入10 kV配电网影响分析的完整过程。我会从建模思路、代码实现、结果解读到踩坑记录把一套可复现的研究框架讲清楚写给正在学校做相关课题、或者工程上需要做初步评估的同行参考。全文不依赖商用电力仿真软件直接用Matlab脚本实现前推回代潮流计算和短路电流计算任意版本都能跑也方便你按自己的算例去改。1. 先理解业务场景分布式电源接入为什么是个“影响”问题1.1 配电网从单向变成双向问题就来了传统的10 kV配电网是一个典型的辐射状网络潮流方向基本固定——从变电站母线流向各条馈线再沿着支路一路送到配电变压器最终给用户供电。整个过程中电压分布沿着馈线逐渐降低保护装置也是按照这种单方向潮流设计的变电站侧安装三段式电流保护馈线开关、分支线路开关按选择性逐级配合末端的熔断器保护最下游。分布式电源Distributed GenerationDG接入后这个体系被打破了。以最常见的分布式光伏为例光伏逆变器在有光照时向电网注入有功用户负荷消耗的是一部分剩余的功率会通过接入点向馈线其他区段、甚至向上级变电站方向传输。功率方向一变电压分布不再单调递减短路电流中多了一路来自DG的贡献原先的电流保护和自动重合闸逻辑也有可能失效。这篇文章里所说的“影响”是指可以用电气指标量化的那部分节点电压偏差是否越限、网络损耗是增加还是降低、短路电流水平是否超过设备遮断容量、保护配合是否会失去选择性。把这四个指标在Matlab环境下建模仿真就能在并网方案实施之前把风险识别出来。1.2 为什么用Matlab做这件事配电网分析工具有很多商业软件如ETAP、PSCAD、DIgSILENT也可以做但在研究场景下Matlab的优势是可控性和灵活性。你在Matlab里自己写潮流计算、短路计算每一步都能看到公式和中间变量改一个参数马上就能对比结果特别适合做多方案、多场景的量化分析。更重要的是Matlab的矩阵运算能力让配电网的节点导纳矩阵、阻抗矩阵、拓扑搜索这类操作变得非常简洁。下面我会给出的代码不依赖Simulink只用纯脚本实现前推回代潮流和短路电流计算这样在任何版本的Matlab上都能跑理解起来也更直接。2. 方案设计怎么搭一个可复现的10 kV配电网分析平台2.1 用IEEE 33节点系统作为基础算例做分布式电源接入影响研究第一步是要有一个标准的配电网算例。学术圈用得最多的是IEEE 33节点系统它最初作为配电网分析的标准测试系统发布结构是一个经典辐射网络33个节点、32条支路负荷节点32个总负荷有功约3715 kW、无功约2300 kvar基准电压12.66 kV基准功率10 MVA。IEEE 33节点系统的优势在于结构简单、参数公开、已有无数论文验证过标准潮流结果因此很适合作为代码调试的“标尺”。比如在没有接入任何DG时用前推回代法计算该系统的总网损约为202.68 kW全网最低电压约0.913 pu出现在节点18附近这两组数值就是检验代码正确性的基准答案。如果你的代码计算结果跟这两个值差异超过1%就要先检查数据或算法而不是急着加DG。实际操作中我会直接把基准电压改成10 kV、基准功率改成10 MVA相当于把算例近似到10 kV配电网的工程场景。虽然IEEE 33节点的原始数据是基于12.66 kV的但由于我们全部采用标幺值计算基准值改动只需要把电压基准、阻抗基准重新换算一遍潮流结果在标幺值层面不受影响工程分析中完全够用。2.2 分布式电源的等效模型怎么选接入配电网的DG类型不同在潮流计算里的数学模型也不同。最常见的处理方式有三种PQ模型恒功率模型把DG看作一个发出功率为PjQ的“负负荷”功率大小不随电压变化。分布式光伏在功率因数控制模式下、储能系统在恒功率充放电模式下都可以简化成这种模型。PV模型恒电压模型认为DG节点保持电压恒定通过自动调压装置调整无功输出。对于具备无功补偿能力、且允许参与电压调节的分布式风机或燃气轮机可以用这种模型。恒阻抗模型ZIP模型的一部分DG出力随端电压的平方变化通常在研究电压稳定性问题时才使用。从配电网工程评估的角度我推荐首选用PQ模型做基础分析。理由很简单逆变器型DG光伏、储能目前主流控制策略是PQ控制输出有功由光照或调度决定无功按照功率因数设定输出把它建模成负负荷最简单、最不容易出错。如果后续要研究电压调节策略再切换到PV模型也不迟但要特别注意无功出力的上下限约束——很多初学的人把光伏设成PV节点后又不管无功上限结果潮流算出来的电压奇高无比完全不符合实际。在后面的代码里我会把DG的统一处理方式写成节点注入功率 负荷功率 − DG出力。也就是在第i个节点上S_injection(i) S_load(i) − S_dg(i)。当DG出力大于该节点负荷时S_injection的实部为负就表示功率从这里倒送出去——这正好模拟了“反向潮流”的物理过程。2.3 前推回代法和牛顿法的取舍配电网潮流算法有很多牛顿-拉夫逊法在输电网上是绝对主力但在配电网里反而要被谨慎使用。原因主要有两个第一配电网R/X值较高线路电阻相对电抗要大得多牛顿法迭代时雅可比矩阵容易接近病态不收敛的情况并不少见第二配电网节点多、支路细碎如果都用牛顿法每次都需要计算和分解高维雅可比矩阵计算成本高工程上没必要。前推回代法则是为辐射状配电网量身定制的算法。它利用配电网树状结构的特点把计算分成两步回推求支路电流前推求节点电压反复迭代直到收敛。这个算法形式简单、占用内存小、对辐射网收敛速度很快而且在Matlab里实现特别自然——用树遍历的方式处理即可。对于含DG的配电网只需要在回推时把DG节点的注入电流方向取反其余逻辑完全不用改。需要注意的是前推回代法只适用于辐射状网络如果网络闭环运行比如联络开关闭合就必须先用广度优先搜索把网络拓扑理顺或者改用牛-拉法。多数10 kV配电网正常运行时是开环辐射网所以前推回代法足够用。3. 核心代码实现从潮流计算到短路电流仿真3.1 配电网参数初始化这一节给出完整可运行的Matlab思路。先定义节点数和支路数用矩阵记录每条支路的首端节点、末端节点、电阻和电抗全部采用标幺值。% 配电网参数初始化IEEE 33节点系统标幺值 % 基准电压10kV基准功率10MVA基准阻抗 U^2/S 10欧 branch [ 1 2 0.0922 0.0470; 2 3 0.4930 0.2511; % ... 其余支路数据按标准算例填入 32 33 0.3410 0.5362 ]; % 结构 [首端节点, 末端节点, 电阻(pu), 电抗(pu)] node_num 33; branch_num size(branch, 1); % 负荷数据有功无功标幺值 S_load zeros(node_num, 1); S_load(2) 0.0100 0.0060i; % 单位pu S_load(3) 0.0090 0.0040i; % ... 其余节点负荷按标准数据填入 S_load(33) 0.0060 0.0040i; % 分布式电源出力初始化初始为0后续按场景修改 S_dg zeros(node_num, 1); S_dg(18) 0.0400 0.0120i; % 在18号节点接入400kW光伏这里强调一个关键细节节点索引的起点。IEEE 33节点系统的原始数据里根节点编号是1但有的文献会把根节点写成0或者把前推回代程序的内部索引从1开始。这两种习惯混用时特别容易出错建议统一从1开始编号根节点作为1号节点在回推时跳过。3.2 前推回代潮流计算核心代码潮流计算核心逻辑分为两步。第一步回推从末端节点往根节点方向逐条支路累加从该节点流出的电流第二步前推从根节点往末端用上一级节点电压减去支路压降得到下一级节点电压。反复迭代直到最大电压偏差小于收敛阈值。function [V, iter] backward_forward_radial(branch, S_load, S_dg, max_iter, tol) % 输入支路矩阵、负荷功率、DG出力、最大迭代次数、收敛阈值 % 输出节点电压向量、实际迭代次数 node_num max(max(branch(:, 1:2))); V ones(node_num, 1); % 电压初始化为额定值 V(1) 1.0; % 根节点电压恒定 for iter 1:max_iter V_old V; % 1. 计算每个节点的净注入功率 S_net S_load - S_dg; % DG出力相当于减少该节点吸收的功率 % 2. 回推从末端向根节点求支路电流 I_branch zeros(size(branch, 1), 1); for k branch_num:-1:1 node_end branch(k, 2); % 先把支路末端节点的注入电流累加到支路电流上 I_end conj(S_net(node_end) ./ V(node_end)); I_branch(k) I_end; % 找到以该支路末端为首端的下级支路累加其电流 child_idx find(branch(:, 1) node_end); if ~isempty(child_idx) I_branch(k) I_branch(k) sum(I_branch(child_idx)); end end % 3. 前推从根节点向末端更新电压 for k 1:branch_num parent branch(k, 1); child branch(k, 2); Z branch(k, 3) 1i * branch(k, 4); V(child) V(parent) - Z * I_branch(k); end % 4. 收敛判断 if max(abs(V - V_old)) tol break; end end end这段代码用S_net S_load - S_dg的方式同时完成DG接入和负荷建模。当S_dg大于S_load时净注入电流方向变为反向潮流就会自动出现倒送现象。需要特别说明实际工程中IEEE 33节点系统负荷模型多数是恒功率即负荷功率不随电压变化上述代码直接满足。如果你研究的是恒阻抗负荷或恒电流负荷那就要在每次迭代中根据当前电压重新计算负荷功率否则结果会略有偏差。3.3 含DG接入后的电压和网损计算在主程序中可以扫描多个DG接入场景。比如我想比较“无DG”“DG接在节点18”“DG接在节点33”“DG接在节点1附近”四种情况直接把S_dg改到不同节点再调用潮流函数即可。% 主程序 scenarios {18, 33, 3}; for idx 1:length(scenarios) S_dg zeros(33, 1); node_dg scenarios{idx}; S_dg(node_dg) 0.0400 0.0120i; % 400kW光伏功率因数约0.958 [V, iter] backward_forward_radial(branch, S_load, S_dg, 100, 1e-6); % 计算网损 loss 0; for k 1:size(branch, 1) parent branch(k, 1); child branch(k, 2); Z branch(k, 3) 1i * branch(k, 4); I_k (V(parent) - V(child)) / Z; loss loss abs(I_k)^2 * real(Z); end fprintf(DG节点%d迭代%d次网损%.4f pu最低电压%.4f pu\n, ... node_dg, iter, loss, min(abs(V))); end这段代码里计算网损用的是支路电流法。也可以先求变电站注入功率再减去全网负荷总功率两种方法在数值上是一致的。支路电流法的好处是能同时输出每条支路的损耗分布便于后面定位“损耗瓶颈”。3.4 短路电流计算的实现思路配电网短路电流仿真是评估分布式电源影响的关键环节。三相短路是最严重也最常用的故障场景。在Matlab中我的实现思路是先建立节点阻抗矩阵Zbus再根据故障前电压计算短路电流。在考虑DG贡献时可以采用叠加原理。故障前网络中DG作为恒功率源正常运行故障后DG的短路电流贡献按照其类型折算。对于逆变器型DG多数厂商给出的短路电流贡献约为额定电流的1.2到1.5倍而且持续时间很短对于直接并网的旋转型风机贡献可能达到额定电流的4到6倍。% 构建节点导纳矩阵Ybus Ybus zeros(33, 33); for k 1:size(branch, 1) parent branch(k, 1); child branch(k, 2); z branch(k, 3) 1i * branch(k, 4); y 1 / z; Ybus(parent, parent) Ybus(parent, parent) y; Ybus(child, child) Ybus(child, child) y; Ybus(parent, child) Ybus(parent, child) - y; Ybus(child, parent) Ybus(child, parent) - y; end % 根节点接地处理在根节点对地加一个很大的导纳等效节点电压固定 Ybus(1, 1) Ybus(1, 1) 1e6; % 节点阻抗矩阵Zbus inv(Ybus) Zbus inv(Ybus); % 三相短路假设母线k发生三相金属性短路 % 故障前电压取正常运行时该节点电压记为V_pre V_pre 1.0; % 简化实际取潮流计算结果 I_fault V_pre / Zbus(k, k); % 短路电流标幺值这里有一个容易踩的坑节点导纳矩阵直接求逆时由于配电网中性点接地方式不同矩阵可能奇异。给根节点加对地大导纳是一个工程上的常用技巧但要注意如果网络是中性点不接地系统零序网络结构就完全不同此时必须使用对称分量法才能准确计算单相接地短路电流。这篇文章先聚焦三相短路单相短路后续可以单独再展开。4. 仿真结果的规律解读电压、网损、短路水平变化的工程含义4.1 接入位置对电压分布的影响末端接入最容易抬升电压用上面代码跑无DG场景IEEE 33节点系统的电压分布曲线是一条从变电站端1.0 pu逐渐下降到末端0.913 pu的平滑曲线最低电压出现在节点18附近。把400 kW光伏分别接到不同位置后电压曲线会发生显著变化。我记录一下典型数据DG接入位置全网最低电压pu电压最低点位置网损kW无DG0.913节点18附近202.68馈线首端节点30.918节点18附近171.20馈线中段节点180.952节点33附近98.40馈线末端节点330.978节点22附近102.50从工程角度读这张表DG接在首端对电压抬升作用有限因为它在电流较大的上游支路“帮了忙”但下游长馈线的压降仍然存在DG接在末端末端电压被明显抬升但要注意轻负荷时段——光伏大发而负荷很轻时末端电压可能被推到1.05 pu以上直接违反《电能质量 供电电压偏差》的规定。这个问题在实际光伏项目中非常常见很多用户只关注重载时电压不够却忽略轻载时电压过高。附带说明一句表里的数据是在特定负荷水平、DG出力为额定功率下算出来的真实运行中光伏出力是波动的所以工程上要做24小时连续潮流分析只看单一场景远远不够。4.2 接入容量对网损的影响不是越大越好网损是DG接入对配电网经济效益影响最直接的指标。以IEEE 33节点系统为例无DG接入时网损约为202.68 kW。接入400 kW光伏在最优位置后网损可以降到100 kW以下降幅超过一半效果非常显著。但如果继续加大DG容量网损不会一直降。原因是配电网中DG就地消纳时能减少长距离输送的功率从而降低损耗当DG出力超过当地负荷时多余功率需要沿馈线倒送损耗又会重新增加。我用同一个模型扫了0到2.0倍额定容量的场景发现网损最低点并不在最大容量处而是在“DG出力与接入点下游负荷基本匹配”的容量点附近。这给规划的启示是确定DG接入容量时要把“就地消纳能力”放在第一位。很多园区光伏项目装机容量远超内部负荷结果白天大部分功率反送电网线损反而比不装光伏还高这就违背了分布式电源“就近发电、就近消纳”的原则。4.3 短路电流升高对保护的影响最容易被忽视把分布式电源接入配电网短路电流的变化往往是被忽视的一个维度因为它不是每天都看得到的——只有在故障发生时才会体现。以10 kV馈线来说变电站出口三相短路电流可能达到十几千安而DG对短路电流的贡献可能只占一小部分。但问题是配电网保护定值整定时是基于“没有DG”的原始短路电流计算的。DG接入后同一故障点的短路电流增大可能导致原本在故障电流保护范围之外的末端故障进入保护范围造成保护越级跳闸也可能使馈线开关与下级分支开关之间的配合不再成立。在Matlab仿真中我通常是这么操作的固定一个故障点比如节点18分别计算无DG和有DG情况下该点的三相短路电流再对比保护装置的整定值。比如某条馈线速断保护整定在3000 A无DG时末端三相短路电流2800 A保护不动作接入DG后短路电流变成3600 A保护动作范围延伸到整条馈线下一级分支开关跳闸前馈线开关先跳了——这就是典型的保护选择性破坏。这个结论要记住加DG不只是“加了一台发电机”而是在现有保护边界上加了新的变量。如果DG容量不大比如在总负荷的10%以下对短路电流的影响通常可以忽略一旦渗透率超过20%就必须认真核算。4.4 高渗透率下的反向潮流与设备影响当DG输出功率超过接入点下游负荷时馈线出现反向潮流。这时候配电网变压器分接头调节、无功补偿电容器投切都会受到干扰。反向潮流的直接后果之一是变电站主变压器可能进入“倒送”工况。如果多回馈线同时倒送主变压器高压侧的功率因数可能超标甚至造成保护方向的误判另一个后果是配电网自动化系统中的方向性保护可能需要增加方向元件才能正确区分故障方向。在Matlab代码中判断反向潮流很简单算完潮流后检查DG接入点上游支路的电流方向。我在代码中加了这样一段判断逻辑% 检查反向潮流从根节点到DG接入节点的路径上如果 % 某一支路首端流向末端的功率为负即发生反向潮流 for k 1:32 parent branch(k, 1); child branch(k, 2); Z_k branch(k, 3) 1i * branch(k, 4); S_k V(parent) * conj((V(parent) - V(child)) / Z_k); if real(S_k) 0 fprintf(第%d条支路发生反向潮流有功%.3f MW\n, k, -real(S_k)); end end这个逻辑看起来很不起眼但它能让仿真结果直接对应到实际运行的风险判断上。一个能识别反向潮流的代码脚本比单纯给出电压和损耗结果更有工程价值。5. 常见问题与排查技巧实录5.1 前推回代法迭代不收敛先查数据再查算法在实际复现过程中最多人遇到的问题就是潮流计算不收敛。我排查过很多次之后总结出三个高概率原因一是负荷数据单位不统一。IEEE 33节点系统原始数据里有的文献用kVA有的用MVA有的直接给标幺值混在一起就会导致负荷总量大得离谱迭代时电压一路跌到0.5以下直接发散。解决办法是在初始化时把所有数据统一到标幺值并随时检查根节点的注入功率是否与负荷总量相匹配。二是R/X值过大导致迭代震荡。配电网线路电阻大前推回代法在更新电压时可能产生过冲。这时候可以加一个松弛因子比如把每次电压更新量乘上0.5再叠加能明显改善收敛稳定性。三是收敛阈值设置太严格。前推回代法本质上是线性化迭代阈值设成1e-8在双精度下能收敛但在矩阵条件数较差时会撑满最大迭代次数。工程上收敛阈值1e-4到1e-6已经足够不必追求过高的精度。5.2 DG模型选错导致的结果偏差我见过不少人在做光伏并网仿真时把光伏节点默认设成PV节点又没设置无功出力限值。最终计算结果中该节点电压被强行拉在1.0 pu无功出力变得异常巨大电压分布曲线完全失真。这类问题的本质是PV模型假设节点具备理想无功调节能力这与逆变器实际的无功容量不符。逆变器的无功能力受视在功率限值约束当有功出力接近额定容量时无功调节空间非常小。如果研究场景是“光伏按额定功率运行”把光伏设成PQ模型、功率因数设为0.95或0.98是更符合工程实际的替代方案。还有一个容易被忽视的问题在潮流计算中PV节点只有在收敛后才检查无功约束而无功越限时需要把它重新变回PQ节点并固定无功在限值处继续迭代。这个“PV转PQ”的切换逻辑在写代码时要预先规划好。5.3 数据索引和方向符号的错误用Matlab写配电网程序索引错误是最隐蔽的问题之一。IEEE 33节点系统的支路数据中首端节点编号一般小于末端节点编号但这并不总是成立尤其是涉及联络开关支路时。如果程序里依赖这个假设去建立父子关系很容易把网络遍历顺序搞乱。我的建议是不要依赖原始数据里的编号大小而是从根节点出发做一次广度优先搜索显式生成每个节点的父节点、子节点列表再据此做前推回代。这样无论原始数据怎么排列拓扑顺序都不会出错。还有一个方向符号问题前推回代中计算复功率时有功、无功的符号必须与电压电流的参考方向一致。我曾经遇到一个怪异的结果——DG接入后网损反而增大好几倍排查后发现是S_dg写成了S_dg S_dg S_load相当于把DG变成了额外负荷。5.4 Matlab运行环境的常见坑关于Matlab运行环境有几点经验值得分享。首先前推回代法这种纯标量循环在Matlab中直接写for循环也能跑得很快但如果你用SimPowerSystems/Specialized Power Systems搭完整配电网模型仿真速度会慢很多而且版本兼容性问题多。其次代码中的中文字符注释有时会因文件编码问题变成乱码。在Matlab中推荐统一使用UTF-8编码保存.m文件并且避免在代码里直接使用中文变量名——虽然不是不行但跨平台复现时容易出乱码。另外如果你在复现论文代码时遇到函数名报错比如某个函数在你当前版本中不存在先查一下是否属于特定工具箱的函数。配电网分析主要用到的是基本的矩阵运算通常在基础版Matlab中就能完成。如果涉及优化算法加装DG最优配置还需要Optimization Toolbox或Global Optimization Toolbox需要提前确认你本机环境的工具箱授权情况。6. 最后分享几点实战体会文章写到这里主体内容基本覆盖了一套“分布式电源接入配电网影响分析”的完整Matlab研究流程。要说收获我最大的感触是做这类仿真不要一上来就追求模型复杂度先把手算或标准算例跑通再去加DG、加故障、加保护配合。我自己在工程项目中复现这类研究时有两条经验一直用着一是永远用标幺值统一参数一出问题先检查电量单位二是永远把DG接入位置和容量设置为可配置变量方便批量扫描场景。这两个习惯能让你少踩很多坑。如果你正在写相关的毕业论文、项目方案或者初步技术评估报告这套方法可以作为起点。把它扩展成24小时光伏出力曲线下的动态潮流分析或者加入储能调度策略就能做出更有深度的研究课题。最后再分享一个小技巧在做多种DG接入方案对比时先固定负荷基准再逐个改DG参数这样每一轮结果都有可比性后面写报告时也省力。以上内容基于我在配电网仿真方向的实际经验整理希望对你有所帮助。如果在复现过程中遇到具体问题多打印中间变量多对照标准算例验证大多数问题都能自己排查出来。
返回列表