真正上手做过配电网电压调节的人,应该都体会过这种感觉:分布式电源出力一波动,末端电压先是往下掉,然后某个时段又突然往上顶,传统无功补偿设备根本反应不过来。我最近在Matlab环境里做的这个课题——控制分布式微发电机的无功功率注入来调节配电网络电压,就是在IEEE56节点网络上跑通了一套完整的调节机制。写这篇笔记,权当给同样被电压越限折磨的同学留一份操作参考。
这套方案说简单也简单,核心就是把分布式微发电机当作可以连续调节的无功源,通过改变它们的无功功率注入值,把全网电压拉回合格范围。但真做起来,里面涉及潮流计算、电压无功灵敏度、逆变器容量约束、迭代收敛判断这一整串问题,每一步都有细节。IEEE56节点规模适中,不会大到跑一次仿真等半天,又能体现出多点接入、多馈线耦合的复杂性,很适合用来验证这类控制策略。我下面会从问题背景、技术原理、Matlab实现、常见坑位四个层面展开,尽量把能复现的东西都写出来。
1. 项目到底在解决什么问题
1.1 分布式电源接入后的电压越限,不是凭空出现的
传统配电网是单电源系统,潮流从变电站母线往负荷方向单向流动,电压沿着馈线从高到低逐渐下降。这种场景下,调节手段很简单:有载调压变压器调整整体电压水平,线路并联电容器补偿无功,容量一旦满足运行方式基本就够用了。
分布式电源接入后,事情变了。发电功率就地注入,负荷附近有了额外的有功来源,部分节点电压被抬高;当分布式电源出力大于本地负荷,多余的有功还会倒送,使整条馈线的电压分布不再单调递减。更麻烦的是,分布式电源出力是时变的,比如光伏在中午猛出力,傍晚急剧下降,电压曲线跟着剧烈波动。我曾经用IEEE56节点系统做过一组典型场景测试:如果分布式电源在20个节点同时接入并满出力,晚间轻负荷时段,约有三成节点电压会越过上限;而大负荷且电源低出力时,末端节点电压又会接近下限。这个结果并不夸张,实际工程中甚至更严重。
这类电压问题靠传统的变压器抽头和电容器组很难解决,因为传统设备调节速度慢、调节级差大,而且通常只装在变电站或馈线首端,对远端节点电压鞭长莫及。分布式微发电机恰恰分布在全网的各个位置,如果能利用它们的无功功率注入能力,就相当于在系统里布置了大量分散的、响应速度快的连续可调无功源。
1.2 为什么把无功功率注入当成调节手段
电压与无功的强耦合关系,在电力系统分析中是个常识,但配电网里这个关系更微妙。简单理解:线路电抗上的电压降落和流过的无功功率强相关,增大无功注入,会提升线路近端电压;吸收无功,则会拉低电压。输电网里线路电抗远大于电阻,这个关系非常显著;配电网虽然电阻占比高,无功和电压的耦合依然存在,只是调节效率没有输电网那么高。
分布式微发电机大多通过逆变器并网,逆变器的无功输出可以连续调节,这给了我们一个很灵活的调节手段。只要逆变器剩余容量足够,就可以在一定范围内发出或吸收无功,相当于在每个电源节点附近装了一个可控的动态无功源。这个思路比单纯切电容器组平滑得多,也比变压器调档快得多。
正是因为无功和电压之间的这种耦合关系,研究才聚焦在"控制无功注入来调节电压配置",而不是直接控制有功。有功调节当然也能影响电压,但分布式电源的有功出力首先受一次能源约束,不可能为了电压而随意丢弃发电,调节空间和代价都不合适。无功不同,它不消耗一次能源,逆变器容量余量就是调节边界,天然适合作为电压调节手段。
1.3 为什么选IEEE56节点系统做验证
有的同学会问,做配电网电压研究,为什么不用更常见的33节点或123节点?我个人的体会是,IEEE56节点是一个很特殊的测试系统。它的规模比33节点大不少,包含多个电压等级、多条馈线分支和若干变压器支路,结构复杂度更接近实际配电网;同时又比某些数百节点系统小很多,在Matlab里做潮流迭代和灵敏度计算,单次仿真的耗时完全在可接受范围内。
更重要的是,56个节点提供了足够多的"接入位置"选择。分布式微发电机应该接在哪、接入多少,这类问题在这个规模下可以充分展开。比如可以让10台、15台或者20台微发电机接入不同位置,观察它们之间的无功耦合和相互影响。节点太少容易看不出协调控制的价值,节点太多又容易把问题淹没在计算细节里。IEEE56节点正好处在一个"能说明问题又不至于把人绕晕"的平衡点上。此外,该系统的数据是公开标准化格式,不同文献之间容易对照,这对验证自己实现代码的正确性非常有用。
1.4 项目要做的事,用大白话概括
如果剥掉学术包装,这个项目要做的事情其实可以归纳成三句话:
- 在IEEE56节点系统里搭建一个配电网模型,接入若干分布式微发电机;
- 计算当前运行状态下全网电压分布,判断哪些节点电压越限;
- 改变各分布式微发电机的无功功率注入,让所有节点电压回到合格范围,同时尽量少浪费无功调节资源。
流程跑通后,可以从几个维度扩展:负荷变化场景下电压是否始终合格、多台微发电机之间如何分配无功最合理、逆变器容量有限时优先调节哪台机器,诸如此类。
2. 核心技术思路与方案选型
2.1 配电网电压调节的物理基础:电压无功灵敏度
要把无功注入和电压偏差建立定量关系,就要引入电压无功灵敏度。这个概念可以理解成:某节点无功功率改变一个单位,各节点电压相应变化多少。它不是一个固定常数,而是由当前运行点处的网络状态决定的,来源是潮流方程在运行点处的偏导关系。
用牛顿-拉夫逊潮流里现成的雅可比矩阵能很方便地提取这个关系。潮流方程中,有功偏差对相角和电压幅值有偏导,无功偏差对相角和电压幅值也有偏导。我们要用的是无功对电压幅值的那一部分,即dQ/dV。线性化处理后,电压变化和无功变化之间的关系近似为:
[ \Delta V = S_{qv} \cdot \Delta Q ]
其中S_qv就是电压无功灵敏度矩阵。有了这个矩阵,给定一个目标电压修正量,就可以反推需要多少无功注入。
在辐射状馈线场景下,这个问题有一个更直观的近似表达。简单两节点线路中,忽略对地导纳并假设电压接近额定值,无功功率变化与电压降落的关系可以写为:
[ \Delta V \approx \frac{X}{V} \cdot \Delta Q ]
也就是说,单位无功功率引起的电压变化比例大约等于线路电抗除以当前电压。这个式子虽然是简化版,但用来估算"某台微发电机的无功能抬升多少电压"非常实用。实际代码中我用雅可比矩阵求精确灵敏度,再用这个简化公式做合理性检查,两者对照,能发现不少建模错误。
2.2 分布式微发电机的无功可调边界
在实际系统中,分布式微发电机并非想要多少无功就有多少。逆变器有容量上限,而且有功出力会挤占无功调节空间。设逆变器视在容量为S,当前有功出力为P,那么无功的可调范围是:
[ Q \in \left[- \sqrt{S^2 - P^2},; \sqrt{S^2 - P^2}\right] ]
这个边界是代码里必须处理好的。仿真中如果不加约束,算法很可能算出一个超出逆变器能力的无功指令,导致实际无法执行。更隐蔽的问题是,不同节点的微发电机有功出力不同,剩余无功容量差异很大。有功出力高的机器,无功调节空间小;有功出力低的机器,调节空间大。如果分配策略不区分这些差异,很容易出现部分逆变器越限、另一部分却还有大量余量的失衡状态。
我在做约束处理时采用了"检查-钳位-校验"三步:先按照灵敏度计算结果给出无功修正量,逐一检查是否超出逆变器容量;超出的值就地钳位到边界,不超出再参与下一步迭代;更新后重新计算潮流校验电压。这样既保证了计算结果的物理可实现性,也避免了把不可行方案拿去反复迭代浪费计算资源。
2.3 就地控制与集中式控制的取舍
分布式无功控制大致分两类思路:就地控制和集中式控制。
就地控制的核心是各分布式微发电机根据本地电压偏差,按照预设的斜率自动增加或减少无功输出,类似发电机励磁系统的调差特性。它不依赖通信网络,响应快、实现简单,适合分布式电源分散接入、通信条件有限的场景。缺点也很明显:本地电压正常不等于全网最优,并且多台机器可能对同一电压问题产生过度响应,造成无功振荡。
集中式控制则是由中间层采集全网电压信息,统一计算出各台微发电机的无功指令后下发。它考虑的是全局信息,能够更好地协调各节点的调节量,避免过度调节和调节打架。缺点是对通信和计算速度要求较高,一旦通信延时或中断,控制效果会显著下降。
在这个项目里,我采用的是"集中式计算加迭代校核"的框架,原因很简单:IEEE56节点规模不大,全网信息采集在仿真中不是瓶颈,而集中式协调能更直观地展示无功注入和电压配置之间的全局关系。实际工程落地时,往往需要在两种思路之间取折中,比如分层分区控制,这一点我在后面扩展方向里还会提到。
2.4 目标函数怎么设才合理
电压调节不是把电压拉回合格范围就完事,还要考虑调节代价。如果所有微发电机都不计后果地猛发无功,电压固然能稳定,但无功在线路上来回流动会造成不必要的网损,还可能让部分逆变器长期满载,影响寿命。因此需要设定一个目标函数,把调节代价考虑进去。
我用的目标函数是电压偏差和调节量的加权最小化:
[ \min \quad \sum_{i \in N} w_v (V_i - V_{ref})^2 + \sum_{j \in DG} w_q (Q_j - Q_{j,0})^2 ]
其中w_v和w_q分别是电压偏差权重和无功调节权重。电压权重越大,系统越倾向于把电压拉回到参考值附近;无功权重越大,系统越倾向于少调节。两者的平衡决定了最终控制行为。仿真里我先把电压权重设大,保证电压合格是第一目标,再逐步增大无功权重,找到在保证合格前提下的最小调节量。这种两阶段调试法比一开始就设定某个复杂权重要直观得多。
目标函数设好之后,求解可以采用迭代灵敏度法,也可以调用优化工具箱。项目里两种方式我都试过,结论是:对56节点这类规模,迭代灵敏度法已经足够,而且每一步的物理含义非常清楚;优化工具箱适合后续加更多约束的场景,比如支路过载、变压器容量等,但可解释性稍差。
3. Matlab仿真建模完整流程
3.1 准备工作:明确需要哪些数据
开始写代码前,先列一份数据清单,能少走很多弯路。
- 节点参数:节点编号、节点类型(平衡节点、PQ节点、PV节点)、有功负荷、无功负荷、电压基准值;
- 支路参数:首末端节点编号、电阻、电抗、对地电导、变压器分接头变比;
- 微发电机参数:接入节点、有功出力、逆变器容量、无功初始值及上下限;
- 系统基准容量和基准电压。
IEEE56节点系统的数据获取和处理是最容易出问题的一环。公开数据包里的单位往往不统一——有功功率可能是兆瓦,也可能是千瓦;阻抗可能是标幺值,也可能是欧姆;变压器变比有的按标幺值给出,有的按实际电压比给出。我处理数据时的原则是:不管原始数据长什么样,一律先转成统一的标幺值系统。基准容量取100MVA,各电压等级分别取对应的基准电压,所有支路阻抗、节点功率都换算到这一套基准下。转换完成后,用功率平衡检查一下:全网注入功率之和应该等于全网负荷之和加上网损,偏差超过千分之一就说明数据有误。
3.2 IEEE56节点数据的建模与校验
拿到节点和支路数据后,第一步是根据支路参数构建节点导纳矩阵Ybus。这是所有潮流计算的基础,也是后续灵敏度分析的起点。Matlab里构建Ybus有固定套路:先初始化为稀疏矩阵,遍历每条支路,在首相端节点累加支路导纳和充电导纳,在末端节点做同样处理,首末之间填入负的互导纳。涉及变压器支路时,要把变比考虑进去,非标准变比会改变自导纳和互导纳的数值,这个细节很容易漏。
构建完Ybus之后,我习惯先做一个静态检查:
Ybus对角线元素是否和非对角线元素符合物理关系;- 所有节点是否都有支路连接,有没有孤立节点;
- 功率基准转换后,全网有功无功是否大致平衡;
- 变压器支路的变比方向是否和支路方向一致。
这几项检查能过滤掉绝大多数数据错误。实际项目中我试过直接拿未经校验的数据去跑潮流,结果怎么调都不收敛,最后发现是一条支路的首末节点编号反了,导致导纳矩阵完全错误。数据校验这一步虽然枯燥,但价值极大,值得在正式潮流计算前认真做一遍。
3.3 牛顿-拉夫逊潮流计算的核心实现
配电网潮流计算有专门的算法,比如前推回代法,但对IEEE56节点这种含环网和变压器的系统,牛顿-拉夫逊法更通用,收敛性也更好。我直接在Matlab里实现了标准牛顿-拉夫逊潮流,整个流程分为以下几步:
- 确定节点分类:平衡节点、PQ节点、PV节点;
- 初始化电压幅值为1.0,相角为0;
- 根据当前电压相角计算有功和无功偏差;
- 构建雅可比矩阵;
- 求解修正方程,更新电压幅值和相角;
- 检查偏差是否小于收敛阈值,不满足则回到第3步。
核心迭代代码的骨架大致是:
for iter = 1:max_iter [P_calc, Q_calc] = power_balance(Vm, Va, Ybus); mismatch = [P_spec - P_calc; Q_spec - Q_calc]; if max(abs(mismatch)) < tol break; end J = build_jacobian(Vm, Va, Ybus); dx = J \ mismatch; Va = Va + dx(1:n_bus); Vm = Vm + dx(n_bus+1:2*n_bus); end需要强调的是,雅可比矩阵必须用稀疏矩阵存储和求解。Matlab里Ybus本来就该用sparse构建,雅可比相关计算也尽量利用稀疏性质。56节点系统还谈不上计算压力,但后续如果扩展到数百节点,稀疏化能显著加快计算速度。收敛阈值我取1e-8,实测在多数场景下迭代5到8次就能收敛,效率完全够用。
3.4 无功调节仿真流程的整体搭建
潮流传好了,接下来就是无功调节的闭环流程。整套仿真我把它组装成主循环,核心逻辑是"潮流-灵敏度-计算无功修正-更新无功-重新潮流校验":
% 初始潮流,得到基态电压 [V_base, P_base, Q_base] = run_powerflow(system_data, dg_data); for step = 1:max_steps % 判断电压是否全部合格 if all(V_base >= v_min) && all(V_base <= v_max) break; end % 提取电压无功灵敏度矩阵 S_qv = compute_sensitivity(Jacobian, dg_nodes); % 根据电压偏差计算所需的无功修正量 dQ = calculate_q_injection(V_base, V_ref, S_qv); % 叠加到当前无功指令上,并钳位到逆变器容量范围 dg_data.Q = max(Q_min, min(Q_max, dg_data.Q + dq_update)); % 重新做潮流计算 [V_new, ~, ~] = run_powerflow(system_data, dg_data); V_base = V_new; end这个循环里面的关键点是第二行的电压合格判断。不能只判断当前时刻,因为无功调节可能让某些原本合格的节点越限。最稳妥的做法是每次更新后都重新潮流,再重新判断全网电压分布。有些资料为了省计算量,只判断目标节点的电压,这种简化在小系统上没问题,但可能漏掉非目标节点的新越限,扩展场景时会出问题。
4. 无功调节实现步骤与核心代码
4.1 电压无功灵敏度矩阵的精确求取
灵敏度矩阵是整套控制逻辑的数学核心。在牛顿-拉夫逊潮流过程中,雅可比矩阵已经包含电压和无功的偏导关系。具体地说,雅可比矩阵的分块形式是:
[ ΔP ] [ J1 J2 ] [ Δθ ] [ ΔQ ] = [ J3 J4 ] [ ΔV ]我们需要的电压无功灵敏度对应J4分块,即dQ/dV。但有两点要注意。
第一,J4的维度和节点类型有关。PV节点的无功方程不参加迭代,平衡节点的电压幅值和相角固定,所以在构建灵敏度矩阵时必须剔除这些节点对应的行列。如果分布式微发电机在模型中作为PV节点处理,它对应的行自然也被剔除了,这会导致无法直接得到这台发电机对电压的灵敏度。因此我在控制模型中的通用做法是,先把这个微发电机节点当作PQ节点处理,让它有一个明确的无功变量参与计算,得到灵敏度后再通过迭代调节这个无功变量。换句话说,控制模型和模型初值有时不是一回事,需要在代码里区分清楚。
第二,直接对J4求逆在很多情况下不是最优解。56节点规模还行,但为了代码能顺利迁移到更大系统,我建议用mldivide(也就是\)来解线性方程,而不是显式求逆。比如要求解某台微发电机单位无功注入对全网电压的影响,就解一个形如dQ = J4 * dV的方程组,直接让每台微发电机所在位置作为右端项,返回对应的电压增量即可。
4.2 调节量计算与迭代更新的原则
有了灵敏度矩阵S_qv,理论上的调节量可以直接由电压偏差反推:
[ \Delta Q = S_{qv}^{-1} \cdot (V_{ref} - V_{meas}) ]
但在实际工程中,直接一次算出最终调节量是非常危险的做法。原因在于,灵敏度矩阵只是当前运行点处的一阶近似,当无功变化量较大时,运行点偏移后灵敏度本身也会变化,一阶近似会失真。如果一次调节过大,轻则超调,重则把系统推到另一个不可行的运行状态。
稳妥的做法是"小步走、多迭代"。每次只取目标电压偏差的一部分进行校正,比如取20%到30%,然后重新潮流计算,观察电压变化。这样做的代价是迭代次数增加,但每一轮都在更新灵敏度矩阵,结果的可靠性和收敛性都好得多。我把这个比例叫做"校正步长系数",它和两个因素相关:系统越重载,步长应该越小;无功调节空间越宽裕,步长可以适当加大。实际调试中,我从0.2开始试,逐步增大,直到电压曲线开始出现震荡,然后退回震荡前的那个值。
这里还有一个优化分配的问题。多台微发电机同时参与调节时,同样的电压偏差可以由不同组合的无功注入来消除。我的处理策略是,先计算各台微发电机对越限最严重节点的灵敏度,优先使用灵敏度高的机器,也就是距离电气位置更近、影响更大的那些机器。超过容量后,剩余偏差再由灵敏度次高的机器承接。这种贪心策略虽然不是全局最优,但物理意义清楚、计算量小,而且在实际运行中符合"就近补偿"的直觉。
4.3 典型仿真场景的结果观察
我用设计场景的方式验证了整套代码的有效性。场景设置如下:IEEE56节点系统负荷取基准负荷的80%,在预先选定的10个节点接入分布式微发电机,每台逆变器容量取2MVA,有功出力按额定容量的60%考虑。基态潮流结果显示,变电站母线附近节点电压偏高,部分远端节点电压偏低,最大电压偏差约为额定值的7%。
投入无功调节后,每轮迭代记录全网最大电压偏差、最小电压偏差以及总无功注入量。迭代到第3轮时,全网电压已全部回到合格范围;到第5轮,电压分布趋于平稳。从结果曲线上看,越限最严重的末端节点电压被抬升了约5%,而原本偏高的近端节点电压几乎没有恶化,这正体现了多节点无功协调的价值——它不只是提升局部电压,而是在全局范围内重新塑造电压断面。
为了验证调节结果的合理性,我还做了一个反向检查:把调节后的无功注入量清零,重新跑基态潮流,确认电压恢复到调节前的状态。这个检查确保整个仿真过程没有积累数值错误,灵敏度矩阵的计算和迭代更新逻辑是自洽的。
4.4 整段代码的模块划分
我习惯把整段仿真拆成几个独立模块,每个模块对应一个功能,方便单独调试:
load_case_data.m:读取IEEE56节点数据,统一转换为标幺值,生成bus、branch、gen结构体;build_ybus.m:根据支路参数构建节点导纳矩阵;nr_powerflow.m:实现牛顿-拉夫逊潮流,返回电压、功率等运行状态;compute_sensitivity.m:在潮流收敛的运行点处,计算电压无功灵敏度矩阵;calculate_q_update.m:根据电压偏差和灵敏度计算各微发电机的无功修正量;apply_q_limit.m:将无功指令钳位到逆变器容量边界;plot_voltage_profile.m:画电压分布曲线,辅助结果分析。
这种模块化设计的好处是,调换控制策略时不需要动潮流计算部分,只需要替换calculate_q_update.m和apply_q_limit.m两个文件的内容。我在后续做不同控制策略对比时,切换成本几乎为零。
5. 实操中那些容易踩的坑
5.1 数据问题导致潮流不收敛
这个坑出现的频率最高,而且表现形式非常迷惑。明明程序逻辑没毛病,潮流就是不收敛,或者收敛到离谱的电压值。排查顺序我建议按这个来:
第一,检查功率单位。原始数据里节点负荷如果混用兆瓦和千瓦,转换后功率不平衡,潮流收敛不了。统一用标幺值后,全网功率偏差应该在很小的范围。
第二,检查支路参数的方向。特别是变压器支路,变比的正反方向错了,等效阻抗就完全不一样。IEEE56节点数据里变压器支路比较多,首末端方向不统一是常见问题。
第三,检查初值。电压初值不能设成0,否则雅可比矩阵奇异,直接求解失败。标准做法是把所有PQ节点电压设为1.0,相角设为0。
第四,检查负荷功率的符号约定。有些数据把负荷记为正,有些记为负,符号错会导致负负荷建模,系统出现莫名其妙的功率源。
调潮流不收敛时,我还有个笨办法:把负荷缩小十倍再跑,如果能收敛,说明系统的数值条件没有问题,问题多半出在数据本身;如果缩小负荷还不收敛,再往Ybus构建逻辑上找原因。
5.2 无功调节过调导致电压反转
这是个非常典型的问题。调节迭代次数多了以后,某些节点电压不但没往合格范围走,反而越过目标值,往相反方向跑了。出现这种情况,绝大多数原因是校正步长太大。
灵敏度线性化的适用范围是有限度的。当某台微发电机无功注入变化量很大时,运行点已经明显偏移,用原来的灵敏度去计算新的调节量必然不准。解决手段无非两种:调小校正步长系数,或者增加迭代次数。我调试时的经验是,如果发现某轮迭代的最大电压偏差不降反升,首先把校正步长系数减半,重新跑一轮看趋势。连续两轮都振荡,说明步长至少应该减到当前值的四分之一。
另一个导致过调的原因是目标电压设置得不合理。如果把所有节点都往同一个参考电压上拉,远端和近端节点会同时争抢无功资源,造成调节量互相作用、难以收敛。更符合实际的做法是设定一个电压合格区间,只把越限节点修正到区间内,而不是设定一个精确的参考点让所有节点都去靠拢。这样调节压力小,收敛性也更好。
5.3 逆变器容量约束处理不对
无功调节计算出来的是一个带符号的数值,正值表示发出无功,负值表示吸收无功。在做容量钳位时,必须分别考虑正负两个方向的上限。很多初学者的代码里只检查了绝对值大小,忽略了这个细节。
举个例子,某台逆变器额定容量1MVA,有功出力0.8MVA,剩余无功容量是正负0.6Mvar。如果计算出的无功指令是负0.7Mvar,也就是要吸收0.7Mvar无功,这时不能简单钳位到负0.7,而应该钳位到负0.6。符号和方向搞混,会导致代码里看起来"已经限制了容量",实际却依然发出超限指令,最终电压结果完全失真。
钳位后的另一个关键步骤是更新功率平衡。无功指令变了,微发电机在PQ节点模型里的注入功率就要同步更新,再重新跑潮流,否则潮流计算里用的还是旧的无功值,电压结果自然不对。
5.4 PV节点与PQ节点的身份切换困扰
对很多入门者来说,这个坑比较隐蔽。分布式微发电机如果被建模成普通负负荷,也就是PQ节点,那它天然带一个固定的无功值,无功注入可以直接控制。但如果把它建模成PV节点,潮流计算里它会自动维持节点电压恒定,也就是"电压由系统决定",无功变量不再受你的指令控制。这两种模型在物理上对应不同控制模式,代码里不能混着用。
做无功调节研究时,我建议建模阶段就把微发电机当作PQ节点处理,或者预留一个切换开关。实际算例中,有些研究生把电源建模成PV节点,然后试图命令它输出指定无功,结果发现代码一动不动,就是这个原因。如果希望模拟某台微发电机的电压控制模式,可以用外部电压调节环来更新无功指令,而不是直接把它设成PV节点让潮流去算。
5.5 仿真结果可信度的自检
仿真跑出漂亮曲线不等于结果是可信的。我每次做完一组算例,都会做三个自检:
第一,基态潮流结果和公开文献对照。IEEE56节点的标准基态电压分布在文献里有过多次报道,量级和趋势必须一致。如果偏差很大,先不要急着做无功调节,回头查数据。
第二,灵敏度符号检查。增加某节点无功注入,应该提升该节点和附近节点的电压幅值,也就是灵敏度矩阵对角线元素应为正值。如果出现负值,说明雅可比矩阵构建有问题,或者模型里有异常支路。
第三,把最终调节结果里的全网无功功率总和手动核算一遍,看是否满足功率平衡方程。很多代码在迭代过程中慢慢积累了数值误差,这个检查能兜住最后的底线。
6. 调参之外的几点体会
做这个项目的过程中,我最大的体会是:电压调节看起来是一个控制问题,根子上却是一个建模和数值计算问题。控制策略再好,建立在错误的潮流结果或错误的灵敏度矩阵上,出来的一定是错误结论。所以我一直强调数据校核和结果自检,这不是浪费时间,而是保证后续所有分析可信的前提。
第二个体会是,不要迷信复杂的优化算法。在很多情况下,灵敏度迭代加合理的步长控制已经能解决绝大多数配电网电压问题;智能优化算法确实能找到更全局的解,但在实际系统中,通信和控制执行的代价往往比那一点优化收益更值得关注。项目把这个课题命名为"控制分布式微发电机无功注入调节电压配置",重点在"控制"和"调节"而不在"优化",说明研究方向本质上还是一个工程控制问题,而不是纯数学问题。
如果后续继续扩展这个项目,我会考虑三个方向。一是加入变压器分接头联合调节,把有载调压和无功注入的配合策略做进去,更接近实际调度场景。二是改成分布式迭代控制架构,让各台微发电机只交换相邻节点的信息就能完成协调,降低对中央控制器的依赖。三是把三相不平衡因素加进模型,因为实际配电网三相负荷并不平衡,电压调节也要按相别分别考虑。到那时候,Matlab代码的框架还能复用,主要是雅可比矩阵和灵敏度矩阵需要改造成三相序分量形式。希望这套经验对正在做类似课题的你有帮助。