ARTICLE DETAIL

资讯详情

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

交直流混合配电网潮流计算:Matlab统一求解法实现与模型详解

交直流混合配电网潮流计算:Matlab统一求解法实现与模型详解 交直流混合配电网的潮流计算这几年确实是配电方向的一个热点。搞过配电网的人都知道传统交流潮流那一套节点类型、功率方程、迭代求解已经有一套非常成熟的路子了。但问题是现在新型配电系统里直流负荷、分布式光伏直流汇集、储能、电动车充电桩越来越多很多项目已经不再是一个纯交流网络了。遇到这种交直流混合的网络如果还只拿交流潮流的思路去套很可能会出问题——直流网络跟交流网络之间通过换流器耦合功率怎么分配、电压怎么配合这些都需要重新建模。我最近正好把一个交直流混合配电网的潮流计算程序用Matlab完整实现了一遍用的方法是统一求解法也就是把交流网络方程、直流网络方程和换流站方程全部放在一个大的非线性方程组里统一迭代求解。整个代码跑下来结果稳定跟交替求解法相比迭代次数和收敛性都有明显优势。这篇文章就把整个实现过程、核心原理、Matlab代码架构和调试经验做一个完整复盘希望能给正在搞配电网仿真的朋友一些参考。1. 为什么潮流计算要专门处理“交直流混合”场景1.1 新型配电网正在从纯交流走向交直流混合先说说背景。传统的配电网基本上就是交流网络变电站降压出来一路交流馈线接各种交流负荷。潮流计算要解决的问题也很明确——给定网络拓扑、线路参数、负荷和电源的功率求解各个节点的电压幅值、相角以及线路上的功率分布。这是电力系统分析里最基础的题目之一现代配电网规划、运行、可靠性评估都离不开它。但到了现在的分布式电源高比例接入阶段配电网的形态已经悄悄变了。光伏直流输出、储能电池直流母线、直流快充桩、直流微电网越来越多的设备天生就是直流或者很容易在直流侧互联。如果强行把这些直流单元通过逆变器接到交流网络里一方面增加了换流损耗一方面也增加了控制的复杂度。所以在一些新建的园区配电网、直流建筑、光储充一体化项目里干脆专门拉一条直流母线形成一个交流子网和直流子网通过换流器连接起来的混合网络。这种网络一旦出现潮流计算就不能只算交流那一半了。交流侧和直流侧之间存在双向功率流动换流器本身有多少损耗、采取什么控制策略、直流电压能维持在什么水平这些问题都会影响整个网络的潮流分布。你总不能把换流器当成一个固定功率的负电荷一甩了之因为很多时候直流侧电压和交流侧无功是耦合在一块的必须联合求解。1.2 交直流混合网络给潮流计算带来的三个难点把问题具体化交直流混合配电网的潮流计算相比于传统交流潮流多了几个很有分量的难点。第一个难点是换流器的建模。换流器一般是VSC电压源型换流器在交直流网络之间扮演的是一个接口角色。它既能控制交流侧有功、无功也能控制直流侧电压或者有功。不同的控制模式下它的外特性完全不一样。要想把换流站写进潮流方程就得把它等价成一个可计算功率注入的节点模型这关系到整个方程组的形态。第二个难点是方程组维度和变量类型不一致。交流网络的状态变量是节点电压幅值和相角直流网络的状态变量只有节点电压没有相角这个概念而换流站还有自己的状态变量比如换流器出口电压的幅值和相角、直流电流、调制比等。把这些不同类型的变量统一到一个方程组里必须处理好变量顺序和方程平衡关系否则雅可比矩阵的拼装很容易出错。第三个难点是初始值敏感和收敛性。直流网络的方程相对“硬”对电压初值比较敏感。如果初值给得离谱牛顿法很容易发散。再加上换流站损耗是一个非线性项方程本身的形式更复杂对迭代算法的稳定性提出了更高要求。1.3 统一求解法为什么更适合处理交直流混合潮流业内主要有两条路线。一条是交替求解法也叫顺序求解法思路是把交流潮流和直流潮流分开算交流算完把换流器消耗的功率传给直流侧直流侧算完再回传交流侧迭代迭代直到收敛。另一条就是本文要讲的统一求解法思路是建立交流、直流、换流器联合方程统一用牛顿-拉夫逊法迭代。统一求解法的最大优势是收敛特性好。因为交流方程和直流方程本质上是通过换流器耦合的交替求解相当于人为把这个耦合关系“拆开”了两端的信息传递有延迟在重负荷或者直流控制模式切换的场景下容易出现振荡甚至不收敛。而统一求解法把耦合关系通过雅可比矩阵里的交叉项同时体现相当于把整个系统一次捏成一个整体进行Newton迭代收敛速度是二次的稳定性也好得多。代价就是方程更复杂程序实现难度更大特别考验建模功底和矩阵处理能力。但这些复杂度完全可以在Matlab代码层面管理好只要模块划分清楚调试起来反而不比交替法麻烦。2. 核心建模换流器方程与交直流接口处理2.1 VSC换流器的稳态方程我在代码里用的是电压源型换流器VSC模型。VSC在稳态下可以等值为一个理想的电压源串联一个等值阻抗再加上一个连接电抗器。换流器和交流母线之间通过换流变压器和电抗器相连换流器出口的基波电压可以通过PWM调制控制。写稳态方程的时候换流器与交流母线之间的有功、无功交换可以表示为$P_s U_s U_c \sin(\delta) / X$$Q_s (U_s^2 - U_s U_c \cos(\delta)) / X$其中$U_s$是交流母线电压$U_c$是换流器出口电压$\delta$是两者之间的相角差$X$是等效电抗。这个形式和输电线路两端功率公式几乎一样理解起来不困难。直流侧呢VSC的工作原理决定了它的直流侧功率和交流侧功率之间存在一个损耗差。理想情况下不考虑损耗两侧功率相等但实际中换流站的损耗不能忽略。常见做法是把损耗等效成一个与直流电流相关的二次函数$P_{loss} a b I_d c I_d^2$这个损耗模型在代码里作为换流站方程的一部分加入好处是效率高不用单独迭代损耗值。系数a、b、c可以根据实际换流器的损耗特性拟合没有实测数据时也可以取一个工程经验值比如a0.001b0.001c0.001标幺值效果也基本靠谱。2.2 四类控制模式与节点类型映射交直流混合潮流计算里换流站的控制模式直接决定了它在外特性上到底像PQ节点还是像PV节点。我实现了四种最常见的控制模式定有功、定无功控制PQ控制这种模式下换流站以给定的有功和无功与交流系统交换功率直流侧电压不控适合从直流侧向交流侧馈电的场景。定有功、定交流电压控制PV控制换流站控制交流母线的电压幅值无功由系统自动平衡。定直流电压、定无功控制这种模式下换流站负责稳定直流母线电压相当于直流网络的平衡节点。定直流电压、定交流电压控制双电压控制模式常用于多端直流系统中的主从控制。弄清楚控制模式之后才能正确给每个换流站指定对应的方程变量与平衡条件。这是整套程序最容易出错的地方后面会详细展开。2.3 统一求解法的方程组装思路统一求解法的核心是把所有子系统的方程整合为一个大的非线性方程组$F(X) 0$其中$X$包含了交流节点电压幅值和相角、直流节点电压、换流站各自的控制变量等$F$包含了交流节点的有功无功平衡方程、直流节点的功率平衡方程、换流站的接口方程和控制方程。在Matlab里实现的时候我建议不要试图把方程写成一个巨大的符号表达式然后再求雅可比那样既慢又不便于调试。更明智的做法是分开写出交流残差、直流残差和换流站残差三个函数模块然后在主程序中手工拼装雅可比矩阵或者用数值差分逼近。实际工程中数值差分往往比符号微分更省事尤其是在换流站损耗模型比较复杂的时候。我的代码里就是用数值差分来计算雅可比矩阵的虽然稍微损失一点计算效率但换来的是模块清晰、扩展容易。对一个典型的中型配电网来说节点数不过几十个计算时间完全可以忽略不计。3. Matlab代码整体架构与模块划分3.1 文件组织从数据输入到结果输出整个程序我拆成了六个主要脚本和函数文件每个文件的职责非常单一这样调试起来不用来回翻。main.m程序入口负责读取系统数据、设置初值、调用求解器、输出结果。network_data.m定义交流节点、交流支路、直流节点、直流支路、换流站参数。这个文件相当于数据文件改动案例时只需要调整这个文件。vsc_model.m换流站稳态模型给定换流器控制变量返回交流侧注入功率和直流侧注入电流。power_balance_ac.m计算交流网络的有功、无功不平衡量。power_balance_dc.m计算直流网络的有功不平衡量。hybrid_pf_solver.m核心求解函数组装全系统雅可比矩阵并调用牛顿迭代。实际跑的时候主要调整network_data.m和main.m即可其他函数基本不用动。3.2 节点编号方案与变量顺序约定这是统一求解法最容易翻车的地方。变量顺序一旦定下来后面所有矩阵拼装都要严格对齐。我在代码里采用如下的变量组织顺序变量向量 [交流节点的电压幅值去掉平衡节点; 交流节点的相角去掉平衡节点; 直流节点电压; 换流站控制变量]相应地方程残差向量也按照同样的分组方式排列。这样做的好处是雅可比矩阵可以看成四个大块对角线上的块是纯交流潮流方程和纯直流潮流方程对各自变量的偏导非对角线上的交叉项体现了换流站两端变量之间的耦合关系。这正是统一求解法的精髓所在。如果采用稀疏矩阵存储在很多情况下交叉项块的稀疏性也很漂亮不会给求解带来过多负担。3.3 雅可比矩阵组装的一个关键实现细节在拼装雅可比矩阵时我踩过一个大坑数值差分步长选得不合适导致牛顿迭代收敛精度不好。最后总结出来的经验是对不同类型的变量使用不同的差分步长电压幅值类变量步长取1e-6标幺值相角类变量弧度制步长取1e-5直流变量步长取1e-6标幺值。这个经验并不神秘核心原因就是各变量在方程中参与量级的自然差异。如果对所有变量统一用1e-6相角变量的偏导可能会因为数值噪音而轻微变形虽然多数情况下不影响最终收敛结果但在某些重负荷工况下会拖慢收敛速度。4. 求解流程、收敛判据与案例验证4.1 计算流程一个完整的牛顿迭代循环整个程序的求解循环分为六步根据初始电压和换流器控制变量调用vsc_model.m计算VSC注入交流侧和直流侧的功率/电流。分别计算交流节点功率不平衡量和直流节点功率不平衡量。检查最大不平衡量是否小于收敛判据如果是结束迭代输出结果。通过数值差分计算雅可比矩阵。求解线性方程组得到修正量。更新状态变量回到第1步。这套流程本质上跟传统潮流程序是一样的唯一多出来的就是换流站模型的调用环节。对熟悉传统潮流程序的开发者来说上手门槛低改动起来也非常明确。4.2 收敛判据与误差控制我在代码中采用的收敛判据是所有交流节点的有功、无功不平衡量绝对值均小于1e-6所有直流节点功率不平衡量绝对值均小于1e-6。单位是标幺值。这个精度对一般规划计算和运行分析已经完全足够了。实际跑起来典型工况下整个迭代只需要4到6次就能收敛到1e-10量级。如果初值给得合理统一求解法的二次收敛特性非常明显——迭代后期的误差几乎是指数下降。4.3 标准三端测试系统验证为了验证程序的正确性我搭了一个小型的交直流混合三端配电网算例交流33节点系统作为主干连接三个VSC换流站换流站直流侧通过一条直流线路互联成一个简单的直流网络。直流网络由两个汇流节点和三段直流电缆构成。在这个算例里我设定换流站1采用定直流电压、定无功控制换流站2和3采用定有功、定无功控制。初始情况下三端直流网络的电压全部设置为1.0标幺值。计算结果中直流母线电压由换流站1钳位在1.0标幺附近换流站2和3从直流侧吸收的有功功率与交流侧注入功率严格满足损耗方程。交流侧的电压分布和纯交流潮流计算结果在换流器零功率传输时完全一致这个交叉验证也说明了建模的正确性。我还特意对比了在同一算例下交替迭代法的表现。在一个工况较重的场景里交替法在迭代到30次左右时仍然在微幅振荡而统一求解法在第5次迭代就已经稳定收敛。这个对比结果让我对统一求解法的工程价值有了更直观的感受。5. 调试过程中的高频问题和处理办法5.1 雅可比矩阵维度对不上这是统一求解法实现中最常见的低级错误。变量个数必须和方程个数严格相等矩阵才能求逆。我自己的排查方法是在拼装矩阵之后打印矩阵的尺寸跟预期维度对一遍。如果维度正确再随机设置一个简单工况比如所有换流器传输功率为零此时交直流解耦矩阵应该退化为块对角的结构数值上也应该接近纯交流潮流和纯直流潮流的雅可比矩阵。利用这种“退化验证”的方法可以快速定位维度错误。5.2 直流网络初值过于离谱导致不收敛直流网络的功率方程对电压初值的敏感度比交流网络更高。如果初始直流电压跟真实值偏离太远牛顿法很容易走出一个奇异区域。解决办法有两个。一种是保守地设置初值为1.0标幺值这在大多数情况下都足够好另一种是先跑一个不含换流站损耗的简化模型得到粗解作为初值。实际操作中我基本都用第一种效果已经足够。5.3 换流站控制模式切换的困惑在多端直流系统里同一个换流站在不同工况下可能切换控制模式。这会导致变量体系发生变化也就是换一个控制模式后需要增删某些控制变量和方程。实现时最容易犯的错误是控制模式切换后没有同步更新雅可比矩阵的维度导致矩阵尺寸变化引发报错。我的做法是每一轮迭代前都通过一个函数重新检查每个换流站的控制模式标识再依据当前模式确定应该包含哪些变量和方程。这样做虽然牺牲了一点点计算效率但胜在逻辑清晰不容易留暗坑。5.4 换流站损耗太大导致结果不合理损耗参数设置得过大会导致直流侧功率平衡方程和VSC注入功率方程之间出现矛盾最终收敛结果可能满足方程但物理上明显不合理。出现这种情况时第一步要检查损耗系数是否在合理范围。以标幺值系统为例一般换流站满载损耗在1%~3%之间如果损耗系数产生的结果超过5%就要重新审视参数设定。6. 工程应用拓展与现实意义6.1 从算例走向实际配网分析代码验证通过之后这个统一求解法的框架可以直接拓展到更多实际场景中。比如光储直流微网接入交流配电网直流侧有多台储能变流器并联又比如多端柔性直流配电系统多个换流站共同维持直流母线电压稳定。针对不同的场景只需要修改网络数据文件和换流站数量即可核心求解模块无需改动。这种可拓展性在实际项目里特别重要。我的一个实际体会是很多配电网仿真需求并不是一次算完就结束了而是要在不同运行方式、不同负荷水平之间反复切换计算。如果核心求解模块的通用性不好每次改动都会引入新的bug费时费力。统一求解法的数学框架一旦搭好换流站再多本质上只是“同一类变量的更多实例”代码维护成本非常可控。6.2 Matla代码实现中的工程化心得用Matlab做这种偏数值计算的项目有几个经验特别值得分享。第一尽量减少全局变量的使用。交直流混合潮流的各个模块之间数据交互频繁如果大量用全局变量后期改数据流会非常痛苦。我的做法是在主函数中以结构体struct的形式统一管理所有数据子函数接收结构体并返回更新后的结构体。这样数据流一目了然调试时也能随时查看每一轮迭代后的完整状态。第二善用Matlab的稀疏矩阵功能。虽然中小规模网络用满阵完全没问题但一旦节点规模扩大到几百个满阵求解的时间开销会明显上升。改为稀疏矩阵后速度和内存占用都有显著改善而且代码改动量非常小只需要在拼装矩阵时加一句sparse()转换即可。第三注意迭代输出信息的设计。每一轮迭代打印最大偏差量、迭代次数、当前直流电压水平等信息这些信息对于快速判断是不是初值问题、是不是某个方程写错非常有帮助。我甚至会在调试模式下加一个双精度打印方便追踪某个可疑节点的残差变化轨迹。6.3 目前仍存在的局限与改进方向老实说这套代码目前也还有局限。比如换流器模型比较理想化没有考虑开关器件的动态特性和谐波影响这决定了它只适用于工频稳态分析无法用于电磁暂态仿真。另外当前控制模式都是外部给定的不支持自动下垂控制在多端系统均流能力分析上还有待扩展。下一步我打算在现有框架中加入直流电压下垂控制换流站的功率和电压关系变成线性函数相当于在换流器方程中增加一个下垂系数约束。这种模式下多个换流站之间不需要通信也能自动分配直流功率在工程上非常实用。改动起来本质上就是给换流站的控制方程再加一个表达式统一求解法的框架完全可以兼容。另一个方向是结合概率潮流输入分布式电源出力的随机性研究交直流混合配电网在不同置信水平下的电压分布和网络损耗。这个方向对实际规划很有价值但这属于另一个项目了。7. 最后再分享一个我用这套程序过程中的直观感受我做交直流混合配电网潮流计算的项目前后改了好几版代码最大的体会就是统一求解法表面上看起来复杂但实际写起来比交替法更让人心里有底。因为整个系统就是一个方程解法本身已经保证了交流侧和直流侧的信息同步不需要手动协调两边残差的收敛过程。换流站再多、控制模式再复杂也就归结为往大方程组里多添几行方程的事。当然这也意味着方程组的规模更大、矩阵拼装更繁琐对编程基础有一定的要求。但反过来想只要前期把模型写好、变量顺序约定好后续的扩展和调整会非常顺手。如果大家也想拿这套程序跑一跑建议一开始先用我前面说的三端小系统做验证摸清换流站建模和变量顺序的路数之后再往自己的实际配电网拓扑上套。踩坑最少的路径一定是先退化到纯交流场景验证基本逻辑再逐步加入直流侧和换流器。希望这篇文章能帮你省掉一些我当初走过的弯路。
返回列表