
做电力系统仿真的人十有八九会被同一个问题绕晕一次调频和二次调频到底谁管谁尤其是当你要在Simulink里把风电、光伏、火电、储能甚至电动汽车全部塞进同一个模型时问题就变成了——风光火储一次调频该怎么搭含风机、储能、电动汽车、水电、火电的AGC二次调频又该怎么搭。这篇文章把我实际搭建这类系统级调频仿真模型时的思路、模块选型和踩坑经验整理出来。适合正在用Simulink做电力系统频率稳定性研究、新能源参与调频策略设计或者准备做风光火储联合调频课题的读者。我尽量少讲教科书理论多讲模型里怎么呈现逻辑参数怎么设结果怎么验证。模型层次我会选频率响应级而不是电磁暂态级原因是调频和AGC本身就属于秒到分钟时间尺度的问题用简化传递函数模型既高效又能抓住核心矛盾。1. 一次调频和AGC不是一回事先把这个模型的技术边界摸清1.1 两种调频各自管什么电网频率是供需平衡的温度计。发电机总出力大于总负荷频率上升小于总负荷频率下降。这个平衡被打破之后不同时间尺度上有不同的调节手段而一次调频和AGC是其中最容易混淆的两个概念。一次调频是就地自治的控制。每台并网机组根据本地测得的频率偏差按照自身的调差系数自动调整有功出力。它的特点是响应快秒级、不需要通信、属于有差调节。也就是说一次调频动作之后频率并不会回到额定值50Hz而是稳定在某个偏差上。这个偏差有多大取决于负荷扰动量和系统的等效调差系数。AGC则是区域集中的控制。由调度或区域控制器统一计算区域控制偏差ACE再把调节指令下发给参与调节的机组。它的特点是响应慢一些分钟级、依赖通信链路、属于无差调节最终目的就是把频率偏差拉回零同时把区域间联络线功率恢复到计划值。我用一句话记忆一次调频是刹一脚让频率别掉得太惨AGC是重新回到正轨把偏差彻底清零。两者在时间尺度上是接力关系不是替代关系。1.2 为什么要把风光火储和电动汽车放在一起看传统水火电机组有旋转惯性和调速器天然能响应频率变化。但火电的锅炉汽轮机惯性大爬坡慢水电虽然调节快却受水锤效应约束不能无限制地快速改变出力。当新能源波动导致系统净负荷剧烈变化时单靠水火很难兼顾速度和幅度。风电的特殊性在于它通过变流器并网转子动能和电网频率是解耦的。频率跌了风机本身感受不到必须人为加虚拟惯量或下垂控制才肯出力。光伏在最大功率跟踪MPPT状态下只能下调不能上调想参与调频就得提前限功率运行也就是主动预留备用。储能则完全不同响应可以达到百毫秒级别很适合作短时冲击支撑但能量容量有限不能长时间扛。电动汽车可以看成负荷侧的柔性资源。聚合起来之后既能通过有序充电向下调节少充电也能通过V2G反向放电向上调节。它的响应速度比储能慢主要受通信延迟和用户行为约束。把这一堆资源放进同一个模型本质上是在模拟旋转惯量快速功率源慢速大容量电源可调控负荷的分工配合所以仿真模型必须把各自的时间常数、限幅和约束条件正确表达出来否则结论会严重偏离实际。1.3 模型层次选型别一上来就堆详细模型我搭过两类模型。第一类是频率响应级模型系统用摇摆方程描述机组用调速器加原动机的传递函数模型。这种层次适合研究秒到分钟级别的频率动态也就是一次调频策略、AGC参数整定、新能源参与调频效果这类问题。第二类是电磁暂态级模型比如Simulink里的详细风机模型、光伏阵列模型、同步发电机模型。这种模型真实细致但仿真慢、参数多通常只适合做单机并网或小系统分析。做系统级AGC研究时我的建议是先建立频率响应级模型。等控制逻辑跑通、结论合理之后再针对某个关键设备细化。直接一上来堆详细模型等待你的往往不是成果而是大量调参时间和莫名其妙的数值发散。下面的所有内容都是基于这个模型层次展开的。2. 一次调频的Simulink骨架惯性响应是地基调速器是手脚2.1 摇摆方程是整个模型的地基在频率响应级模型里系统频率不是某个模块直接给出来的而是由有功功率平衡和系统转动惯量共同决定的。描述这个过程的经典方程就是摇摆方程2H * (dΔf/dt) ΔP_m - ΔP_L - D * Δf这里H是系统等效惯性时间常数单位秒反映所有旋转设备储存动能的能力D是负荷阻尼系数表示频率变化1%时负荷功率自动变化多少ΔP_m是发电机组总的机械出力变化量ΔP_L是负荷扰动Δf是频率偏差。在Simulink里搭这个方程非常直接先用Sum模块算出ΔP_m减去ΔP_L再减去D*Δf然后乘以1/(2H)经过Integrator积分就得到Δf。为了数值稳定我习惯用Δf作为状态变量而不是直接积分出50Hz的大数这样积分器初值设0即可输出侧再加一个常数50就是实际频率。这个环节最容易犯的错是初值问题。如果仿真开始已经是稳态但积分器初值不是稳态值模型一启动就会出现一段虚假的频率波动容易被误判为系统动态。正确的做法是让模型先空载运行一段或者提前把初值算好给定。2.2 火电和水电调速器模型怎么搭有了频率计算的骨架下一步就是把各机组的一次调频通道接进去。火电的一般链路是频率偏差Δf经过调差系数1/R形成功率指令再经过调速器一阶惯性时间常数T_G和蒸汽容积惯性时间常数T_CH最后变成汽轮机输出的机械功率变化量。在Simulink里调速器的传递函数通常用Transfer Fcn或者Gain加Integrator来实现。火电蒸汽容积部分用一阶惯性就能得到比较平滑的响应T_CH一般取0.2到0.3秒。需要注意的是机械功率输出要限幅同时要加Rate Limiter模拟爬坡率约束。火电参与一次调频时的爬坡速度远没有储能快如果忽略这个速率限制模型会表现得过于乐观。水电和火电不一样。水轮机的水锤效应会让导叶开度变化和输出功率变化之间存在反向的暂时特性简化模型里常用(1 - T_Ws)/(1 0.5T_W*s)这个传递函数来近似。T_W是水锤时间常数通常0.5到2秒。初学可以不深究水锤的物理推导但一定要记得这个环节和火电的蒸汽容积是两回事时间常数和动态方向都不同。水电的调速器参数中调差系数R可以设小一点比如0.03到0.04比火电更陡一些让水电在一次调频中多承担一部分快速分量。2.3 用负荷阶跃验证模型响应第一次搭建时不要急着加新能源和储能先把传统水火系统跑通。我用一个Step模块直接加负荷增量比如系统容量1000MVA时加50MW标幺值就是0.05p.u.观察频率动态曲线。正常情况会看到两个阶段起初频率以较快斜率下跌这是惯性阶段机械出力还没来得及响应接着调速器开始动作频率逐渐趋于一个稳态偏差。这个稳态偏差用理论公式可以直接验算Δf_ss -ΔP / (D Σ(1/R_i))如果只有火电和水电R_eq大约是0.04到0.03的组合加上D大约0.015ΔP0.05p.u.算出来的稳态频率偏差大约0.1Hz量级。模型跑完后对比这个理论值如果差得远基本可以判断是增益单位换算错了而不是模型有问题。这一步验证通过了再往模型里加风机、储能和AGC排查起来会轻松很多。3. 风光储参与一次调频的建模细节风机用变桨还是虚拟惯量3.1 风机的虚拟惯量和下垂控制风机的特殊之处在于双馈或直驱风机通过变流器并网转子转速和电网频率完全解耦。从电网角度看风机就是一个电流源频率跌落时它不会有天然的惯性响应。想让风机参与一次调频必须附加控制。目前工程和研究里最常用的两条控制通道一条是虚拟惯量控制把频率变化率dΔf/dt乘以一个系数K_v叠加到功率参考值上另一条是下垂控制把频率偏差Δf乘以K_p叠加到功率参考值上。前者在频率快速变化瞬间提供冲击功率后者在频率持续偏低时提供持续的功率支持。在Simulink里实现起来很清晰从频率偏差信号引出两路一路经过Derivative得到频率变化率再接一阶低通滤波目的是抑制微分环节放大的噪声另一路直接经过Gain。两路相加后作为风机的功率附加指令加在风机的基准功率参考值上。这里我要特别提醒一个坑Derivative模块如果直接接在阶跃性质的信号后面仿真时很容易出现尖峰而且步长越细化尖峰越大。我的做法是在微分环节后面加一个时间常数0.01到0.05秒的一阶惯性做平滑。另一个问题是功率限幅风机变流器过载能力有限虚拟惯量叠加出来的功率不能超过并网变流器短时过载极限一般附加功率限制在额定功率的10%到20%之间。3.2 储能一次调频里最快的那只手储能模型在频率响应级仿真里不需要太复杂。电池经过变流器并网对外响应可以简化成一阶惯性加功率限幅时间常数取0.05到0.2秒已经足够。控制器逻辑和风机下垂类似频率偏差越过死区后储能功率参考值等于-K_ess乘以Δf。K_ess可以设得比水火机组更陡也就是等效调差系数更小让储能首先承担冲击分量。在Simulink里储能出力从功率平衡节点送进摇摆方程。除了功率限幅另一个关键约束是SOC。电池容量是有限的我通常在储能模块里用Integrator累计充放电能量SOC SOC0 ∫P_bess/E_bess dt然后用Saturation和逻辑判断让SOC在0.1到0.9之间工作。SOC接近下限时放电功率要线性减小到0接近上限时充电功率要线性减小。这个细节做不做直接影响储能能否长期参与调频的结论。还有一个容易被忽略的问题储能如果在一次调频里一直满出力会掩盖其他资源的不足。只看频率恢复效果储能响应0.1秒和1秒差别可能不大但如果你在仿真储能容量配置就必须把SOC约束做细否则仿出来的容量需求偏小实际工程根本扛不住。3.3 光伏的位置要不要进一次调频光伏在MPPT状态下没有上调备用只有功率限制方向上的调节能力。所以我在模型里通常把光伏放成固定出力加光照波动不参与一次调频但作为一个扰动源存在。光照突然变化会导致光伏输出跳变相当于系统里平白多了一个负荷扰动这会考验其他资源的调频能力。如果非要让光伏参与一次调频就要引入减载运行的概念。正常MPPT模式下最高可发功率是P_mppt减载运行把出力限制在90%P_mppt预留10%的备用容量频率跌落时把这部分备用释放出来。Simulink实现就是一个限幅器加下垂控制光伏出力参考值等于0.9P_mppt再叠加频率偏差的下垂修正项。标题里虽然写了风光火储但并不是所有新能源都必须真参与调频。风光火储系统的现实分工是风光提供波动扰动储能在快速环节兜底火电做慢速大容量支撑。把每个资源放在它擅长的位置上比让所有人一股脑都调频要合理得多。3.4 电动汽车第一次调频该不该上我建议放到AGC层电动汽车严格来说是柔性负荷不是发电机。聚合体响应受通信延迟、用户意愿、充电桩状态和SOC分布影响响应速度比储能慢不少。因此在一次调频这块我一般不会把EV作为主力最多加一个非常保守的V1G模型——频率降低时暂停该聚合体的充电功率。这种动态减充电模型在Simulink里实现起来很简单频率低于死区下限时把EV充电功率参考值从正常值向下调节但最小只能到0不能反向放电。真正的双向V2G需要考虑到车主的用车需求、电池健康和充电桩双向功率能力这些约束放在AGC层研究更合适。所以我的整体结构是一次调频层以水火加风机储能为主电动汽车放到AGC层参与二次调频这样模型层次清楚参数也不至于乱。4. 二次调频AGC的Simulink模型从ACE计算到水火储电出力分配4.1 AGC控制器的核心输入区域控制偏差ACEAGC的输入是区域控制偏差ACE定义式是ACE ΔP_tie BΔf。其中ΔP_tie是联络线功率偏差B是区域频率偏差系数。单区域模型里没有联络线功率变化ACE直接等于BΔf。B的单位一般写成MW/0.1Hz取值大小反映该区域对频率偏差的容忍度。在Simulink中从摇摆方程得到的Δf乘以系数B就得到ACE进入AGC控制器。AGC控制器至少是PI结构P项响应当前偏差I项负责把偏差积分清零。这里的积分器必须有抗饱和处理因为AGC的调节功率受机组调节范围和调节速率约束一旦输出饱和而积分继续累积退出饱和时会出现一个很大的过冲。我实际使用中比较省事的做法是用Simulink的PID Controller模块把积分器设置为带back-calculation抗饱和。如果你自己用Integrator搭PI千万不要忘了反馈限幅的钳位逻辑。AGC这一层如果不做抗饱和仿真跑到大扰动时会出现频率过冲而且很难查出根因。4.2 水火电机组的AGC分配速率是硬约束AGC计算出的总调节功率要分配到各台机组。分配方式可以直接决定仿真结果是否可信。常见的简化思路有三种一是按调节容量比例分配每台机组分担的份额与其可调范围成正比。二是按优先级分配储能先动水电次之火电最后补。三是按等速率分配让所有机组在相近时间内完成自己的调节任务。从工程角度水电响应快但容量有限火电容量大但速度慢储能快但能量有限。所以分配逻辑的核心是快资源先顶住慢资源后补上。我在Simulink里用MATLAB Function模块写这个分配逻辑清晰且好改。下面是一个简化示例思路是储能承担快速分量水电次之火电承担剩余慢速部分电动汽车最后做边界微调function [P_bess_ref, P_hydro_ref, P_th_ref, P_ev_ref] agc_allocator(ACE, SOC_bess, SOC_ev) % 简化AGC分配示例ACE单位MW正值表示需要增加出力 P_bess_lim 20; % 储能功率上限MW P_hydro_lim 50; % 水电调节上限MW P_th_lim 100; % 火电调节上限MW P_ev_lim 10; % 电动汽车聚合上限MW % 1) 储能承担30%快速分量并受SOC约束 P_bess_ref 0.30 * ACE; P_bess_ref max(-P_bess_lim, min(P_bess_lim, P_bess_ref)); if SOC_bess 0.9, P_bess_ref min(P_bess_ref, 0); end if SOC_bess 0.1, P_bess_ref max(P_bess_ref, 0); end % 2) 水电承担剩余部分的50% P_hydro_ref 0.5 * (ACE - P_bess_ref); P_hydro_ref max(-P_hydro_lim, min(P_hydro_lim, P_hydro_ref)); % 3) 火电承担剩余部分速率在外部用Rate Limiter再限制 P_th_ref 0.5 * (ACE - P_bess_ref - P_hydro_ref); P_th_ref max(-P_th_lim, min(P_th_lim, P_th_ref)); % 4) 电动汽车做余量补充 P_ev_ref ACE - P_bess_ref - P_hydro_ref - P_th_ref; P_ev_ref max(-P_ev_lim, min(P_ev_lim, P_ev_ref)); end写这段代码是为了说明分配思路实际使用时你还需要在Simulink层分别对火电和水电加Rate Limiter模拟爬坡率。AGC总指令到达机组后也要经过机组本身的一次调频动态链路不能假设分配多少就立刻出多少。4.3 AGC指令和一次调频指令怎么叠加这里有个新手经常搞混的点AGC指令和一次调频指令不是两条独立通道而是叠加在同一个功率指令输入端。机组最终输入的功率指令等于初始基点功率加上一次调频附加量再加上AGC附加量。从控制逻辑上说一次调频在本地快速动作AGC在远方慢速调整二者共同作用于同一台机组的出力设定点。但在Simulink建模时要注意别把信号接错。AGC的量是功率增量一次调频的量也是功率增量两者相加后再去驱动调速器模型。如果接成AGC先去修正频率再由频率驱动一次调频就相当于把AGC的作用绕了一圈又叠加了一次系统会出现正反馈式的振荡。另外一个细节是AGC动作后频率恢复一次调频的出力增量会自然回落。这是正常现象并不是模型bug。最终稳态时AGC输出的功率增量应该等于负荷扰动总量一次调频出力增量回到近似零频率偏差回到零。4.4 储能和电动汽车在AGC中的接入位置储能接进AGC时响应速度可以由一阶惯性模块模拟时间常数可以设得比水电快一个数量级但必须叠加SOC积分和功率限幅。我在前面提到过SOC影响可调范围这一约束在AGC层同样不能省略。电动汽车接入AGC需要建立聚合模型而不是单车模型。一辆车3到7kW在区域级AGC里几乎没影响必须聚合到几百辆甚至上千辆。聚合模型里要设置可调度车辆数、单桩最大功率、当前聚合SOC、通信延迟等参数。Simulink里的EV链路一般是AGC分配指令先进一阶惯性再进Transport Delay模拟通信和聚合商的执行时延最后经过上下限输出到功率平衡节点。EV还有一层更现实约束不能把所有充电负荷都当作可调度资源。参与调频的车辆比例一般只有20%到30%并且要优先保证车辆按计划充满。这些参数放进模型后你会发现EV在AGC里的调节空间并没有想象中那么大。5. AGC层里风机、储能和电动汽车的特殊约束别让模型骗了你5.1 风机在AGC里的出力增量从哪来风机在MPPT状态下没有上调空间想参与AGC就必须提前减载运行。比如把功率指令限制在可用功率的90%预留10%备用AGC指令升高时把这部分备用释放出来。但在实际风速下可用功率本身一直在变所以风机能不能响应AGC指令取决于指令值是否超过当前可用功率。我在模型里把风速做成随机波动序列P_avl由风速曲线换算得到风机实际出力等于min(AGC指令, P_avl)加上一次调频附加量。这样做之后AGC指令超过可用功率时你会清楚看到风机实际出力跟不上频率恢复变慢。如果不加这个约束模型会得出风储联合完美跟踪AGC的过于乐观结论这在实际中是做不到的。风机的另一个约束是变桨系统速度。变桨执行机构有机械惯量功率上调速度会受限制。简化模型里用一个Rate Limiter就能近似极限速率可以查风机厂家资料一般直驱风机在MPPT附近增减载的速率远低于火电但也不是无限快。5.2 电动汽车聚合模型的SOC分布问题在AGC模型里EV最麻烦的不是功率动态而是SOC分布。一个聚合体里有不同初始电量的车有的车快满了有的车快空了。V2G放电时SOC低的车不能继续放电有序充电时SOC高的车也不能继续充电。仿真中比较实用的做法是用两个状态量分别统计聚合体的可充电容量和可放容量。可放电量用初始可放电量减去累积放电量可充电量用初始可充空间减去累积充电量。这两个状态量作为限幅条件接入EV输出环节。我最早做这个模型时偷懒没加SOC分布约束结果仿真里EV持续放电数小时频率还能稳定在额定值附近这显然不符合现实。加完约束之后EV的调节能力会随着时间推移衰减反而更接近实际情况。5.3 储能SOC约束对AGC控制的影响储能电池的可用功率不是常数。SOC在高位和低位时同样的功率指令可能根本无法执行。简单模型可以只加上下限但想更贴近实际我建议用一维Lookup Table描述可用功率随SOC变化的曲线SOC在0.1到0.2区间放电能力线性下降到0SOC在0.8到0.9区间充电能力线性下降到0中间区间保持额定功率。这个曲线在Simulink里实现很简单用Lookup Table模块输入SOC输出功率限制系数再乘上额定功率作为该时刻的限幅值。AGC的储能通道经过这个动态限幅后控制器的积分器也要做对应的抗饱和处理否则储能满功率指令被限幅吞掉积分器还在累积系统响应会拖得很长。我在这里要特别强调一点储能SOC和EV可调度容量这两个约束直接影响AGC仿真结论的可信度。如果你只是在做方法演示可以不加如果文章或课题结论涉及储能需要配置多少容量EV能提供多少调节能力这两个约束必须进模型。5.4 关于风光火储加EV联合AGC的一个现实提醒仿真跑起来是一回事工程落地是另一回事。真实AGC系统还要考虑机组组合、经济调度、联络线计划、AGC指令周期通常4到8秒等大量上层逻辑。Simulink里这套模型适合评估各资源的调节能力够不够、参数配合是否合理不适合复刻完整的调度系统。我在模型里会把各资源的AGC增量信号分别送到To Workspace便于仿真结束后画图看谁承担了多少调节量。这个习惯帮我发现过很多问题比如某次仿真里水电机组一直顶着上限火电几乎没有参与最后查下来是AGC分配系数里水电权重设得太大。把每个资源的出力轨迹导出来看就非常直观。6. 参数整定、仿真步长和常见坑我实测过的那些问题6.1 一套可用的典型参数下面这组参数是我在1000MVA基准系统里常用的初始值适合研究性质仿真。使用你的实际机组数据时需要按铭牌参数替换参数数值说明系统额定容量 S_B1000 MVA标幺计算基准惯性常数 H4 s系统等效转动惯量负荷阻尼系数 D0.015 p.u.频率变化1%对应负荷变化0.015 p.u.火电调差系数 R_th0.04下垂增益1/R25水电调差系数 R_hydro0.03比火电更陡风机虚拟惯量增益0.5~1.5 s等效惯性时间常数风机下垂增益0.05折算后限制附加功率不超过10%P_n储能响应时间常数0.1 s一阶惯性储能功率限幅±20 MW按PCS容量设定电动汽车聚合功率限幅±10 MW参与率取30%AGC控制器PI参数Kp0.2, Ki0.1需按系统闭环整定这组参数不是万能药。换一个系统容量或者换一套电源结构AGC的PI参数基本都要重新整定。整定方法不复杂先给一个小阶跃扰动观察频率恢复时间和超调量Kp过大会导致振荡Ki过大会导致恢复时间拉长甚至不稳定。6.2 仿真步长与数值稳定性频率响应级模型的时间常数跨度很大储能0.1秒火电几十秒AGC积分上分钟级。如果采用固定步长为了让最快环节稳定步长要压缩得很小仿真时间会变得很长。我建议用变步长求解器比如ode15s这类适合刚性系统的算法。加入Dead Zone、Saturation、Transport Delay之后模型容易出现高频抖动或者代数环警告。Dead Zone造成的不连续会让变步长求解器在穿越死区边界时把步长压得极小现象就是仿真速度突然变得特别慢。处理办法是给死区输出加一个很小的惯性时间常数把不连续信号平滑掉。Transport Delay在变步长模式下会增加状态记忆如果延迟时间设置不恰当也可能导致求解器误差过大需要留意仿真步长上限。另外提一个和调频无关但Simulink常见的坑如果你用Bus信号传输数据在Bus Selector里看不到可选信号十有八九是信号线没真正连到Bus Creator或者Bus对象没有在模型中保存。这类小问题会浪费很多排查时间。6.3 死区、限幅和积分饱和的坑一次调频死区是必须加的。火电机组调速器死区一般取±0.033Hz储能可以更小甚至不加但为了防止频繁动作我也会给储能留一个小死区比如±0.02Hz。在Simulink里Dead Zone模块直接就能设置但要注意它带来的数值不连续。限幅和限速的顺序也容易出错。我的经验是先限幅再限速或者只用一个Rate Limiter负责速率、一个Saturation负责幅值二者串联时顺序要有明确逻辑。如果先限速再大幅限幅指令变化速度本身就被限制住了限幅只是截断看起来也能跑但逻辑上并不严谨。积分饱和是AGC模型里最隐蔽的问题。AGC控制器和机组内部如果有积分器就都要考虑抗饱和。Simulink的PID Controller模块自带back-calculation推荐直接用它。我自己搭的早期版本没做抗饱和大扰动后频率出现一个莫名其妙的反向冲量查了很久才定位到是AGC积分器在饱和退出时的累积输出。6.4 怎么验证模型正确性验证模型是否正确比搭建本身更重要。我通常按下面几个步骤做第一步关闭风机、储能和AGC只保留水火机组和负荷阶跃对比稳态频率偏差和理论公式计算结果偏差在5%以内说明基础频率响应模型建对了。第二步开启AGC观察稳态时频率偏差是否趋于0ACE是否归零AGC总出力是否等于负荷扰动总量。第三步加入储能和风机虚拟惯量观察频率最低点nadir是否相比纯水火系统有明显改善如果没改善大概率是附加控制的增益或者时间常数设错了。第四步把各资源出力存到工作区检查每个时刻功率平衡方程是否成立用摇摆方程逐点回代验证这一步能抓到很多隐蔽问题。这套验证流程我每次建模都会跑一遍虽然费一点时间但能省下后面分析阶段的大量返工。做这类含多个电源的调频仿真我最大的体会是难点从来不是把Simulink模块拖出来连线而是把每个资源的物理约束想清楚。风机备用来不及释放、储能SOC边界、EV通信延迟、水电水锤效应任何一个被忽略仿真结果都会在某个角落悄悄失真。如果你也是刚接触这个方向我的建议是先跑通纯水火加AGC的模型深刻理解一次调频和AGC之间的配合关系再逐步把风机、储能、光伏和电动汽车叠加上去。每一步都验证一次最后合到一起时你的模型一定比一上来就堆五个资源要可靠得多。