
IEEE 118节点系统是我在新能源并网仿真里用得最多的公开算例。这段时间我拿它做了一轮带光伏和风机接入的潮流计算、短路计算和稳定性分析整个过程下来最大的感受是这套系统的“坑”不在数据获取而在模型改造和新电源特性处理上。网上的教程大都只讲潮流怎么跑很少有人把新能源接入后的短路电流特性和暂态稳定变化串起来讲这次我干脆把整体思路、实操细节和我实际踩过的坑整理成文。这篇内容适合电力系统方向的研究生、刚入行做并网仿真的工程师以及需要验证新能源控制策略的同行。文章里不会堆一堆推导公式更多是告诉你“这一步为什么这么设”“跑不出来怎么排查”属于可以直接抄作业的那种。我主用的工具是MATPOWER和pandapower后半部分做暂态时会提一下PowerFactory的用法整体方案你拿过去换工具也能落地。1. IEEE 118节点系统的整体认知与建模选型1.1 这套系统到底长什么样IEEE 118节点系统最早来自上世纪70年代的电网数据后来逐步被整理成公开的标准算例。它的规模在公开测试系统里属于“中等偏上”118条母线、一百多条交流线路、若干双绕组变压器、大约54台发电机不同版本数量有差异、90多个负荷节点系统总负荷在4200到6300 MW之间电压等级以138 kV和161 kV为主部分数据文件里会混有345 kV和低压母线。这个规模很舒服。比IEEE 9节点、39节点复杂得多能体现网络结构和潮流分布的真实性但又不至于像数千节点的实际电网那样难以调试。所以它成了新能源并网研究的“标准试验场”你去看电力系统方向的论文案例部分有大量直接写case118的。但这套系统的原始数据只给了静态参数没有动态模型。什么意思就是你能用MATPOWER直接算潮流、算最优潮流但要做暂态稳定仿真得自己去补发电机励磁、调速器、负荷动态模型。这个我在后面稳定性分析部分会再强调。1.2 建模工具选型MATPOWER还是pandapower我先说结论我做这类项目通常混着用。 MATLABMATPOWER负责潮流、连续潮流和最优潮流因为它的runpf、runcpf、runopf写得很成熟文档多网上案例也多 Pythonpandapower负责数据批处理和短路计算因为pandapower的短路计算模块做得非常好calc_sc一句就能算三相和各种不对称故障省掉自己写序网络合并的麻烦。如果你只依赖MATLAB也能做短路计算但大部分用户得自己搭阻抗矩阵代码量不少。如果你只用pandapower潮流和连续潮流也能做但在连续潮流的鲁棒性和自定义控制策略上MATPOWER更顺手。至于PSS/E和PowerFactory它们是工业级工具做机电暂态和电磁暂态非常强但数据准备成本高不适合前期方案验证。我的建议是数据整理和模型校验用Python算潮流和稳定裕度用MATPOWER算短路电流用pandapower需要看暂态功角曲线时再把模型导进PowerFactory。这个流程我在多个项目里验证过效率最高。1.3 数据准备与模型校验的几个关键动作数据获取不复杂装好MATPOWER以后直接loadcase(case118)就能拿到标准数据。用pandapower的话可以通过pp.converter.from_mpc把MATPOWER的m文件转成pandapower网络对象。但拿到数据不代表能用我每次都会先过三遍校验。第一是功率平衡。算完初始潮流看平衡机出力是否在合理范围。标准case118里发电机总出力和负荷总量通常不是刚好相等的差额由平衡节点承担如果这个差额特别大比如几百兆瓦先别急着改数据先确认是不是某个负荷或发电机参数写错了。第二是电压初值。跑一次基础潮流看所有母线电压是否在0.94到1.06 p.u.范围内。如果某个区域明显偏低可能不是数据问题而是那个区域本身无功不足这反而能成为后面新能源接入位置的参考依据。第三是支路参数完整性。有些网上流传的case118数据文件会缺少线路充电电容或者变压器分接头位置这对潮流影响不算大但对短路计算影响很大尤其是零序参数不全时不对称短路计算会直接报错。这一步一定要在开始前确认清楚。2. 新能源风机与光伏的并网建模2.1 风机在潮流仿真里的等效处理真实的风机无论是双馈式DFIG还是永磁直驱式PMSG内部都有变流器和复杂的控制回路。但在潮流计算这个层面上我们根本不需要把电力电子开关搭进去只需要把风电场看成一个可控的电源节点按控制模式分类就行。风机有两种典型控制模式。一种是恒功率因数控制也就是只发有功无功按功率因数给定这种模式在潮流计算里直接设成PQ节点另一种是恒电压控制风机通过变流器调节无功来维持并网点电压这种应该设成PV节点但必须给它设置无功上下限因为风机的无功能力不是无限的。我举个例子一个10 MW的风电场功率因数0.95滞后那么无功功率Q P × tan(arccos(0.95)) 10 × 0.3287 ≈ 3.29 Mvar。在MATPOWER里改数据时直接把对应发电机的Pg设成10Qg设成3.29Qmax和Qmin按风机容量给比如±5 Mvar。这样建模比把每台风机逐台建出来要高效得多而且对系统层面的潮流影响几乎无差别。2.2 光伏电站的模型和无功控制策略光伏电站的建模思路跟风机类似但有一个差别需要特别注意光伏逆变器在夜间或者光照不足时不发电有功出力可能直接降到零。如果在潮流计算里把光伏节点固定设成某个有功值得到的结果就只能代表某个特定时刻的运行状态不能代表全天。所以在做并网方案时我习惯把光伏按场景分开考虑高峰出力场景、低谷出力场景、零出力场景。比如要分析系统最危险的运行方式往往不是光伏满发的时候而是高负荷加上光伏突然跌落的场景。光伏的无功控制也有两种做法。传统方式是固定功率因数比如0.98新一些的场站要求具备电压调节能力也就是Q(V)下垂控制或者恒电压控制。在静态潮流里恒电压控制的光伏节点同样可以设PV节点但要注意逆变器的无功限额很多时候厂商会给出功率因数范围0.95超前到0.95滞后换算成功率因数对应的无功上限不要设得比变压器容量还大。2.3 渗透率设定和场景设计新能源渗透率的定义通常是新能源有功出力占总负荷有功的比例。做对比研究时不能只把新能源一股脑加进去必须设计好替换方案否则结果解释不清楚。我常用的做法是保持总负荷不变按比例替换常规同步机组的出力。比如系统基准出力100 MW渗透率30%就让新能源发30 MW同时把某些常规机组的出力降低30 MW保证发电机总出力基本不变。替换节点的选择要讲究。不能随便挑容量最小的机组替换那样可能导致局部电压支撑不足。我一般会先看基础潮流的电压分布选择电气上靠近负荷中心、电压偏低区域的机组进行替换这样能最大化体现新能源对电压的支撑作用。如果是研究最恶劣场景就反过来在负荷末端替换机组让系统更容易出现电压问题。渗透率梯度建议至少取三档20%、30%、40%这样后面分析稳定裕度变化时能看到趋势而不是单纯一个孤立的数字。3. 潮流计算实操接入新能源后系统怎么跑3.1 修改节点数据与参数设置的示范用MATLAB操作的话关键代码是这样的mpc loadcase(case118); % 假设把第15号机组退出75号母线接入一个100MW的风电场 mpc.gen(15, GEN_STATUS) 0; % 退出原有机组 % 在75号母线上新增一台等效风机 % gen矩阵关键列: [bus, Pg, Qg, Qmax, Qmin, Vg, mBase, status, Pmax, Pmin] new_gen zeros(1, size(mpc.gen, 2)); new_gen(1) 75; % 接入母线 new_gen(2) 100; % 有功出力 100 MW new_gen(3) 33; % 初始无功 33 Mvar按cosφ0.95算 new_gen(4) 60; % Qmax new_gen(5) -60; % Qmin new_gen(6) 1.0; % 电压幅值设定 new_gen(7) 100; % 基准容量 MVA new_gen(8) 1; % 投入状态 new_gen(9) 110; % Pmax new_gen(10) 0; % Pmin mpc.gen [mpc.gen; new_gen]; % 跑潮流 res runpf(mpc);用pandapower的写法更直观import pandapower as pp net pp.converter.from_mpc(case118.m) # 在75号母线创建风机 pp.create_sgen(net, bus75, p_mw100, q_mvar33, sn_mva110, name风电场, typePV) # 设置光伏节点比如在80号母线 pp.create_sgen(net, bus80, p_mw80, q_mvar16, sn_mva100, name光伏电站, typePV) # 投入新能源的机组对应退出一台常规机组 # 这里直接修改gen的status net.gen.loc[14, in_service] False # 跑潮流 pp.runpp(net) print(net.res_bus[[vm_pu, va_degree]])这里有个容易踩的坑MATPOWER里新增gen时Qmax和Qmin一定要按实际无功能力设置别图省事填一个特别大的数。否则牛顿法迭代时这个节点会被当成无限无功源算出来的电压分布完全失真。pandapower里如果你是设typePV但没给无功限值同样会有这个问题。3.2 牛顿-拉夫逊法什么时候会不收敛牛顿-拉夫逊法的核心思路是求解节点功率不平衡方程每一步用雅可比矩阵做线性化迭代。正常算case118在基础数据下几秒就能收敛。但新能源接入后不收敛的情况我见过很多。最常见的原因是电压越限。比如把新能源接到弱电网区域当注入有功较大时局部电压可能冲到1.1 p.u.以上这时雅可比矩阵接近奇异迭代振荡。另一个原因是无功不足比如把大量同步机退出切掉了它们的励磁调压能力系统无功缺口变大而新能源的Qmax又设得保守结果潮流找不到可行解。还有一个原因是节点类型设置不合理比如把光伏设成PV节点但实际Qmax远不足以维持目标电压这种情况下不收敛是必然的。排查时我习惯先降低渗透率到10%看能不能收敛逐步升上去定位是哪个节点引起的。如果确定是某个新能源节点电压越限先给它加一点无功补偿或者调整目标电压到附近合理值。切忌一上来就调大迭代次数或者放宽收敛精度那样往往掩盖了真正的模型问题。3.3 结果分析电压分布与网损变化我用一个典型的算例结果来说明分析思路。以下是不同渗透率下的潮流结果对比我的实际案例数据供参考渗透率网损 (MW)最低电压母线最低电压 (p.u.)最高电压母线最高电压 (p.u.)潮流迭代次数0%128.5570.950361.058320%117.3570.956361.057330%108.6750.948361.063540%102.1750.941421.0717从表里能看到一个常见的现象渗透率提高时由于新能源替代了本地同步机出力减少了远距离功率输送网损通常会下降。但电压分布不一定越来越好如果新能源接入点选得不好局部电压可能跌落甚至高压侧越上限。分析结果时我一般按三个顺序来看先看全局电压是否越限标注越限母线位置再看是否有支路潮流接近热稳定极限也就是负载率超过80%的线路最后看网损和平衡机出力是否合理。这三个指标不通过后面的短路和稳定性分析做了也白做因为基础运行点就不健康。4. 短路计算实操一定要区分同步机和逆变器的短路特性4.1 三相对称短路计算的实操步骤pandapower计算短路电流非常方便它在短路计算时用的是IEC 60909的标准思路对每个故障点用一个等效电压源替代系统然后计算该点的短路阻抗进而求短路电流。不需要像电磁暂态仿真那样逐时刻积分所以速度快适合批量计算全网各母线短路水平。操作如下from pandapower.shortcircuit import calc_sc import pandapower as pp net pp.converter.from_mpc(case118.m) # 在三相短路模式下计算所有母线短路电流 calc_sc(net, fault_type3ph, kappa_methodC, lv_tol_deg0.0) sc_i net.res_bus_sc[[ikss_ka, skss_mw, rk_ohm, xk_ohm]] # 只看75号母线 print(net.res_bus_sc.loc[75])如果想指定某条母线计算短路可以传bus75参数。这里有个细节kappa_method是冲击系数计算方法IEC 60909标准下的方法C比A更准确但结果通常略低如果后面要跟PSCAD的结果对比要注意这个差异不是算错了。对称短路的物理含义很直接故障点电压降到零所有电源都向故障点注入短路电流。在纯同步机系统里短路电流由各发电机的次暂态电抗决定数值可以达到额定电流的5到8倍。逆变器却不是这样。4.2 新能源逆变器限流特性带来的“短路电流缩减”这是全套分析里最容易被忽略、但工程上最重要的一点。同步发电机是一个电压源短路时能提供很大的短路电流而光伏逆变器和全功率变流器风机本质上是电流源控制策略通常把输出电流限制在1.1到1.5倍的额定电流以内。这意味着什么简单说如果一个区域的新能源渗透率很高而接入点附近的同步机很少那么该区域出现三相短路时短路电流会比同等容量纯常规电源系统小很多。我在实际计算里把30%渗透率的风电场接入case118弱端区域后某母线短路电流从原来的8.2 kA下降到了5.6 kA降幅超过30%。这个缩减对系统不一定是好事。继电保护的过流元件是要按最大短路电流整定的如果短路电流被逆变器压低而保护定值没有相应调整就可能出现故障时保护灵敏度不足、拒动或者延时动作。更麻烦的是逆变器短路电流持续时间很短如果故障没有在几十毫秒内被切除故障点电流会大幅衰减保护判断难度更大。4.3 不对称短路的序分量计算与零序坑不对称短路包括单相接地、两相短路和两相接地短路计算时用对称分量法分解成正序、负序、零序三个序网络然后在故障点按故障类型把序网络连接起来。在pandapower里对应不同参数calc_sc(net, fault_type1ph, # 单相接地 kappa_methodC) calc_sc(net, fault_type2ph, # 两相短路 kappa_methodC) calc_sc(net, fault_type2phPE, # 两相接地短路 kappa_methodC)但这里有个大坑pandapower默认的短路计算依赖网络的正序、负序和零序阻抗参数。MATPOWER转换过来的case118很多时候没有完整的零序线路参数和变压器接地方式信息。你一旦跑不对称短路会发现某些母线报错或者计算出错。我把这个问题卡了一下午才找到原因。解决办法是给线路和变压器补齐零序参数。怎么补工程上一般默认正序与零序阻抗比Z0/Z1在2到3.5之间对于输电线路取3左右比较常见变压器零序阻抗则要看绕组接地方式中性点直接接地时零序阻抗约等于正序阻抗不接地时零序支路开路。这两套经验值足够支撑静态短路计算了。4.4 新能源短路电流对保护整定的实际影响既然新能源短路电流跟同步机差别巨大保护整定就不能直接沿用旧值。尤其是在新能源接入点相邻线路我建议至少做三个校核。一是最大运行方式下的三相短路电流也就是把新能源全部投入、作为附加短路电流源的场景看保护是否能可靠动作。二是最小运行方式下的两相短路电流重点看新能源出力为零但系统负荷最大的场景避免保护灵敏度不足。三是特别注意逆变器限流的持续时间如果保护动作时间超过逆变器电流支撑时间故障电流可能已经衰减这对有些距离保护的计算有影响。实际操作里如果短路电流缩减严重通常会考虑在新能源场站加装动态无功补偿装置或储能故障时提供短时电流支撑。这个方案在静态计算里不能完全体现但至少能在短路水平上“托底”。5. 稳定性分析实操从静态到暂态5.1 静态电压稳定性连续潮流与P-V曲线静态电压稳定性的核心问题是系统还能带多少负荷临界点在哪。最直观的方法是连续潮流CPF逐步增加负荷水平同时求解潮流得到关键母线的P-V曲线。P-V曲线的鼻尖点对应系统最大功率传输点鼻尖点之前都是稳定运行区域超过它就电压失稳。MATPOWER直接用runcpf函数mpc loadcase(case118); % 设置连续潮流选项 option mpoption(cpf.stop_at, NOSE, ... cpf.step, 0.01, ... cpf.plot.level, 1); r runcpf(mpc, mpc, option);cpf.step是负荷增长步长步长太大会跳过鼻尖点太小则计算量太大一般先设0.02跑一遍看大概位置再缩小步长精算。cpf.stop_at设成NOSE表示算到鼻尖点停止。我拿case118做过一组渗透率对比实验把风机分别接在电气薄弱区域和电气强支撑区域结果很有意思。发电机容量不变的情况下把新能源接入在电压偏低的负荷区域负荷裕度从基态的20.4%提高到27.8%接入在已经很强的区域负荷裕度几乎没变化。这说明新能源接入位置对静态电压稳定性的影响远大于装机容量本身。5.2 暂态稳定性故障设置与临界切除时间暂态稳定性关心的是大扰动后的动态行为比如三相短路故障跳闸后发电机能否回到同步运行状态。核心指标就是临界切除时间CCT保护必须在CCT以内切除故障否则系统失步。这里我换工具了。MATPOWER和pandapower默认不提供机电暂态仿真能力要做时域仿真最方便的是PowerFactory或者PSS/E。流程大致是第一步把case118的静态数据导入PowerFactory并在发电机上挂标准模型比如GENROU同步机模型加IEEE IEEEX1励磁系统和IEEE T1调速器模型。第二步给新能源机组选择动态模型比如双馈风机的DFIG模型或者光伏逆变器的PV模型。第三步在目标母线设置三相短路故障故障持续时间从0.05秒开始逐步增加每次增加0.01秒观察系统是否失稳找到临界值。我用PowerFactory做过类似实验结果印证了后面要说的“双刃剑”结论渗透率30%时如果只是简单替换同步机而不给新能源加电压穿越功能同一故障场景下CCT比纯同步机系统缩短了约0.08秒但如果新能源配置了完整的LVRT和动态无功控制系统CCT不仅不降反而有可能提升。别问我为什么差这么多逆变器在大扰动过程中的动态无功支撑确实能把故障切除后的电压恢复过程拉回正轨。5.3 新能源对稳定性的“双刃剑”效应把静态和暂态结果放在一起看新能源接入对系统稳定性从来不是单向的利好。在静态电压稳定层面新能源只要具备无功调节能力接入在电压支撑薄弱的区域就能显著提升负荷裕度。这是因为负荷中心原本依靠远距离输送无功新能源就地注入无功直接缩短了无功输送距离电压支撑效果立竿见影。但在暂态稳定层面新能源大规模替代同步机会降低系统惯量。同步发电机本身有巨大的旋转质量频率波动时能自然地提供惯量响应而逆变器电源是静态设备如果没有额外配置虚拟惯量控制系统频率变化率会明显增大同样故障下的CCT往往变短。这就是为什么很多人说“新能源太多系统会变脆”。结论很清楚新能源接入的位置和渗透率需要放到同一个框架里统筹评估。光看静态潮流结果是不够的短路水平和暂态稳定性必须一起看。对电力系统研究者来说这三块本来就是一体的对工程从业者来说任何一块的缺失都可能导致并网方案后期出大问题。6. 常见问题与排查技巧实录6.1 问题速查表我把这次实操过程中遇到的和以前项目里高频出现的问题整理成了一个表你照着排查基本能定位大部分问题。现象可能原因解决方案潮流不收敛新能源节点设为PV但无功限值过小改成PQ节点或扩大Qmax/Qmin范围接入后电压越限并网点处于弱网区域有功注入过大增加无功补偿或调整接入功率因数短路计算结果明显偏小新能源逆变器限流或短路阻抗参数设置偏大确认逆变器限流倍数用动态模型对比不对称短路报错变压器接线方式或零序参数缺失补全零序参数检查变压器接地方式CCT比预期小很多新能源未配置LVRT或故障位置不当配置动态无功控制校核故障场景连续潮流算不到鼻尖点cpf步长过大或停止条件设错减小步长检查stop_at选项6.2 三个值得展开讲的排查经历第一个是潮流不收敛的排查经历。我当时把case118里的30%同步机换成了光伏结果runpf怎么都迭代不到收敛点。一开始我以为是自己替换节点选得太多后来逐点排查发觉问题出在某台光伏逆变器的Qmax设成了0。光伏在晚上不发的场景里确实可能不提供无功但我也把它的有功设成0了结果该节点变成纯吸收无功的负荷节点周边电压一下子被拉低潮流直接不收敛。解决办法是把该光伏节点在夜间场景里完全退出不留在系统里。第二个是短路计算中遇到的零序阻抗问题。我用pandapower算单相接地短路报错提示某台变压器缺少零序参数。后来查文档发现pandapower的变压器模型里如果是Yg-Yg接线需要同时给定中性点接地阻抗如果是Δ接法零序阻抗视为无穷大。我把所有变压器的接线方式按常见情况补全后单相短路计算就正常了。这个细节在MATPOWER潮流计算时完全看不出来因为潮流只关心正序网络。第三个是CCT计算异常。我在PowerFactory里做了三次渗透率的时域仿真30%渗透率下CCT竟然比40%还小一开始觉得不合理。后来仔细看录波才发现30%渗透率的替换位置正好在一台强励磁的同步机附近而40%渗透率的替换位置分散在多个区域反而缓解了局部电压跌落。这个案例再次说明新能源接入位置和渗透率必须做参数敏感性分析不能只看单一场景就下结论。6.3 工具和数据的其他避坑建议再分享几个零散但实用的经验。第一MATPOWER的case118有多个版本有的带发电成本数据有的不带有的发电机列数多有的少。做短路和稳定性分析时建议先把发电机列内容对照文档统一检查一遍尤其是GEN_BUS编号别出现两台发电机挂在同一个节点觉得没问题实际上一台是停产状态的情况。第二pandapower从MATPOWER转换时很多支路的parallel并联数量和长度信息会丢失这会影响短路阻抗计算精度。如果对精度要求高建议在pandapower里手工补上线路单位长度参数。第三新能源的动态模型参数不要随便填。很多论文里把风机惯量常数H设为0这在纯静态分析里没问题但在暂态分析里会让频率变化率偏大结果过于保守。工程上跟电网保持频率支撑的风电场一般会设置等效虚拟惯量取3到6秒比较常见具体看场站控制策略。最后再分享一句话我个人在实际操作中的体会是做新能源并网仿真最容易犯的错误是把潮流、短路、稳定三个环节割裂开。潮流算完觉得没问题就直接下结论短路和稳定一算就傻眼。真正稳妥的做法是在设计阶段就把这三件事放在同一个模型中统一考虑每个环节的假设和参数都彼此呼应。如果你想在这个方向上继续深入下一步可以考虑把储能系统加进来用IEEE 118节点作为基础平台研究储能参与调频、调压以及新能源消纳的协同控制。我最近也在尝试把电池管理系统的一些控制逻辑简化后接到电网仿真里如果你也有兴趣后续可以一起交流。先把这套静态到动态的分析流程跑通后面再加什么模型都会顺手很多。