ARTICLE DETAIL

资讯详情

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

交直流潮流计算:统一法与交替法的原理、实现与调试

交直流潮流计算:统一法与交替法的原理、实现与调试 前阵子做混合电网的仿真分析又栽在了潮流计算的收敛性上。交直流输电网潮流计算说白了就是把直流系统的方程和交流网络的潮流方程放在一起解而落到程序实现上大家的争论点基本集中在统一法和交替法这两条技术路线。这篇文章我把两条路的原理、实现套路和踩过的坑都梳理一遍想自己搭一套交直流潮流程序的人应该能省不少时间。我默认看这篇文章的人已经接触过交流潮流计算至少知道牛顿-拉夫逊法是怎么回事。如果连交流潮流还没写过建议先把纯交流系统的流程跑通再来看直流部分的扩展。交直流潮流的难点不在交流而在直流模型怎么选、两个系统之间怎么交换信息、控制方式怎么约束这些才是真正决定程序能不能收敛的关键。1. 交直流系统潮流计算到底算的是什么1.1 从纯交流潮流的老朋友说起纯交流系统潮流计算核心就是在一组节点上满足功率平衡方程。对任意节点 i有功和无功分别满足P_i V_i ∑ V_j (G_ij cosθ_ij B_ij sinθ_ij) Q_i V_i ∑ V_j (G_ij sinθ_ij - B_ij cosθ_ij)如果是 PQ 节点P_i 和 Q_i 已知待求的是电压幅值 V_i 和相角 θ_i如果是 PV 节点P_i 和 V_i 已知待求的是 Q_i 和 θ_i。牛顿法的本质就是把这组非线性方程线性化反复修正电压幅值和相角直到功率失配量小于允许误差。这套东西本身已经很成熟各种教科书里都有。但一旦系统里多了一个直流输电环节事情就变了。直流线路不是像交流线路那样用阻抗参数表示就能放进节点导纳矩阵它的功率传输特性完全取决于换流器的工作状态必须额外建一套方程。从工程需求看交直流混合电网已经非常普遍。海上风电通过柔直送出、区域电网之间用背靠背直流异步联网、大容量远距离输电采用特高压直流这些场景都会让原有的交流潮流程序失效。一家设计院或者网调做方式计算如果程序不支持直流模型基本上没法应对新工程。1.2 直流环节进入之后方程多出了什么直流系统接入交流网络本质上是换流器从交流侧吸收有功和无功再转化成直流侧的有功功率。我们要额外关心的量包括直流电压、直流电流、换流器的触发角/熄弧角、换流变压器变比以及换流器与交流系统交换的无功功率。以最常见的两端直流为例稳态模型可以用一组方程描述。整流侧和逆变侧的直流电压分别近似为V_dr K_r B_r T_r E_r cosα - (3/π) X_cr I_d V_di K_i B_i T_i E_i cosγ - (3/π) X_ci I_d其中 K 是与换流器接线方式有关的系数B 是串联桥数T 是换流变压器变比E 是换流母线电压幅值X_c 是换相电抗I_d 是直流电流。直流线路方程很简单V_dr - V_di R_d I_d换流器与交流系统交换的有功功率可以写成P_dr V_dr I_d P_di V_di I_d而无功功率则和换流器的功率因数有关。整流侧通常吸收无功逆变侧在定熄弧角控制下也吸收无功具体数值随运行点变化。这一堆方程介入之后我们就不能只把换流器节点当作一个普通 PQ 节点来看了因为它的注入功率不是恒定值而是受直流电压、直流电流、触发角等状态量共同影响的。既然多了这些状态量就必须多配同样数量的方程这就是交直流潮流建模的出发点。1.3 统一法 vs 交替法两条路线的设计哲学处理交直流耦合的方式有两条主流路线名称上有很多叫法但思路很清晰。统一法也有人叫联立求解法是把交流潮流方程和直流系统方程放在同一个非线性方程组里所有状态变量一起迭代修正。优点是耦合紧密理论上二阶收敛特性好不会出现交替迭代中那种接口误差来回传递的问题。缺点是编程复杂雅可比矩阵要扩展直流方程要精心构造而且对初值更敏感。交替法也叫顺序求解法或分解法是把问题拆成交流潮流和直流潮流两个子问题交替计算直到两个子问题的接口量都收敛。优点是模块化程度高可以在现有交流潮流程序上加一个直流求解模块就能改造成交直流潮流实现成本低。缺点是外部迭代可能收敛慢尤其在重负荷或控制模式切换导致接口传递功率大范围变化时容易发散。单从名字看很多人第一反应是统一法更高级但实际工程里交替法用得一点也不少。原因很现实很多团队手上已经有一套跑了多年的交流潮流程序不想推翻重写在外部加一个直流模块是性价比最高的方式。而新建仿真平台时统一法反而更容易保证数值稳定性。两种方法没有绝对优劣关键看你的场景和约束条件。我做一个简单对比表格方便视觉记忆。对比维度统一法交替法方程组织交流、直流方程合并成一个大系统交流、直流方程各自独立求解迭代结构整体一次牛顿迭代交流与直流之间多次外部迭代编程复杂度高需要扩展雅可比矩阵低可在现有交流程序中附加模块收敛性收敛性好但初值要求高容易实现但接口振荡风险高灵活扩展增加新控制方式需要改整体矩阵新增直流控制逻辑相对独立适用场景新平台开发、研究验证、多端直流已有交流系统快速改造、工程集成2. 统一法把交直流方程放进同一张雅可比矩阵里2.1 统一法的数学模型与变量扩展统一法的第一步是把所有需要求解的变量列全。假设交流系统有 n 个节点其中存在换流器节点我们用下标 c 表示换流器。交流部分的状态变量保持不变PQ 节点的电压幅值和相角、PV 节点的相角以及节点无功注入作为辅助量不加入状态向量。直流部分的状态变量需要根据直流系统结构确定。对于经典两端 LCC 直流系统可以选整流侧直流电压 V_dr、逆变侧直流电压 V_di、直流电流 I_d 作为直流状态量。如果控制方式涉及触发角 α 或熄弧角 γ还需要把这些角度也纳入状态变量。有时候为了避免角度上下限导致的问题会把 cosα 或 cosγ 作为待求变量这样方程更接近线性。状态变量确定后方程组包括四类第一类是交流节点功率平衡方程和纯交流系统形式一样但是换流器节点的注入功率不再是固定给定值而是写成直流变量的函数。第二类是直流线路方程也就是 V_dr - V_di R_d I_d。第三类是换流器电压特性方程把交流母线电压、换流变压器变比、触发角、直流电流联系起来。第四类是控制方程格式取决于运行方式例如定电流控制对应 I_d I_d_ref定电压控制对应 V_di V_di_ref定功率控制对应 V_di I_d P_dc_ref。把所有方程组织成 F(x) 0状态变量 x [θ_ac; V_ac; x_dc]然后用牛顿法迭代求解。这里的难点在于换流器节点的交流功率平衡方程里出现了直流变量雅可比矩阵中对应块的偏导数必须同时包含对交流电压、相角以及直流电压、直流电流的导数否则牛顿法的二阶收敛性就保不住。2.2 雅可比矩阵怎么扩统一法的雅可比矩阵看起来唬人拆开看并不神秘。把方程和变量都按交流-直流分块雅可比矩阵可以写成四个大块。交流方程对交流变量求导这部分就是纯交流潮流雅可比矩阵里的 H、N、J、L 子块。交流方程对直流变量求导会得到一组反映换流器功率注入随直流运行点变化的偏导数。直流方程对交流变量求导大部分情况下是零块或少量非零项因为直流线路方程本身不依赖交流电压但换流器电压方程里含有交流母线电压 E所以这一块不能完全忽略。直流方程对直流变量求导也就是直流雅可比矩阵。完整的扩展矩阵就是把这几个大块拼在一起。实际编程时与其手推每个元素的解析表达式更推荐先用数值差分校核一遍雅可比矩阵。我个人的习惯是先把 F(x) 的表达式写清楚再用符号工具求偏导生成代码然后在一个小算例里用有限差分对比雅可比矩阵数值是否有大偏差。这样能抓住很多公式推导中的低级错误。需要注意换流器节点在交流侧往往是电压幅值接近恒定的节点但未必是 PV 节点因为直流有功功率和无功功率都是运行状态决定的。统一法中不需要强制把换流器节点设成 PQ 或 PV自然由方程决定这是它比交替法在物理上更自洽的地方。2.3 实现步骤与编程建议下面给出一个统一法牛顿迭代的示例框架我用 Python 风格的伪代码表达方便看出整体结构# 统一法交直流潮流求解主循环 def unified_powerflow(network, dc_system, x0, tol1e-8, max_iter30): x x0 for k in range(max_iter): F build_mismatch(network, dc_system, x) if max(abs(F)) tol: return x, k J build_extended_jacobian(network, dc_system, x) dx solve_linear_system(J, -F) x apply_limits_and_update(x, dx) # 检查换流器角度是否越限必要时修改控制模式 raise RuntimeError(统一法不收敛)在实际工程代码里build_mismatch 和 build_extended_jacobian 是最核心的两个函数。我的建议是不要把它们写成一个大函数而是按模块拆开交流功率失配量一个函数直流方程失配量一个函数雅可比矩阵逐块组装。这样调试时能快速定位是交流部分还是直流部分出了问题。统一法对初值非常敏感。交流电压幅值可以从 1.0 或者平启动值开始相角从 0 开始。直流电压初值可以按额定值设置直流电流按期望传输功率除以额定电压估算。触发角或熄弧角初值选在正常运行点附近比如整流侧 α 15 度左右逆变侧 γ 18 度左右。如果初值和实际运行点差太远牛顿法可能第一轮迭代就把 cosα 推出有效范围导致方程失去物理意义直接发散。3. 交替法两个求解器各自为政再互相通报3.1 交替法的核心流程交替法的设计思路是让交流潮流求解器和直流系统求解器各干各的只在接口处交换信息。接口信息通常是换流器节点交流母线电压幅值和相角以及换流器从交流侧吸收的有功功率和无功功率。一个典型的交替求解循环如下给定交流系统初始潮流状态或者直接使用平启动值。从交流潮流结果中取出各换流器节点的电压幅值和相角。以这些电压作为直流系统求解器的输入条件求解直流系统非线性方程组得到直流电压、直流电流以及换流器与交流系统交换的功率。把换流器节点看作带有特定注入功率的负荷节点将上一步计算得到的 P 和 Q 注入回交流潮流。重新求解交流潮流得到新的节点电压幅值和相角。检查接口量在相邻两次迭代之间的变化量是否满足收敛判据。如果满足结束否则回到第 2 步。这个流程本质上是一个不动点迭代。如果接口量在迭代中变化很大很容易出现振荡。解决办法通常是在接口功率更新时加阻尼因子比如新注入值取上一次值的 30% 和本次计算值的 70% 混合牺牲一点速度换稳定性。3.2 直流子系统怎么求解直流子系统的输入是换流器交流母线电压幅值和相角输出是直流电压、直流电流、换流器触发角和无功功率。这个子系统规模通常不大两端直流只有几个变量多端直流稍微复杂一些但也可以统一建模求解。以两端直流系统为例在整流侧交流母线电压和逆变侧交流母线电压已知的情况下待求变量包括整流侧直流电压、逆变侧直流电压、直流电流、整流侧触发角、逆变侧熄弧角以及两侧换流器吸收的无功功率。方程包括两个换流器电压方程、直流线路方程、两个控制方程以及两个有功功率方程。如果控制方式给定方程组是封闭的可以用小规模牛顿法求解。实际写代码时很多人会把直流子系统写成独立的函数输入是交流母线电压输出是直流功率。这样设计的好处是交流潮流模块完全不用关心直流的控制逻辑直流系统内部怎么变都不影响主程序。比如从两端直流扩展成多端直流时交流潮流部分几乎不用改只需要更新直流子系统的求解函数。3.3 交流子系统怎么接收直流功率交流潮流求解器怎么接收直流功率取决于你用的程序框架。如果是从头写可以在节点注入功率数组里对换流器节点做累加。换流器从交流侧吸收的有功功率等于直流侧有功功率加上换流器损耗损耗常忽略或用一个等效电阻近似。无功功率则需要按换流器运行状态计算整流侧一般是感性无功即从交流系统吸收正的无功逆变侧在定熄弧角控制下也是吸收无功。在 Matpower 这类工具里一种偷懒但有效的做法是在每次迭代前把换流器节点当作 PQ 节点将当前直流求解得到的 P 和 Q 填入对应节点的负荷或发电机功率中然后调用交流潮流函数。迭代完成后检查 P 和 Q 是否与外层迭代开始时的值一致。这种做法实现成本极低但要注意 PQ 节点的选择会影响交流潮流的收敛性换流器节点如果是电压控制型设备可能需要按 PV 节点处理。如果换流器采用 VSC 且控制方式包含定无功功率或定交流电压那么换流器节点并不能简单当 PQ 节点。这时候更合适的做法是把换流器有功和无功的耦合关系单独建模再将整个接口封装成一个广义负荷。我在实际项目中就遇到过这种情况一开始简单按 PQ 节点处理结果交流潮流收敛了但换流器控制约束根本没有被满足整个结果不可用。3.4 收敛判据和加速技巧交替法除了内部两个求解器各自的收敛判据之外还需要一个外部判据。常用的指标包括相邻两次迭代换流器节点注入有功功率的变化量或者换流器节点电压幅值和相角的变化量。阈值一般取 1e-6 或者 1e-8 量级但没必要太低因为交流潮流本身就有求解误差外部判据过低只会导致白算好几轮。提高交替法收敛速度的实用技巧有几个。一个是给接口变量加阻尼如前所述能明显缓解振荡。另一个是合理选择迭代初值第一次循环时可以用直流额定工况计算接口功率注入到交流系统让交流潮流从更接近真实运行点的状态开始。还有一种是多端直流系统中优先从控制模式更硬的换流器开始求解比如定功率端和定电压端先算其他从端跟随这样能减少迭代次数。4. 算例一个两端口直流嵌入交流系统4.1 测试系统与参数为了把两种方法放在一起比较我设计了一个小规模算例。交流系统取三个节点其中一个节点连接整流侧换流器另一个节点连接逆变侧换流器第三个节点作为平衡节点。两条交流线路用典型 220kV 线路参数直流双极额定电压 400kV额定功率 800MW。换流器参数按常见 LCC 模型设置整流侧换相电抗 5 欧姆逆变侧换相电抗 5 欧姆直流线路电阻 2 欧姆。整流侧采用定电流控制电流参考值设定为 2kA逆变侧采用定电压控制直流电压参考值设定为 398kV。两侧换流器均采用十二脉波换流器桥数取 1。纯交流部分先做一次不含直流注入的潮流作为初值然后分别用统一法和交替法求解交直流耦合后的最终运行点。这个算例规模不大但已经能反映出两种方法在收敛特性上的差异。4.2 两种方法的计算结果对比我按上述参数在自编程序里跑了一遍得到的结果很接近这也合理都收敛到同一物理运行点差别只应该在数值误差范围内。整流侧直流电压大约 403.2kV逆变侧直流电压 398kV直流电流 2kA直流线路压降 5.2kV正好等于线电阻乘以电流。整流侧触发角大概在 16 度左右逆变侧熄弧角在 18 度左右与初值设定接近。从交流侧看整流侧换流器节点有功注入大约 806MW无功吸收约 220Mvar逆变侧换流器节点有功输出约 796MW无功吸收约 185Mvar。两侧无功差异主要来自换流器运行状态的不同。收敛性能上统一法在给定合理初值的情况下牛顿迭代大约 4 到 6 次就可以把失配量压到 1e-10 以下。交替法外部迭代大约需要 10 到 15 次如果加阻尼因子可能要到 20 次左右才能满足 1e-8 的收敛判据。单看迭代次数统一法明显占优但这个算例规模小两者的实际耗时差距几乎感觉不到。指标统一法交替法整流侧直流电压/kV403.2403.2逆变侧直流电压/kV398.0398.0直流电流/kA2.02.0直流传输功率/MW806806迭代次数513是否出现振荡否小幅振荡后稳定4.3 工程场景中的方法选择如果只是做一个小系统验证两种方法差别不大。真正到了工程场景选择就变得有讲究。新建一个大型多端直流仿真平台时我倾向于用统一法。多端直流系统中直流电网方程和交流电网方程的耦合更加复杂交替法需要在多个换流站之间来回迭代收敛困难概率显著上升。统一法虽然初期开发成本高但后续面对各种控制方式组合时只需要扩展方程组和雅可比矩阵数值鲁棒性更有保障。相反如果是基于现有交流潮流程序增加直流功能且直流规模不大、控制方式相对固定交替法几乎是唯一现实的选择。因为重写整套程序的风险太大而交替法对外壳程序改动最小接口清晰出现问题也容易定位是交流模块还是直流模块的锅。我的经验是交替法能否稳定工作很大程度上取决于换流器节点在交流程序中的建模方式这个需要在小算例上多试几种处理方案。5. 常见问题与排查技巧实录5.1 不收敛先检查直流控制模式是否冲突交直流潮流不收敛我踩过最多的坑就是控制模式组合有问题。直流系统的控制模式不是随便组合都成立。比如两端直流两侧都定电流那么直流电流就被强行固定但两个换流器的触发角会变成自由量可能没有一组合理角度能满足直流线路压降方程。又比如两侧都定电压那直流电流就失去了约束潮流结果完全不确定。排查这类问题有一个快速办法统计直流系统方程数和变量数是否相等。如果方程数少于变量数说明控制约束不够如果方程数多于变量数说明控制约束过多。控制模式调整之后一定要重新数一遍方程数量不要凭感觉。常见的合理组合是一端定电流或定功率另一端定电压或定熄弧角。定电压端承担直流系统的电压调节任务定电流或定功率端承担功率输送任务。只要按照这个思路配置控制模式大部分方程数问题都能避免。5.2 交替法接口振荡怎么办交替法如果在外部迭代中来回跳最常见的现象是换流器节点注入功率在两次迭代之间大幅振荡。原因通常是交流潮流重新计算后换流器母线电压变化导致直流子系统的解剧烈变化然后又让注入功率大幅改变形成正反馈。最简单的处理办法是阻尼因子。假设上一次外部迭代得到换流器有功注入为 P_old本次直流子系统计算出 P_new那么实际用于交流潮流的注入值取P_use λ P_new (1 - λ) P_oldλ 一般取 0.3 到 0.7从 0.5 开始试振荡严重就调小。代价是收敛速度变慢但随着运行点越来越接近真解阻尼会自然降低振荡幅度。还有一种比较隐蔽的原因是交流潮流求解器内部对换流器节点的处理方式导致问题。如果换流器节点被设置为 PV 节点但直流子系统实际需要吸收大量无功可能超出交流系统给出的无功上限那么交流潮流会用无功越限的方式强行限制导致电压值和直流子系统预期不一致。这时候就要考虑将节点类型改为 PQ 节点或者增加无功补偿设备模型。5.3 统一法雅可比矩阵奇异问题统一法出现雅可比矩阵奇异往往不是矩阵计算代码的问题而是模型本身存在冗余或欠定。比如直流控制方程之间相互依赖导致矩阵中有两个行向量线性相关。我遇到过一次两端直流、一侧定电流、另一侧定功率看似控制方程有两个但实际上在稳定运行状态下定电流和定功率并不独立直流电压会被间接固定形成冗余约束。这种情况下需要去掉一个控制方程或者在方程中保留一个很小的阻抗项打破奇异。更推荐的做法是模型设计阶段就做一次自由度分析把每个控制目标对应到一个明确的状态变量上确保变量和方程数严格相等且不冗余。另外统一法在迭代过程中如果触发角越限而程序没有及时处理也会导致雅可比矩阵元素异常。建议在每次迭代后用限制函数检查角度范围越限时把控制模式切换为定熄弧角或定最小触发角再继续迭代。5.4 编程调试中的实用小技巧写交直流潮流程序时我强烈建议先做一个能手工验算的最小算例不要一上来就追求大系统。最小算例可以用两个无穷大交流母线加一个直流线路人工解析解很容易写出来。程序在这个算例上通过后再逐步增加交流系统复杂性。之后可以加一个中间结果打印开关把每次迭代的失配量范数、状态变量值、控制量都打印出来。特别是统一法通过观察失配量是整体下降还是来回跳能快速判断问题出在初值、方程构造还是雅可比矩阵。如果一个分量总是不减小优先检查对应行方程是否有输入错误。还有一个小技巧是验证直流子系统的解可以单独把直流子系统求解函数拿出来用一组已知交流母线电压去测试看输出的直流功率是否满足手工计算值。这一步做好后再和交流潮流联合测试定位问题会轻松很多。我个人在实际操作中最深的体会是交直流潮流程序难的不是算法本身而是把每个控制方式和方程都梳理得清清楚楚。建议每个控制模式都单独写一个小函数并配套一条测试用例。这样后续扩展多端直流或者 VSC-HVDC 时只需要增加新的函数和测试用例旧功能不会受影响。最后再分享一个小技巧无论是统一法还是交替法都建议把换流器母线电压幅值作为一个关键监控量。这个量同时出现在交流和直流方程中一旦两个系统对它的预期不一致程序表现就是要么不收敛要么收敛到无物理意义的解。多画几张这个量随迭代次数变化的曲线很多诡异问题一眼就能看出来。
返回列表