
做电力系统仿真这几年我越来越觉得IEEE 9节点系统是个“又爱又恨”的东西。爱它是因为它足够简单三机九节点拓扑清晰参数公开几乎是每个做电力系统稳定分析的人绕不开的入门benchmark恨它是因为它太老了模型里的三台同步发电机清一色是传统火电放到今天这个新能源渗透率一路狂飙的环境里总觉得不太够用。我去年在做一个含高比例新能源的课题时导师随口问了一句“你能不能把风电场也塞进IEEE 9里”当时我以为是个很小的改动结果一查资料才发现网上关于“IEEE 9加风机”的完整教程少得可怜绝大多数只是提了个思路要么模型调不通要么参数对不上。这篇文章想把我后来完整搭出来的方案、踩过的坑、以及仿真前后的对比结果全部梳理出来希望能让同行少走弯路。不管你是正在做毕设的研究生还是刚接触机电暂态仿真的工程师只要你想在IEEE 9节点系统里加入风机模块做并网分析这篇内容应该能帮上忙。1. 为什么非要在IEEE 9节点系统里加风机模块1.1 IEEE 9模型的“江湖地位”与先天不足IEEE 9节点系统又叫Western System Coordinating CouncilWSCC3机9节点系统是1960年代提出的经典测试系统。它由3台同步发电机、3个双绕组变压器、6条输电线路和3个恒阻抗负荷组成总装机容量大约是557.2 MVA基值100 MVA下。为什么它能火这么多年因为它麻雀虽小五脏俱全既能展示同步电机的次暂态、暂态过程又能分析低频振荡和功角稳定而且参数完全公开不存在任何版权障碍。不管是BPA、PSASP、PSS/E、Digsilent还是我常用的Matlab/Simulink SimPowerSystems都能轻松搭建。但问题恰恰出在“经典”二字上。IEEE 9模型里的三台发电机G1、G2、G3都是同步机励磁系统、调速器、电力系统稳定器PSS等等全是围绕火电/水电设计的。放在几十年前这确实是主流放在今天你要研究风电并网对系统惯量、调频能力、暂态稳定性的影响这个模型就有点“木讷”了——它根本没有风机你用Mother、Path那改起来就千头万绪了。1.2 风机模块的选型思路不是随便塞一台DFIG就行把风机加入IEEE 9第一步不是上网下载一个“风电模型”直接怼上去而是要明确你研究什么、你要什么类型风机。风电并网仿真里经常用到四类风机模型固定转速鼠笼异步风机FSIGType 1结构简单但是要吸收大量无功对电网电压支撑能力差现在已经用得少了。可变转子电阻绕线异步风机WRIGType 2同样比较老派。双馈异步风机DFIGType 3转子侧通过背靠背变流器接电网既能发出有功又能独立控制无功是目前陆上风电的主流。直驱永磁同步风机PMSGType 4全功率变流器解耦控制灵活海上风电和大型风电场的主力。那么问题来了用哪种我的建议是如果你目标是研究“风机并网对系统暂态稳定性的替代效应”DFIG是最合适的因为它的控制特性与同步机有本质区别电压源换流器决定了它几乎不提供惯量响应但无功支撑能力强。如果你想重点考察“弱电网下电压稳定性”PMSG也很能说明问题。但如果只是简单加个“风电场”想要体现新能源占比并且不想在控制策略上花太多时间那么Type 3 DFIG的有功无功解耦控制特性和模型成熟度最适合大多数毕业生。我在实际搭建时选择了DFIG具体型号是基于PSS/E里常见的GE 1.5MW/2MW风电机组聚合模型单机额定容量2MW一共并联50台凑成100MW风电场。这样做的原因是双馈模型的控制参数公开资料较多网上能找到GE通用模型对应的传递函数参数方便在Simulink里填滤波器、电流内环、功率外环的控制参数。1.3 替换哪台发电机以及容量典型值如何定“加入风机模块”不是指额外增加一个节点一个风电场而是指把原来的同步机替换成等容量的风电场或者在不改变系统负荷水平的前提下新增一个风电场接入。我在实际方案里选择的是把原本接在母线2上的G2参考机以外的另一台发电机替换成风电场容量按100 MVA对应大约100 MW处理同时保留G1作为松弛节点slack busG3保持同步机不变。这样改造后的系统里既有同步机参与调频又有大比例风电能更好地对比故障前后风电机组与传统机组的动态行为差异。有些资料里会直接把3台机全部换掉或者把风电场挂在负荷母线5/8上这么做也不是不行但那样系统几乎没有旋转惯量初始潮流很容易发散对新手很不友好。我最终建议的拓扑是保持原来3台发电机节点1、2、3不变只把母线2上的G2替换为DFIG风电场并在母线2和风电场出口之间增加一个箱式变压器或者直接在模型中用等效阻抗表示汇集线路。这样改造量最小便于验证对比。2. 搭建过程中最容易让人崩溃的三个细节2.1 基准容量与标幺值系统的统一这是所有“加风机”教程里最容易被一笔带过、却最容易导致潮流不收敛或动态仿真发散的地方。IEEE 9节点系统的基准容量是100 MVA基准电压在发电机侧是16.5 kV、18 kV、13.8 kV三台机分别不同输电网络侧是230 kV。而风电场模型内部一般以风机自身额定容量比如单台2 MVA为基值并且内部分别采用575V/中压/高压多个电压等级。如果你在做聚合模型时直接把风电场当成一个PQ节点给一个固定的有功输出比如P0.5 pu on 100MVA base然后内层DFIG模型还按2MW/台来控制那么这个模型内部的标幺换算必须是严丝合缝的。否则你会发现潮流计算能过但动态仿真里风机功率疯狂震荡或者发出的无功完全不受控。一个很不幸的案例是我第一次调的时候风电场模型输出电压基数按0.69 kV计算但升压变压器按0.575 kV设计结果暂态过程中无功功率直接从0拉到-30 Mvar。查了一天最后发现就是标幺基值不一致导致的。具体做法建议在Matlab/Simulink里搭建DFIG聚合模型时把风机控制器的参考值、PI参数、滤波电感都折算到以100 MVA为基值的系统侧或者干脆在风机模型之外再接一个理想变压器模块进行电压补偿。注意DFIG内部的直流母线电压控制环、转子侧变流器RSC的电流内环通常是以“风机侧基值”标幺的而网侧变流器GSC的控制环则更接近“网侧基值”。两者混用时需要额外加一个基值换算增益模块别图省事直接复制粘贴型号。2.2 风机模型里的参数并非“默认出厂值”就能用从PSS/E或者Matlab的库文件里拖一个DFIG风机模型出来默认参数往往对应某一类机型不一定适配IEEE 9的电压等级和短路容量。比如DFIG的转子侧变流器电流限幅值很多默认模型里是1.1~1.2 pu相对于风机自身容量在弱系统里这个限幅可能导致故障期间风机几乎无无功输出进而让母线2电压跌得更狠。仿真结果和你预期“风机可以帮忙撑电压”完全相反。我踩过这个坑之后建议大家在建模初期就要明确你采用的是“详细开关模型”还是“平均模型”。如果是详细开关模型Simulink里IGBT导通损耗和开关频率会大大拖慢仿真速度而且风机在故障清除后容易和同步机发生数值振荡。我的建议是用“平均模型”来做机电暂态研究也就是用受控电压源等效代替背靠背变流器的平均值输出忽略开关谐波。平均模型能在保持控制响应精度的同时把仿真速度提升十倍以上。另外一个更隐蔽的坑是风机控制器的功率外环带宽和锁相环PLL带宽。IEEE 9系统的短路比较大一般在几百MVA级别而100MW风电场接入后系统的短路比SCRShort Circuit Ratio大约是5~6属于较强系统。此时如果你把PLL带宽调得过高比如100Hz以上那么在系统发生三相短路时PLL会快速跟踪电压相位瞬变造成风机输出电流畸变严重时会让仿真直接崩掉。我最终把PLL带宽控制在10~20Hz效果比较理想。2.3 风电场并网点的短路容量与等值阻抗第三个容易忽略的问题是风电场不能只看成一个“电流源”它和电网之间的“电距离”决定了它能不能稳定并网。短线路、强连接时风机对系统惯量的替代效应非常突出长线路、弱连接时风机并网点的电压波动和暂态过电压问题会成为主要矛盾。IEEE 9母线2本身是一个230kV母线短路容量不低但如果我在母线2和风电场之间硬加一条很长的110kV线路风电场出口电压在故障后会长时间恢复不了。我在最终模型里并没有额外增加长距离输电线路而是用一个等效阻抗X约为0.05 pu基准100MVA模拟风电场内部的汇集线路和箱变总阻抗。这个值的设定依据是内部50台2MW风机分成5组每组10台分别经0.69/35kV箱变再经35/230kV升压站汇集升压。折算到230kV侧整个风电场内部等效阻抗大约是0.05 pu以100MVA为基准这样并网点相对较强。严谨的做法是画一个完整的内部拓扑但那样会使模型变得过于庞大且难以调试。对于研究“风机对系统暂态稳定的影响”这个目标聚合等值足够用了。3. 手把手搭建从原始九节点到含风机九节点的动改步骤3.1 收集原始参数别从网上随便抓一份就完事IEEE 9的原始参数虽然公开但不同来源可能存在小数点后位数的差异甚至线路电抗正负号不一致。我建议直接采用P.M. Anderson和A.A. Fouad在《Power System Control and Stability》里那套标准数据线路阻抗如下均以100 MVA为基准230kV电压等级线路R (pu)X (pu)B/2 (pu)母线5-母线40.01000.08500.0880母线6-母线40.01700.09200.0790母线6-母线90.03900.17000.1790母线7-母线80.00850.07200.0745母线8-母线90.01190.10080.1045母线5-母线70.03200.16100.1530变压器参数的话母线1、2、3到各自中压母线4、5、6或者7的漏抗都是在0.05~0.09pu之间。大家搭建时要注意变压器模型在Simulink里要勾选Three-phase和pu模式并注意连接方式Yg-Δ或Yg-Yg。绝大多数教材里默认是Δ-Yg连接但实际潮流结果对连接方式并不算敏感动态仿真时零序回路会有影响。如果研究的是对称三相短路那连接方式的影响可以忽略如果做不对称故障零序网络就重要了需要特别设置。3.2 搭建无风机基础模型先跑通再谈加东西我的习惯是任何模型改动之前先把原版IEEE 9搭出来跑一个从稳态到三相短路的完整暂态过程作为baseline。原因很简单如果原始模型都跑不出标准结果那后面加风机后的错误到底是来自风机还是来自原始模型很难定位。具体步骤可以这样在Simulink新建模型从Simscape Electrical Specialized Power Systems里拖入三台同步电机选pu类型并填入对应参数比如G1是16.5kV/247.5MVAG2是18kV/192MVAG3是13.8kV/128MVA这里需要留意IEEE 9原始数据里每台机额定容量不同。配置三台发电机的初始状态在Powergui里点击Tools Initial State Setting输入潮流计算得到的各母线电压幅值和相角这个可以先在Matlab里跑一遍Newton-Raphson潮流或者直接用Simulink的Load Flow工具自动初始化。设置故障在三相短路故障模块里将故障时间设置在1.0s建议等系统在0~1s里完成启动动态基本平稳之后再放故障故障持续0.1s后清除。跑完后画出母线5电压幅值、G1/G2/G3的功角、转速偏差等曲线确认和教材上经典曲线形态一致。在我自己的baseline运行里母线5电压在故障期间跌到大约0.3 pu以下故障清除后在1.5s左右恢复到0.95pu以上三台机的功角摆动大约经过3秒的阻尼后逐渐平息。这个结果很“教科书”可以作为后续加风电场前后的对照基准。3.3 总容量匹配与功率分配计算风电场额定值在原版IEEE 9中三个负荷的总有功大约是315MW无功115Mvar。三台发电机的出力大概是G1发163MW、G2发85MW、G3发100MW总出力比总负荷多了一部分用于网损。我把母线2上的G2原本约85MW用风电场替换那么风电场至少要具备85MW以上的出力能力考虑到初始潮流优化和调频备用我给风电场额定容量定为100MW并且在初始稳态时让它发90MW有功、0Mvar无功或者设定为一个固定的无功功率比如0其余功率由G1和G3补足。用原来的潮流解重算后新的发电机出力大致如下发电机类型有功出力MW无功出力Mvar备注G1同步机180.540.2Slack风电场DFIG聚合90.00或-5PQ或PV节点G3同步机70.326.8PV节点这里有个关键点风电场在潮流计算中到底当PQ节点还是PV节点如果你只给风机有功而无功由变流器自动控制到某个值那就该设成PQ节点如果风机采用电压控制定电压控制那就设成PV节点。DFIG实际上可以在一定范围内独立调无功所以两种都能说得通。但为了让初始潮流和后续动态仿真无缝衔接我建议把风电场设成“PQ节点且Q0”这样风机不参与稳态调压更突出它“不提供惯量但能暂态支撑”的特点。3.4 在Simulink中创建DFIG聚合风电场在Matlab/Simulink里我采用的是Simscape的Wind Farm (DFIG)示例改造。它默认是一个9MW风电场25kV馈线并网模型。我需要修改参数让它变成100MW并且模拟IEEE 9母线2接入。改造步骤打开power_wind_dfig示例模型在Matlab命令窗口输入power_wind_dfig即可打开官方示例。将单台风机的额定功率从1.5MW改为2MW风机数量从6台改为50台总容量就是100MW。调低风速输入或者调大桨距角让初始稳态输出P0.9 pu以100MVA为基准相当于90MW。把风电场出口的升压变改成35/230kV并将模型整体挂接到原IEEE 9模型的母线2位置。在风电场内部保留原来的0.575kV/25kV箱变模型追加一个25/230kV升压变压器或者用一个等效阻抗模块替换整个内部汇集线路。模型参数里的DFIG转子侧变流器参数不必照抄官方示例。官方示例的电流内环PI参数是针对9MW小容量调好的直接放大到100MW后内环响应可能偏慢。我的调法是把电流内环PI参数适当调大比例增益乘以1.5左右功率外环比例增益不变、积分增益减小一点然后通过试凑法观察母线5电压的故障恢复曲线选择过冲较小的一组参数。3.5 动态仿真的故障场景设置与观测变量为了真正说明“加了风机之后有什么不同”我在最终仿真里设计了两个场景场景Abaseline原版IEEE 9母线5处发生三相短路接地故障0.1s后切除场景B含风电用上述DFIG风电场替换G2后在同样的位置、同样的时间、同样的故障阻抗下再次仿真。观测变量我选了母线2电压幅值、母线9电压幅值、G1的转速偏差或功角、风电场输出的有功和无功。额外还需要看DFIG的转子电流和直流母线电压确认故障期间变流器没有越限否则说明故障太严重或者风机限幅设得太低仿真结果不具备参考价值。4. 仿真结果对比风机不是“万金油”但确实改变了系统动态4.1 故障期间母线电压的对比把两组结果放在同一张图里看最直观的差异是故障清除后的电压恢复速度。原始系统里G2是同步机拥有完整的励磁系统和阻尼绕组故障期间它还能通过励磁强制提供一定的无功支撑故障切除后电压恢复比较“有韧劲”。而用DFIG替换后由于DFIG采用电力电子变流器变流器的电流限幅决定了它最多能输出约1.1 pu的电流。故障期间DFIG能提供的无功功率受限于变流器容量因此在故障瞬间母线2电压比原始系统跌得更深一点。但在故障清除后DFIG的无功控制响应速度非常快可以在几十毫秒内把母线电压从低点拉回来。只要控制器不饱和电压恢复速度甚至可以快于同步机励磁系统。这一点在做“动态无功补偿”研究时特别有价值——变流器本质上是ms级响应的电压源比同步机励磁几百ms时间常数快一个量级。4.2 功角稳定性的变化一个惊喜和一个隐患另一个有意思的对比是G3的功角摇摆曲线。因为G2从同步机变成了电力电子接口的风机G2和G3之间的“转子摇摆耦合”消失了。双馈风机通过变流器连接转子转速和电网频率之间是解耦的因此那部分功率振荡的“弹簧-质量”模式被削弱故障切除后G3的功角摆动幅度比原系统更小。这可以理解风机的电磁功率不由功角决定而由控制策略决定所以系统里少了一个容易“你来我往”的摇摆源。不过隐患也随之而来用风机替换G2后系统的等效惯量下降了。惯量这个东西可以从转子运动方程直观感受到同步机的转子储蓄了大量旋转动能频率变化时它能自然释放或吸收能量来阻止频率突变而DFIG转子通过变流器与电网解耦在电网频率跌落时不能“自然”地释放转子动能。所以在故障导致有功缺额时含风机系统的频率变化率RoCoF比原始系统更大最低频率也掉得更低。如果风电场占比继续提高这就会真的威胁到系统频率稳定需要额外配置虚拟惯量控制或储能。4.3 DFIG内部变量的表现别忘了看这些曲线很多初学者做完仿真只盯着母线电压和发电机功角完全忘记看DFIG内部的转子电流和直流母线电压。结果风机控制器饱和了都不知道得出的结论自然也不可靠。我在场景B里捕捉到的DFIG转子电流在故障期间达到约1.2pu的限幅值故障清除后0.2s内回到0.8pu以下直流母线电压在故障瞬间有一个向上冲的小尖峰大约到1.12pu正常值1.0pu随后被GSC的电压外环迅速拉回这个幅度在可接受范围。如果直流母线电压冲到1.2pu以上则说明Crowbar保护已经动作风机会从受控状态切换到不可控状态这时候不能代表DFIG正常工作范围内的行为需要调整风机出力、变压器阻抗或故障阻抗。5. 踩坑与对策三次翻车三次修复5.1 翻车现场一潮流计算不收敛罪魁祸首是基准电压写错第一次把DFIG并到母线2的时候我直接在模型里把风电场出口设置为230kV但风电场内部升压变二次侧标的是35kV中间搭了一个双绕组变压器后Matlab提示潮流计算“Maximum number of iterations exceeded”。查了好几个小时最后发现是变压器一侧的额定电压填成了23kV少了一个0导致实际变比差了10倍潮流自然发散。后来养成了习惯对每一个变压器的两侧额定电压必须从库文件对话框下拉菜单里核对不要相信眼睛记忆。5.2 翻车现场二故障后仿真发散问题出在PLL带宽太高第二次失败比第一次更隐蔽潮流能算过稳态能跑但在设置三相短路后仿真从故障时刻开始剧烈数值振荡不到0.05s就报表“Simulation may be singular”。我把积分步长从10us改到1us仍然发散这通常意味着模型本身在高频段有数值刚性。排查后确认是我的锁相环带宽设到80Hz在故障瞬间电压相位跳变30度PLL瞬间输出错误相位导致变流器坐标变换后的电流指令混乱控制器输出振荡。解决办法是把PLL带宽降低到15Hz同时给PLL输出相位增加一个一阶低通滤波器。这样虽然故障期间风机对相位的跟踪会稍微滞后一点但整体仿真稳定性大幅提升。5.3 翻车现场三风电场无功出力变成“过山车”原因在平均模型与开关模型混用有一次我在同一个模型里RSC用了平均模型GSC却沿用详细开关模型。结果DFIG的直流母线电压波形上叠加了明显的高频纹波这些纹波又通过功率计算反馈到系统级导致母线5的无功功率在20Mvar范围内上下跳动结论完全没法看。后来统一用平均模型问题立刻消失。这里给一个建议在做IEEE 9这种几十毫秒级别的暂态稳定研究时风电场内部的两个变流器最好都用平均模型只有少数需要研究变流器内部谐波和开关策略的场景才值得使用详细开关模型。开关模型会让仿真断断续续并且对参数误差特别敏感。6. 常见问题速查与扩展方向6.1 把IEEE 9里的风机换成PMSG要注意什么如果你不想用DFIG而想用PMSG直驱风机要注意两点。第一PMSG是全功率变流器它与电网完全隔离不存在“转子侧故障穿越电流”问题只要网侧变流器限幅设置合理故障期间表现更“干净”。第二PMSG的惯量响应完全依赖于附加虚拟惯量控制所以如果不加额外控制它的惯量贡献几乎为零。用来对比“同步机/风电的惯量差异”会非常鲜明但用来研究“风机本身故障穿越”反而没有DFIG那么有意思因为DFIG有转子侧Crowbar保护、直流卸荷电路等机制。6.2 换成两机系统G2替换成新能源之后还能不能叫做IEEE 9节点严格讲这时它已经变成“含新能源的IEEE 9变体”。很多人写论文时仍然叫它IEEE 9这是为了说明拓扑基础来自该标准测试系统但内部需要注明某台发电机被替换成了风电场。我们在实际项目中建议命名成“Modified IEEE 9-Bus System with Wind Farm”或者“IEEE 9节点改进型”这样审稿人不会觉得你在“挂羊头卖狗肉”。6.3 把风电场容量调大或调小的后续影响如果你想做一个风电渗透率扫描最简单的方法就是只改DFIG聚合模型里的风机台数或者只改风机初始出力不需要重新画整个模型。渗透率从10%变到30%你会看到系统惯量持续降低、频率最低点持续变差、但母线电压的暂态恢复能力不一定同步变差因为变流器无功响应快。这种“频率恶化和电压改善并行”的现象正是新能源并网研究的核心矛盾非常值得单独开一篇深入分析。7. 补充一点个人习惯如何保存和复现这个模型最后说一点工程习惯。仿真模型这种“一次搭好、反复使用”的东西最怕的是过两个月回来自己都看不懂当时为什么这么设参数。我在最终版本里做了三件事在模型里用Annotation注释框标注每个主要模块的“物理含义”和“标幺基值”比如“DFIG聚合模型100MW100MVA基值下P0.9pu”。把风机内部的控制参数单独做成一个.m脚本或者.mat文件这样修改参数时不用在几十个对话框之间来回切换改一个脚本里的数值然后重新初始化就行。在README里写清楚“仿真时间建议、步长上限、容差设置”比如我发现ode23tb算法在此模型下比ode45更稳定最大步长设为1ms能兼顾速度和精度。这些琐碎细节看上去不“高大上”但确实能让你在认真研究问题时不用反复折腾模型把精力留在分析结果上。希望这份实操记录对你有帮助如果你也搭出了一个更酷的改进型IEEE 9模型欢迎来交流。