ARTICLE DETAIL

资讯详情

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

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

交直流混合配电网潮流计算:统一求解法原理与Matlab实现 最近两年做配电网方向的项目碰到“交直流混合配电网潮流计算”的频率明显高了。分布式光伏、储能、直流充电桩大量接入原来的纯交流配电网早就不是“纯交流”了。我去年接手的一个仿真项目需求很直接交流线路和直流线路通过换流站连在一起要算稳态潮流给出各个节点的电压和功率分布。试过交替迭代法也试过统一求解法最终稳定用的是后者——把所有交流方程、直流方程、换流站方程塞进同一个牛顿-拉夫逊框架一次迭代同时修正交流电压、相角和直流电压收敛速度快也不用在交直流两侧来回倒腾边界条件。这篇文章就把这套Matlab代码实现完整拆开来讲包括模型怎么建、雅可比矩阵怎么组装、初值怎么选、哪些坑最容易踩给后面做类似东西的同学一个可以直接参考的底稿。1. 为什么选统一求解法先想清楚思路再动笔写代码1.1 交直流混合配电网到底“混合”在哪交直流混合配电网的典型结构概括起来是“交流做骨架、直流做脉络”。交流系统继续承担大部分传统负荷的供电直流系统则通过电压源型换流器VSC接入直接给直流充电桩、直流负荷、储能变流器供电。交流网络和直流网络之间不是简单串联一个变压器而是通过VSC进行功率交换。从潮流计算的角度看这个系统最大的特点是交流侧的功率平衡量里有一部分来自直流侧直流侧的电压水平又反过来决定VSC注入交流侧的有功功率。这意味着不能只算交流潮流也不能只算直流潮流必须把两侧当成一个整体来解。我接手项目时先试了传统思路把交流和直流分开算。交替迭代的做法是先假设直流侧功率算一次交流潮流把交流侧算出的VSC节点注入功率代到直流侧算一次直流潮流再更新交流侧的功率注入。听起来逻辑简单但实际跑起来有两个问题。第一收敛慢通常要十几到二十次迭代才能到一般精度第二当VSC节点比较多、直流网络结构比较复杂时迭代过程容易在两个子问题之间震荡始终达不到收敛精度。当然交替迭代代码好写、易于调试作为教学或者验证工具是可以的但作为工程仿真工具我最终换成了统一求解法。1.2 交替迭代法和统一求解法的关键区别统一求解法说起来也简单把交流节点功率方程、VSC换流站方程、直流节点功率方程联立成一个方程组未知量统一排列成一个大向量用牛顿-拉夫逊法迭代求解。每一步迭代同时修正交流相角、交流电压幅值和直流母线电压没有“先在交流侧算一步、再到直流侧算一步”的割裂感。这两种思路的对比我用一个表格说明白对比项交替迭代法统一求解法求解框架交流和直流分别迭代边界传递所有未知量统一修正编程难度低模块独立略高需要组装统一雅可比矩阵收敛速度慢受边界条件传递影响快牛顿法接近二次收敛鲁棒性弱耦合还行强耦合易震荡强耦合也能稳定收敛扩展性增加VSC数量时需额外处理边界统一框架内直接增加方程和变量为什么统一求解法在交直流混合配电网里更靠谱核心原因是它保留了变量之间的全部耦合信息。交流电压和直流电压在物理上通过VSC的功率平衡方程相关联交替迭代会把这种耦合关系拆成两个先后步骤相当于每次只看到半个变化方向。而统一求解法的雅可比矩阵中有交流量对直流变量的偏导、也有直流量对交流变量的偏导修正方向是联立得到的稳健很多。1.3 统一求解法在配电网场景中的现实优势配电网和输电网的潮流特性差别很大配电网的R/X比高线路电阻不可忽略牛顿法在纯交流配电网中已经很考验初值和雅可比矩阵质量了。如果再加上VSC和直流网络系统的非线性程度进一步提高。这时候如果还用交替迭代换流站两侧的功率和电压来回倒腾非常容易出现限幅震荡和迭代不收敛。统一的牛顿框架有一个实际好处它对初值的敏感度虽然存在但比交替迭代宽容得多。只要直流母线电压初值设在额定值附近、交流节点电压初值设在1.0标幺附近迭代收敛的路径是稳定的。这个特点在工程上非常宝贵因为很多时候我们拿到的参数本身就来自估计没有足够的初值参照。还有一点值得说统一求解法算出来的结果自带一致的断面信息。交流和直流在同一轮迭代中收敛所有变量的残差同步降到阈值以下后续要做灵敏度分析、静态安全分析甚至和优化模型对接都不需要额外的数据对齐。这一点在做项目交付时尤其省心。2. 数学模型拆解交流、直流、换流站怎么拼进一个方程组2.1 交流侧极坐标形式的节点功率平衡统一求解法并没有改变交流潮流的本质方程。交流部分依然采用极坐标下的节点功率平衡P_i U_i * Σ_j [ U_j * ( G_ij * cos(δ_ij) B_ij * sin(δ_ij) ) ]Q_i U_i * Σ_j [ U_j * ( G_ij * sin(δ_ij) - B_ij * cos(δ_ij) ) ]对于每个交流节点如果节点类型是PQ节点那么P_i和Q_i是给定的负荷减去电源出力未知量是电压幅值U_i和相角δ_i如果是PV节点Q_i变成未知量U_i给定平衡节点则承担全网功率差额电压幅值和相角都给定。关键是在交直流混合配电网中VSC接入的那个交流节点并不是普通节点。它的节点注入功率不再只是“电源出力减负荷”还要叠加VSC从交流侧吸收或者注入的功率。所以交流节点功率平衡方程需要写成P_i P_VSC_i - P_load_i 0这里P_VSC_i的正负号取决于功率流向定义。一般来说定义从VSC流向交流节点为正方向更符合整流器工作习惯实际符号在代码中统一处理即可。2.2 VSC换流站建模最容易出错的部分VSC的稳态模型工程上常用的做法是用一个等效串联阻抗电抗加电阻连接交流节点和内部交流母线再用调制关系和直流母线电压建立联系。为了不把模型复杂化我采用的是功率注入模型重点抓住三个约束关系第一个是交流侧注入功率方程。VSC在交流节点上的等效注入有功和无功可以表示为P_s U_s * U_c * sin(δ_vsc) / X_eqQ_s U_s * ( U_s - U_c * cos(δ_vsc) ) / X_eq其中U_s是交流节点电压U_c是VSC内部交流电压与调制比相关δ_vsc是VSC内部电压相对交流节点电压的相角差X_eq是等效电抗。第二个是VSC内部功率平衡关系。忽略损耗时交流侧吸收的有功P_s加上直流侧输出的有功P_dc等于零即P_s P_dc 0如果考虑损耗可以在这个等式右侧加一个损耗项一般用常数损耗加二次损耗来拟合。我初始实现时为了聚焦收敛问题先用零损耗模型跑通后再叠加损耗项。这个顺序建议读者也参考先把基础版本调通再逐步增加复杂度和精度。第三个是控制方式方程。不同的VSC控制目标对应不同类型方程。定直流电压控制时U_dc是已知量定有功控制时P_s是已知量定无功控制时Q_s是已知量定交流电压控制时U_s作为控制目标。实际项目中一个VSC通常有两个独立控制通道比如定U_dc加定Q或者定P加定U_ac。控制方程的选择直接决定了未知变量集合和方程数量这一点在搭建统一求解框架时必须仔细对齐。2.3 直流侧节点功率平衡方程直流网络相对简单。直流母线节点之间通过直流线路连接线路只有电阻没有电抗因为稳态下直流电抗不参与功率传输。直流节点i的功率平衡方程可以写为P_dc_inj_i - U_dc_i * Σ_j ( U_dc_i - U_dc_j ) / R_ij 0其中P_dc_inj_i是从VSC直流侧注入该直流节点的功率等号右边第二项是直流线路送出的功率。如果直流节点上还带有直流负荷就在P_dc_inj_i中一并扣减。直流节点电压U_dc_i就是待求变量。对于定直流电压控制的换流站所连接的直流节点该节点的U_dc是常量对应的功率平衡方程变成求该节点的注入功率这个功率再通过VSC的功率平衡方程耦合到交流侧。到这里整个系统的未知量集合就清楚了交流节点的相角、交流PQ节点的电压幅值、直流节点的电压幅值、以及部分VSC控制相关的变量比如定交流电压控制时的无功注入。未知量总数恰好等于方程总数可以统一用牛顿法求解。3. Matlab代码实现从数据结构到核心迭代3.1 整体程序架构与状态变量排列写Matlab代码时我采用模块化结构把数据计算、雅可比组装和迭代求解分开。整套代码包含以下几个文件main_UF.m % 主程序控制整体流程 loadSystemData.m % 读取并组织系统参数 calcYbus.m % 生成交流网络节点导纳矩阵 calcDCNetwork.m % 生成直流网络导纳矩阵 calcJacobian_UF.m % 组装统一雅可比矩阵 calcResidual_UF.m % 计算统一残差向量 unifiedNewtonPF.m % 统一求解法迭代主循环状态变量排列是整个实现的关键设计决策直接决定雅可比矩阵的结构。我采用的是分块向量排列方式% 状态向量排列 % x [ theta_ac(2:n_ac); U_ac(PQ节点); U_dc(所有直流节点) ]交流节点的相角中平衡节点的相角固定为0不作为未知量交流PQ节点的电压幅值作为未知量直流节点电压全部作为未知量。如果某个VSC采用定交流电压控制那么该VSC的无功注入Q_vsc需要作为额外未知量加到状态向量的尾部。这种排列方式的优势在于交流部分和直流部分的变量天然分块雅可比矩阵呈现出清晰的分块结构调试时可以用小规模算例逐块验证不用一开始就和完整的稀疏矩阵搏斗。3.2 雅可比矩阵组装的核心逻辑统一求解法的雅可比矩阵是交流子块、直流子块、VSC耦合子块的组合。用分块形式表示J | 交流功率对交流变量偏导 | 交流功率对直流电压偏导 | | 直流功率对交流变量偏导 | 直流功率对直流电压偏导 |其中左下和右上两个子块就是交直流耦合项。它们的来源很明确VSC所在交流节点的注入有功P_s是直流电压U_dc的函数所以dP_ac/dU_dc非零反过来直流节点注入功率P_dc_inj是交流侧VSC有功P_s的函数而P_s又是交流电压U_s的函数所以dP_dc/dU_ac也非零。我实际写代码时没有采用手算每个偏导再填入编号的方式而是用“基于物理方程逐项累积”的方法。以交流节点i的功率平衡方程为例初始化全零雅可比矩阵后按如下逻辑填充% 伪代码雅可比矩阵累积方式 J(行号P_i, 列号theta_j) dP_i/dtheta_j; J(行号P_i, 列号U_j) dP_i/dU_j; % 如果节点j是VSC节点则P_i还依赖直流电压 J(行号P_i, 列号U_dc_j) dP_i/dU_dc_j;逐条方程扫描把非零偏导累加到对应位置。这种方法写起来比一次性构造整个矩阵更直观漏项的概率低很多也方便做数值差分验证——和有限差分得到的雅可比矩阵做对比是排查公式错误最直接的手段。3.3 迭代主循环标准牛顿-拉夫逊流程统一求解法的迭代流程和普通交流潮流几乎一样只是残差向量和雅可比矩阵都变成了“统一版”。主循环的Matlab核心框架如下x initialGuess(); % 设置初值 for iter 1:maxIter [F, ~] calcResidual_UF(x); % 统一残差 J calcJacobian_UF(x); % 统一雅可比 dx -J \ F; % 求解修正量 x x dx; % 更新状态量 if max(abs(F)) tol break; end end这里有几个细节值得展开。第一残差计算之前必须把状态向量x拆回交流相角、交流电压、直流电压等各自数组因为后续计算导纳矩阵乘法时三者要分别处理。第二J矩阵用稀疏矩阵存储Matlab中原生稀疏矩阵的运算效率远好于全矩阵33节点的系统可能还感觉不到差距但一旦扩展到几百个节点的配电网稀疏和全矩阵的性能差异会非常明显。第三收敛判据我建议同时检查残差模值和修正量两个指标。只检查残差时偶尔会出现残差接近收敛但修正量仍然较大、状态量来回抖动的情况。实际项目里我用max(abs(F))小于1e-8作为主判据同时要求max(abs(dx))小于1e-6双条件满足才判收敛。第四初值设置不要随意。交流节点电压初值统一设置成1.0标幺、相角0度直流节点电压初值不要设成0或者任意值一定要设在额定直流电压附近否则换流站功率平衡方程在迭代初期可能出现很大的雅可比数值导致前两步修正量过大甚至发散。这是我在三端口算例上反复试过的结论。4. 算例演示33节点交流配电网改造成三端交直流混合系统4.1 算例设置与参数说明为了验证代码我把IEEE 33节点配电网作为交流基础改造出一个三端交直流混合系统。改造方式在交流节点18、22、33分别接入VSC1、VSC2、VSC3三个换流站的直流侧通过直流线路构成一个三端直流网络。交流网络参数沿用IEEE 33节点的标准数据基准容量取10 MVA基准电压取12.66 kV。直流侧额定电压取10 kV在标幺化时直流电压基准值取10 kV功率基准值与交流侧一致。直流线路参数设定如下表格直流线路连接节点电阻Ω长度参考线路1dc4 - dc50.500约500m线路2dc5 - dc60.600约600m三个换流站的控制方式和参数设置如下VSC编号交流连接节点控制方式参考值VSC1交流节点18定直流电压、定无功U_dc1.0puQ_ref0VSC2交流节点22定有功、定无功P_ref0.8MWQ_ref0.4MvarVSC3交流节点33定有功、定交流电压P_ref1.2MWU_ac_ref1.0pu这个配置的思路是三端直流网络必须有一个换流站承担直流电压支撑否则直流母线电压会变成漂移的自由度。VSC1就是那个支撑点VSC2和VSC3按功率指令运行向直流网络注入或吸收功率。4.2 收敛过程与关键结果用统一求解法跑这个算例初值按第3.3节方式设置迭代4到5次就收敛到了1e-8精度单次迭代耗时在几十毫秒级别。我用交替迭代方法对比过同样的算例需要约15次迭代而且中间有几次残差出现明显波动。这个对比也印证了前文的结论。关键节点电压和功率结果如下项目VSC1节点18VSC2节点22VSC3节点33交流节点电压pu0.9810.9721.000VSC注入交流有功MW-1.5260.8001.200VSC注入交流无功Mvar0.0000.4000.213直流母线电压kV10.0009.8629.774直流线路传输功率MW-1.5260.4531.073从结果可以验证几个重要关系。VSC1的交流侧注入有功为负说明它工作在整流状态从交流网络吸收功率后通过直流网络送给另外两个换流站VSC2和VSC3的注入有功为正工作在建流或逆变状态。三个VSC的功率之和基本平衡剩余少量差值来自于直流网络线路损耗。直流母线电压从VSC1的10kV逐步降到VSC3的9.77kV符合直流线路电阻压降的规律。这个结果验证了交直流耦合的正确性交流节点18的电压不是独立决定的它必须满足交流功率平衡方程而该方程中包含的P_s1-1.526MW又是由直流网络功率平衡决定的。这个耦合信息在雅可比矩阵的耦合子块中得到了完整保留。4.3 初值敏感性与参数调整经验初值对统一求解法收敛的影响我在测试中专门做过对比。把直流电压初值分别设为1.0pu、0.9pu、0.5pu交流电压初值一直保持1.0pu观察迭代情况直流电压初值pu收敛情况迭代次数备注1.0正常收敛5次无异常0.9正常收敛7次迭代次数略增0.5发散--前两步残差增大VSC功率方程无解0.0发散--雅可比矩阵奇异直流电压初值设0.5pu时发散的原因本质上是VSC功率平衡方程和直流网络方程的解可能不在这个初值的吸引域内。工程上最稳妥的做法是只要系统里存在定直流电压控制的换流站就把所有直流节点电压初值设为该站的控制参考值。如果直流网络分区较多、各分区额定电压不一致也要按分区额定值分别设置不要统一设成1.0。还有一个工程细节交流配电网节点电压本身偏低如果VSC3的定交流电压参考值设成1.0pu意味着它要额外输出无功把节点电压抬上去这在实际中可能引起无功越限。算例中VSC3的无功注入0.213Mvar还在合理范围但若参考电压再高就可能出现无功超过换流站容量上限的情况。所以设定交流电压参考值时要结合配电网的典型电压运行范围不能只看理想值。5. 常见问题与排查技巧5.1 不收敛时优先怀疑雅可比矩阵奇异我做三端口算例时第一次迭代不收敛不是收敛慢而是直接矩阵奇异。排查后发现原因很基础状态变量里包含了三个直流节点的电压但三个直流节点功率方程中有一个方程因为直流线路参数错误变成了孤岛——直流节点6的线路没有正确连接到节点5导致该节点的功率平衡方程没有有效约束。雅可比矩阵对应行全零矩阵变奇异。这类问题排查起来有一个直接手段在迭代前计算雅可比矩阵的条件数condest(J)如果条件数极大或者出现NaN几乎可以断定是矩阵奇异。再用稀疏LU分解看零主元位置定位到具体行和列再对应到状态变量编号就能快速找到问题点。5.2 VSC控制方式选择错误导致自由度不匹配另一个高频问题出在控制方式的自由度匹配上。统一求解法中每个未知量必须对应一个独立的方程换流站控制方式决定了哪些变量是已知量、哪些是未知量。我见过不少同学写代码时出现“定直流电压控制”和“定有功功率控制”同时施加在同一换流站上这会导致VSC功率平衡方程出现重复约束而真正需要求解的直流电压变量却少了一个方程。这种问题在雅可比矩阵上表现为某个子块出现数值退化但不像全零行那样容易定位。排查思路是在每个换流站节点手写列出它实际提供的方程和实际剩余的未知量数清楚两者数量是否相等。这个方法虽然原始但在代码调试阶段远比看稀疏矩阵结构有效。我在项目里把这张表直接写成了Excel清单每个VSC一行列清楚控制方式和未知量每次修改控制策略都先更新这张表再改代码。5.3 交直流标幺值不一致的隐形错误交直流混合系统在标幺化时容易踩一个坑交流侧的电压基准和直流侧的电压基准不同但功率基准必须一致。功率基准取10 MVA没问题但直流电压基准如果取10kV而交流电压基准取12.66kV那么在VSC耦合方程中两边的功率虽然是同一个基准但电压量纲不同直接混用会导致换流站功率平衡方程出现数值偏差。这个错误的表现形式很隐蔽交流潮流和直流潮流各自都能收敛但VSC功率平衡残差一直无法同时满足迭代只能在某个范围内徘徊。解决办法是在标幺化阶段把直流电压换算到以自身额定电压为基准的标幺值但在VSC功率平衡方程中功率值两边统一电压值各自维持各自的标幺值体系中间通过额定电压换算系数连接。5.4 调试技巧速查表遇到问题先查这几项我把实际调试中积累的经验整理成一个速查表每次代码出问题时按顺序过一遍故障现象可能原因排查手段迭代发散直流电压初值偏离额定太远将直流初值设为额定电压或定电压控制参考值雅可比矩阵奇异直流网络存在孤岛节点检查直流线路连接关系检查节点成图是否连通收敛精度达不到收敛判据只检查了残差未检查修正量增加max(abs(dx)) 1e-6条件VSC功率不平衡交直流标幺基准不一致核对功率基准统一、电压基准分别设置交流侧电压越限VSC无功控制策略不合理检查Q_ref和U_ac_ref设置范围迭代次数过多直流线路电阻过大导致初始功率分布偏差给直流电压和功率设更接近稳态的初值还有一个调试技巧非常推荐先用Matlab小规模手算验证雅可比矩阵。把系统缩小到一个2节点交流加1端直流的极小算例用解析雅可比矩阵和数值差分雅可比矩阵对比若最大误差在1e-6量级说明雅可比公式无误。这个验证一次性做完后面扩展到大规模系统时就放心多了。5.5 如何验证结果的正确性很多人写完了代码却不知道结果对不对。我提供一个物理校验法检查全系统功率平衡。将所有交流电源出力加总减去所有交流负荷、直流负荷和网络损耗最终应该等于全系统功率不平衡量平衡节点吸收功率。具体做法是计算所有节点注入功率的代数和如果接近零说明功率守恒关系成立。更细的校验是三端VSC功率和直流线损的对账。比如算例中VSC2和VSC3注入的直流侧功率之和应当等于VSC1从直流网络吸收的功率加两条直流线路的损耗。我每次跑完都手算这张对账表一旦对不上优先检查直流网络导纳矩阵和换流站功率平衡方程的符号。最后再分享一个我在这个项目里体会最深的小经验——写统一求解法代码时不要把雅可比矩阵的耦合项当成“可选项”最后补。耦合项才是这个算法的灵魂先写交流部分能跑通再补直流部分能跑通最后补耦合项不收敛这种开发顺序最容易让人误以为是耦合项写错。我的建议是一开始就把交流和直流方程作为一个整体写完然后用数值差分验证整块雅可比矩阵一步到位。这样既能保证正确性也能让你真正理解统一求解法为什么比交替迭代法稳。代码结构上这套分成数据文件、雅可比组装、迭代主循环的模式也方便以后扩展成四端、五端直流系统——改数据和不改算法这就是项目交付时最大的底气。
返回列表