ARTICLE DETAIL

资讯详情

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

基于前推回代法的含分布式发电机配电网潮流计算与网损分析

基于前推回代法的含分布式发电机配电网潮流计算与网损分析 简介面向电力系统与配电网方向研究者这份Matlab仿真资源聚焦分布式发电机接入配电网后的潮流计算与网损分析。以前推回代法为核心程序可模拟不同DG配置下的功率流动量化比较网损变化为DG并网位置与容量选择提供数据依据。压缩包仅含1个m文件约3KB代码轻量易读涵盖前推回代迭代流程、节点电压和功率计算适合初学者快速上手也可供进阶者扩展。已有181人学习下载。通过修改DG接入节点与出力可直观观察馈线电流和电阻损耗的变化进而理解DG对电压分布及网损的双向影响文件模块划分清晰兼顾教学演示与科研验证便于复现潮流计算全过程。1. 分布式发电机接入后配电网网损为什么必须用潮流计算重算配电网以前算网损思路很简单负荷大线损大负荷小线损小。因为网络是单电源辐射状功率从变电站单向流向用户。分布式发电机接入后网络从单电源变成多电源末端功率可能向上游倒送网损曲线也跟着拐弯。DG 出力小于局部负荷时线路电流减小配电网电网网损下降DG 出力超过局部负荷甚至超过整条馈线负荷时电流反向网损又会回升。这就是 DGdS.zip 这类电力系统潮流计算 matlab 程序包要解决的核心问题算准含分布式发电机的配电网潮流再把配电网网损逐条支路拆出来。适合要复现配电网算例、评估 DG 选址和渗透率的工程师参考。2. 分布式发电机建模与配电网前推回代的选型理由2.1 DG 作为 PQ 节点还是 PV 节点潮流计算必须先确定分布式发电机用什么节点类型。输电网习惯用 PV 节点因为大电厂有励磁调节能维持机端电压。配电网里的 DG 不一样多数光伏和风机逆变器采用 PQ 控制并网导则通常要求有功和无功按给定值输出。这时把 DG 当成 PQ 节点实现最简单也能满足网损分析需要。建模方式给定变量潮流计算里的处理方式典型场景PQ 节点P、Q或 P 和功率因数等效为负负荷直接改注入功率光伏逆变器、功率因数恒定的风机PV 节点P、电压幅值 U迭代调整无功使电压回到设定值直连配电网的同步发电机恒阻抗阻抗或导纳并入节点导纳计算简化模型工程中用得较少如果 DG 采用电压控制就变成 PV 节点。前推回代法对 PV 节点处理比较麻烦每次迭代要检查电压幅值再反复调整无功注入直到幅值回到设定值。DGdS 这类配电程序包通常不会一开始就做 PV 节点多数算例里 DG 有功指定功率因数恒定。落到 MATLAB 代码里PQ 节点只需要修改节点注入功率这一行符号方向处理到位其他逻辑不用动。2.2 节点表、支路表与基准值配电网潮流计算的数据组织比输电网简单。常见做法是准备两个表节点表记录负荷和 DG 功率支路表记录线路阻抗。节点表至少包含节点编号、负荷有功、负荷无功、DG 有功、DG 无功支路表包含首端节点、末端节点、电阻 R、电抗 X。IEEE 33 节点配电网是这一领域最常用的算例由 33 个节点和 32 条支路组成基准电压 12.66 kV基准容量 10 MVA总负荷 3715 kW 加 2300 kvar无 DG 时有功网损约 202.68 kW最低电压约 0.9131 p.u.这几个数经常被拿来做代码验收。拿到 IGdS 或 DGdS 这类包时我一般会先确认两件事支路表是不是按根节点到末端的顺序排列节点编号是否满足首端小于末端。很多算例数据是从文档复制出来的顺序并不规范。前推回代法对网络拓扑有要求每个节点除根节点外只能有一个父节点支路数必须是节点数减一。检查方法不复杂直接用 MATLAB 数一下度和连通性即可% 检查辐射状配电网支路表是否合法 % branch: Mx4[首端节点, 末端节点, R, X] M size(branch, 1); N max(max(branch(:,1:2))); if M ~ N - 1 error(支路数应等于节点数减一当前不是辐射状网络); end % 统计每个节点出现次数根节点作为唯一电源点应只作为首端出现 cnt accumarray(branch(:,2), 1, [N 1]); if sum(cnt 0) ~ 1 error(末端节点编号有重复或存在孤立节点); end配电网里 R/X 比值通常在 2 到 5线路电阻不能像输电网那样忽略。阻抗进入程序前要换成标幺值基准阻抗用 V_base^2 / S_base 计算IEEE 33 节点系统对应 Z_base 12.66^2 / 10 16.03 欧姆。很多人在这一步出错实际电阻 0.1 欧姆换算成 p.u. 是 0.00624如果不换算直接带入潮流函数结果会差几个数量级。2.3 为什么辐射状配电网不直接套牛顿-拉夫逊法输电网潮流计算的主流方法是牛顿-拉夫逊法但配电网有两个特点让它不好直接套用R/X 大雅可比矩阵容易出现数值敏感节点数多、支路数相对少没必要做完整矩阵分解。前推回代法利用辐射状结构反向推电流正向推电压不形成导纳矩阵不求逆内存占用小在开环运行的配电网里收敛表现直观。这就是它在含 DG 配电网网损分析里成为首选方案的原因。合环运行的情况另说。如果网络闭环前推回代法就不再直接适用需要先把环打破再叠加补偿电流。DGdS 这类 zip 包大概率针对开环辐射状网络毕竟配电网正常调度就是开环运行所以本文后面都按辐射状处理。3. 前推回代法求解含 DG 配电网潮流核心步骤与 MATLAB 实现3.1 节点注入功率的符号约定含 DG 的系统中节点注入功率不再只等于负荷功率。统一写成S_node S_load - S_DGDG 发电时 S_DG 取正DG 从电网吸收无功时 Q_DG 取负。这样当 DG 有功超过节点负荷时S_node 为负值节点向外输出功率反向潮流在公式里自然出现。实际计算里最容易错的是功率因数方向。功率因数 0.95 滞后表示 DG 发出无功Q_DG P_DG * tan(acos(0.95))功率因数 0.95 超前表示 DG 吸收无功Q_DG 前要加负号。如果数据表里没有无功只有功率因数程序里应该这样转换% 功率因数转复功率 % lag 表示滞后lead 表示超前 pf 0.95; P_dg 0.1; % p.u. if lag Q_dg P_dg * tan(acos(pf)); else Q_dg -P_dg * tan(acos(pf)); end S_dg P_dg 1j * Q_dg;给到潮流函数里的 S_DG 一定是复功率符号含义要写清楚。我见过不少把 S_DG 写成负值的代码内部再减一次负值相当于把 DG 当成负荷最后的网损曲线完全反着走。3.2 反向推电流与正向推电压前推回代法每一步分两段。反向推电流从末端支路往根节点走支路电流等于该支路末端节点的注入电流加上该节点下面所有子支路电流之和。注入电流用复功率和电压算I_node conj(S_node / V_node)正向推电压从根节点往末端走用父节点电压减去支路压降V_child V_parent - Z_branch * I_branch迭代初始把全网电压设为 1.0∠0°根节点固定为 1.0∠0°每次迭代后比较新旧电压差最大差值小于容差就判为收敛。下面是完整的最小实现关键地方都写了解释。function [V, I_branch, conv_iter] fbs_dg(bus, branch, S_dg, tol, max_iter) % bus: Nx3 节点表[节点编号, 负荷有功(pu), 负荷无功(pu)] % branch: Mx4 支路表[首端节点, 末端节点, R(pu), X(pu)] % 使用前必须保证首端编号小于末端编号且按离根节点由近到远排列 % S_dg: Nx1 复功率DG 注入为正单位 p.u. % tol: 电压收敛阈值通常取 1e-6 % max_iter: 最大迭代次数通常取 50 N size(bus, 1); M size(branch, 1); S complex(bus(:,2), bus(:,3)) - S_dg; % 节点注入净功率 V ones(N, 1); % 平启动 I_branch zeros(M, 1); for iter 1:max_iter V_old V; % 反推支路电流从末支路往根节点方向处理 for k M:-1:1 child branch(k, 2); I_tail conj(S(child) / V(child)); % 叠加所有子支路电流此处要求子支路行号大于当前行 child_idx find(branch(:,1) child); if ~isempty(child_idx) I_tail I_tail sum(I_branch(child_idx)); end I_branch(k) I_tail; end % 正推节点电压从根节点向末端更新 for k 1:M parent branch(k, 1); child branch(k, 2); Z branch(k, 3) 1j * branch(k, 4); V(child) V(parent) - Z * I_branch(k); end % 收敛判断 if max(abs(V - V_old)) tol conv_iter iter; return; end end conv_iter -max_iter; % 负数表示未收敛 end代码里最需要理解的是反推循环的顺序。M:-1:1要求支路表已经按拓扑顺序排好父节点编号小于子节点编号子支路的行号大于父支路行号。如果数据不满足先做拓扑重排再调用这个函数否则会漏掉某些子支路电流电压更新也不完整。收敛后得到的I_branch可以直接进入网损计算不需要再额外求电流。3.3 收敛参数与常见失败原因参数建议值说明电压容差1e-6 p.u.太严会增加无谓迭代太松会掩盖未收敛最大迭代50正常算例 5 到 20 次即可收敛DG 功率因数0.95滞后工程常见值按实际逆变器设定初始电压1.0∠0° p.u.平启动适合前推回代法如果迭代不收敛先怀疑数据而不是算法。支路表没有按拓扑排序是第一大原因其次是 DG 容量忘了除以基准容量注入功率被放大十倍甚至百倍再就是负荷有功符号写反把负荷当成了发电。另一个隐蔽问题是某个末端节点没有出现在任何支路的末端列里电压一直不更新收敛条件永远满足不了。提示前推回代法在这种规模下收敛很快超过 50 次还没达到 1e-6优先去查网络连通性和注入功率量级。4. 用 MATLAB 算配电网网损调用示例、标幺值换算与结果拆分4.1 把 DGdS 算例数据接进潮流函数DGdS.zip 这类包解压后算例数据常见有三种存储方式m 文件里直接写矩阵、csv 文件用 readmatrix 读取、mat 文件直接 load。最稳妥的做法是统一转成 bus 和 branch 两个矩阵再写一层薄薄的适配函数。以 IEEE 33 节点为例接入 DG 并运行前一章函数的方式如下% 读取算例bus33 和 branch33 由数据文件得到 load(case33.mat); % 内部包含 bus33, branch33, S_base S_base 10; % MVA % 把负荷单位从 kW,kvar 换成 p.u. bus bus33; bus(:,2) bus33(:,2) / S_base / 1000; bus(:,3) bus33(:,3) / S_base / 1000; branch branch33; Z_base 12.66^2 / S_base; % 16.03 欧姆 branch(:,3) branch33(:,3) / Z_base; branch(:,4) branch33(:,4) / Z_base; % DG 接在节点 18有功 1000 kW功率因数 0.95 滞后 S_dg zeros(size(bus,1), 1); P_dg 1000 / S_base / 1000; % 0.1 p.u. Q_dg P_dg * tan(acos(0.95)); S_dg(18) P_dg 1j * Q_dg; % 调用前推回代潮流 [V, I_branch] fbs_dg(bus, branch, S_dg, 1e-6, 50);这套调用里最容易漏的是单位换算。负荷数据通常以 kW 和 kvar 给出除以基准容量后再除以 1000 才是 p.u.。如果漏掉一次除以 1000负荷会大 1000 倍潮流结果完全失真。支路电阻电抗同理先算 Z_base再把欧姆值除以 16.03。4.2 从支路电流拆分配电网网损支路有功损耗在标幺值系统里直接用电流平方乘电阻P_loss_pu I_branch^2 * R_pu总网损是所有支路之和再乘以基准容量得到实际值。这段代码放在潮流函数后面% 支路有功损耗p.u. line_loss_pu real(branch(:,3)) .* abs(I_branch).^2; % 总网损单位 kW total_loss_kw sum(line_loss_pu) * S_base * 1000; % 找出损耗最高的前 5 条支路 [~, idx] sort(line_loss_pu, descend); disp(branch(idx(1:5), 1:2));用这个结果可以直接定位哪几条支路挤占了大部分网损也方便对比 DG 接入前后的差值。注意I_branch必须是收敛后得到的支路电流不能用节点注入电流代替。两者只在末端节点上相等越靠近根节点支路电流越大混淆的话网损会明显偏低。损耗口径计算公式用途支路有功损耗R *I总配电网网损sum(所有支路损耗)评价 DG 接入前后的整体变化网损率总网损 / 总供电量工程上报和考核常用网损率计算里总供电量等于根节点注入有功也就是潮流计算收敛后根节点电压乘以根节点支路电流取实部。这个值随 DG 出力变化不能直接用负荷总量代替。4.3 功率因数对网损的影响DG 接入后总网损不仅取决于有功出力还取决于无功功率。DG 发无功时无功电流也会流经线路同样产生有功损耗DG 吸收无功时可能抵消长线路的容性充电电流也可能抬高压降。常见功率因数和对应 Q_DG 的关系如下功率因数Q_DG对网损的常见影响1.00只削减有功电流降损效果最直接0.95 滞后0.3287 * P_DG提供无功支撑局部线路压降减小0.95 超前-0.3287 * P_DG吸收无功网损变化取决于系统无功流向在 DGdS 这类代码里如果数据文件只有 P_DG 一列程序默认功率因数为 1。需要看潮流结果里的电压分布再决定是否加无功修正盲目设置功率因数可能把本来降损的方案做成升损方案。5. 用 DG 渗透率-网损曲线验证潮流计算与网损拆分的一致性5.1 扫描 DG 出力观察网损曲线是否出现拐点验证潮流计算正确性的一个务实办法是固定 DG 接入位置把出力从 0 逐步扫描到该节点原负荷的 1.5 倍记录每个出力下的总网损。正确实现会得到一条先降后升的曲线这说明反向潮流和注入符号都对吧。P_load18 bus(18,2); % 节点 18 的负荷有功p.u. ratio 0:0.05:1.5; loss_kw zeros(size(ratio)); for k 1:numel(ratio) S_dg zeros(size(bus,1), 1); S_dg(18) ratio(k) * P_load18; % 只发有功 [V, I_branch] fbs_dg(bus, branch, S_dg, 1e-6, 50); line_loss_pu real(branch(:,3)) .* abs(I_branch).^2; loss_kw(k) sum(line_loss_pu) * 10 * 1000; end plot(ratio * P_load18 * 10000, loss_kw / 1000);5.2 验证实现的三个检查点第一无 DG 时网损要回到无分布式发电机状态下的基准值。IEEE 33 节点系统大概是 202.68 kW如果偏差超过 0.5%先检查标幺值换算。第二扫描曲线出现下降段再上升段说明 DG 功率符号、支路电流叠加顺序和网损计算公式都对得上。如果曲线单调上升多半是把 DG 的负号方向搞反了。第三记录接入点最低电压当 DG 出力接近负荷 1.5 倍时反向潮流会使部分节点电压抬升最低电压点可能从末端移到馈线中部这是符合物理规律的。这个扫描同时也是一个很直观的 DG 选址工具。靠近变电站接入降损空间有限末端接入局部负荷电流被就地抵消降损幅度明显但超出临界渗透率后网损回升也快。把几条不同接入位置的曲线叠在一张图里DGdS 这套流程的价值就完全体现出来了。本文还有配套的精品资源点击获取
返回列表