☰
阻抗模拟与导纳矩阵:电力系统不对称故障计算的工程实现
2026/9/29 2:55:36 网站建设 项目流程

简介:这份高等电力系统分析课件聚焦阻抗模拟专题,适合电气工程专业高年级学生、研究生以及从事电网分析、保护整定和故障诊断的工程师学习参考。课件围绕Ward等值、不对称故障模拟、阻抗矩阵与导纳矩阵、等值阻抗通用公式展开,详细说明了如何利用规范的阻抗形式模拟A相接地、BC相间短路、BC两相接地等典型故障,并讨论了支路内部故障的规范化处理。还介绍了以10的负6次方近似表示短路、10的6次方近似表示开路等数值技巧,便于把理想边界条件应用于实际计算。资源共包含1个PPT文件,整体大小359KB,以公式推导与电路图示例为主,适合在课堂教学中投屏讲解或课后对照教材自学。目前已有75人学习,若正在学习高等电力系统分析中的等值计算与不对称故障建模,可将其作为重点提示和快速回顾的补充材料。

1. 阻抗模拟:为什么故障计算最后都得回到一张导纳阵上

做电力系统故障分析的人,迟早会遇到一个反直觉的结论:真正在仿真软件里跑不对称故障,很少去手工连序网,而是把故障位置改写成一组规范化的阻抗或导纳,然后交给导纳阵统一求解。这份《高等电力系统分析课件:阻抗模拟.ppt》讲的就是这条路线——从 Ward 等值化简外部系统,到用 Z_A、Z_B、Z_C、Z_N 四个量描述 A 相接地、BC 相间短路、BC 两相接地,再到 10⁻⁶ 和 10⁶ 这两个数值尺度的使用,最后落到 FY 支路内部故障的规范化处理。适合正在用 PSASP、BPA 做保护整定和故障复算的工程师,也适合高等电力系统分析这门课里想搞明白“程序里到底怎么算故障”的研究生。整条链路看明白之后,你手里的现成软件就不再是黑匣子。

2. Ward 等值:外部系统化简,先过导纳阵消去这一关

2.1 Ward 等值到底消去了什么

Ward 等值的核心思想不复杂:把系统分成内部系统、边界节点和外部系统三大块,然后对外部系统的节点做导纳阵消去,最终只在边界节点上留下一组等值导纳和等值注入电流。这样做的好处很直接——你只关心内部某一个区域时,没必要把几千个外部节点全部保留,消去之后边界节点上的电气特性不变,但计算规模大幅下降。

课件里开头那一大段矩阵公式,实际上就是在描述这个过程。设系统导纳阵按内部、边界、外部顺序分块:

Y_BB' = Y_BB − Y_BE · Y_EE⁻¹ · Y_EB

其中 Y_BB 是边界节点自导纳与互导纳,Y_EE 是外部节点导纳阵,Y_BE 和 Y_EB 是边界与外部之间的互导纳。消去外部节点之后,边界节点之间的等值导纳等于原来的自导纳减去“外部系统折入”的那一项,这一项的本质是外部网络对边界节点电压的影响。

从物理上看,Y_BB' 里每个元素都是一个完整的等值支路:对地等值导纳放在对角线上,边界节点之间的等值互导纳放在非对角线上。内部系统做故障计算时,只需要带着这份等值导纳阵,不需要再关心外部系统具体拓扑。

2.2 两节点 Ward 等值:公式、代码、边界修正

只看公式不容易建立实感,用一个三节点例子跑一遍就清楚了。假设节点 1 是内部节点,节点 2 是边界节点,节点 3 是外部节点,原始导纳阵如下:

import numpy as np # 节点排序:1 内部,2 边界,3 外部(待消去) # 导纳值:1-2 支路 2.0 S,2-3 支路 1.5 S,1-3 支路 0.5 S Y = np.array([ [2.5, -2.0, -0.5], [-2.0, 4.5, -1.5], [-0.5, -1.5, 2.0], ], dtype=float) # 分块:保留 1、2,消去 3 Y_BB = Y[:2, :2] # 保留部分的自导纳与互导纳 Y_BE = Y[:2, 2:3] # 保留部分与外部节点之间的互导纳 Y_EB = Y[2:3, :2] Y_EE = Y[2:3, 2:3] # Ward 等值核心公式 Y_BB_new = Y_BB - Y_BE @ np.linalg.inv(Y_EE) @ Y_EB print(Y_BB_new)

逻辑说明:np.linalg.inv(Y_EE) 在外部节点只有一个时就是取倒数,多节点时才是真正的矩阵求逆。Y_BE 和 Y_EB 的维度分别是 2×1 和 1×2,两者相乘得到 2×2 修正矩阵,最后从 Y_BB 里减掉。这一步做完,外部节点 3 就从系统里消失了。

参数说明:代码里的支路导纳值决定修正量大小。如果外部系统和边界节点联系很紧密(互导纳数值大),那么 Y_BB_new 的修正项就明显,边界节点之间会出现明显的等值互导纳;如果外部系统很弱,修正项接近零,这时候直接用原 Y_BB 也不会差太多。

但只消去导纳还不够。外部系统里如果有发电机或负荷,它们对边界节点的注入电流不能忽略。Ward 等值标准做法是把外部注入电流按下面公式折算:

I_B' = I_B − Y_BE · Y_EE⁻¹ · I_E

在 PSASP 这类软件里,这步是程序自动完成的;但如果自己写批处理脚本做等值,很容易只做了导纳消去而漏了注入修正。漏掉之后的表现是:边界节点电压整体偏低或偏高,误差和外部系统出力大小成正比。我一般会在等值前后分别做一次潮流对比,把边界节点电压偏差控制在 0.5% 以内再拿去用。

2.3 多子区域:逐层消去比一次全消更稳

课件里 Ward 等值还提到把一个大的外部系统分解成若干子区域分别等值。这里有一个实际工程经验:当外部节点上千时,一次性对所有外部节点做矩阵消去,Y_EE 求逆容易出现数值问题,因为外部网络本身可能是弱连接的分块结构,矩阵条件数很差。

常见做法是分区域逐层消去——先把远端区域消掉,再把近端区域消掉,每消一层都重新组装导纳阵。这样做的好处有两个:一是每层 Y_EE 规模小,求逆稳定;二是可以中途检查等值精度,如果某一层消去后边界电压偏移过大,能定位是哪个区域出了问题。我在实际项目里见过不少直接用全局求逆导致结果发散的情况,换成逐层消去之后基本都能收敛。

3. 对称分量法:为什么不对称故障最后都归结为“序网怎么连”

3.1 三相量到序分量的线性变换

用阻抗形式模拟不对称故障之前,得先复习对称分量法,因为三种故障的阻抗配置本质上是对序网连接方式的另一种表达。设旋转因子 a = e^(j120°),则三相电压变换到正序、负序、零序的标准形式:

U₁ = (U_A + a·U_B + a²·U_C) / 3 U₂ = (U_A + a²·U_B + a·U_C) / 3 U₀ = (U_A + U_B + U_C) / 3

电流同样变换。当系统元件三相对称时,三相阻抗矩阵是一个循环矩阵,变换到序分量域后自动对角化,只剩下 Z₁、Z₂、Z₀ 三个独立值。这就是为什么传统手算故障分析都要先在序网里做——因为三相对称网络在序分量下完全解耦,计算量小很多。

对这个变换,有一点值得留意:很多初学者会把 U₁ 和 U_A 搞混。正序分量并不是 A 相电压本身,而是三相电压在正序旋转方向上的投影分量。只有在三相对称正常运行且没有负序零序分量时,U₁ 才在数值上等于 U_A。

3.2 三种经典不对称故障的序网连接

把三种故障的序网连接方式列成一张表,后面的阻抗配置就能一一对应:

故障类型序网连接方式边界特征
A 相接地正序、负序、零序串联V_A = 0,I_B = I_C = 0
BC 相间短路正序与负序并联,零序开路V_B = V_C,I_A = 0,I_B = −I_C
BC 两相接地正序、负序、零序三网并联V_B = V_C = 0,I_A = 0

这张表是手算的标准答案。A 相接地时三个序网串联,意味着正序、负序、零序电流相等;BC 相间短路没有对地回路,所以零序电流为零;BC 两相接地时故障点直接连地,三个序网并联在一起。

3.3 程序里为什么不直接连序网

既然序网连接关系这么清晰,为什么仿真程序里不直接按序网连接方式写边界条件?原因是工程实现太啰嗦——每加一种故障类型,就得写一套边界条件处理逻辑;碰到经阻抗接地、双回线跨线故障、同杆并架不同期故障时,边界条件会越来越复杂,代码维护成本很高。

更通用的方案是:不把故障当成边界条件,而是把它当成一段等值阻抗网络插进原系统。A 相接地的物理本质就是 A 相多了一条到地的通路,BC 两相接地就是 B、C 两相各多了一条到地的通路,BC 相间短路就是 B、C 两相之间多了一条通路。这三种情况都可以用一组故障相阻抗来描述,程序只需要做一件事:修改导纳阵里对应位置的元素。这就是课件标题里“阻抗模拟”的真正含义。

4. 阻抗形式模拟不对称故障:Z 矩阵建模与 10⁻⁶ / 10⁶ 数值尺度

4.1 规范阻抗形式:Z_A、Z_B、Z_C、Z_N 的角色

课件给出的统一电路模型是:A、B、C 三相分别经过 Z_A、Z_B、Z_C 接到中性点 N,中性点再经 Z_N 接地。故障类型不同,这四个阻抗的取值就不同。这个模型把所有不对称故障统一到一个电路拓扑里,短路用 0 阻抗表示,开路用无穷大阻抗表示。

以 A 相接地为例:A 相到中性点之间的阻抗 Z_A = 0,相当于 A 相直接接地;B、C 两相到中性点的阻抗 Z_B = Z_C = ∞,相当于 B、C 相悬空;中性点对地 Z_N = 0。换成 BC 相间短路,则 A 相开路,B、C 相之间短路,中性点悬空。

这里要特别提醒一个概念陷阱:课件里写“采用 10⁻⁶ 代表 0,采用 10⁶ 代表 ∞”,这个表述只有在阻抗矩阵粒度下才是直接成立的。如果你组装的是导纳阵,短路对应的是大导纳(10⁶ S),开路对应的是小导纳(10⁻⁶ S),方向要反过来。两种粒度都有人用,关键是在同一套代码里保持一致,不要混用。

4.2 三种故障的阻抗配置与导纳阵实现

故障类型Z_AZ_BZ_CZ_N导纳阵修改方式
A 相接地0∞∞0A 相自导纳加大值
BC 相间短路∞00∞B、C 相之间加互导纳
BC 两相接地∞000B、C 相自导纳加大值

用一段可以直接运行的 Python 代码演示 A 相接地,单节点三相模型就足够说明问题:

import numpy as np # 单节点三相导纳阵,假设三相对地自导纳为 1.0 S Yabc = np.diag([1.0, 1.0, 1.0]) # A 相接地:Z_A = 0,在导纳阵里等价于 A 相自导纳加一个很大的值 # 10**6 S 近似无穷大导纳,对应阻抗 10**-6 Ω Yf = np.zeros((3, 3)) Yf[0, 0] = 1e6 # A 相到中性点短路 # B、C 相开路,不加任何导纳 Y_total = Yabc + Yf # 注入电流:A 相 1.0 A,B、C 相 0 I = np.array([1.0, 0.0, 0.0]) # 求解节点电压 U = Y^{-1} * I U = np.linalg.solve(Y_total, I) print("UA=%.6f UB=%.6f UC=%.6f" % (U[0], U[1], U[2]))

逻辑说明:复数在 Python 里用 np.complex 表示,这里为了演示清晰用了实数导纳。UA 会变成接近 0 的小数值,UB、UC 基本不受影响,符合 A 相金属性接地的物理预期。

参数说明:1e6 这个数不是随便定的,它要比系统正常导纳至少大 10⁴ 倍,才能把故障点电压压到忽略不计;也不能大到 10¹² 以上,否则导纳阵条件数恶化,求解精度反而下降。10⁻⁶ 同理,要远小于系统正常导纳但又不至于让矩阵产生下溢。

BC 相间短路和 BC 两相接地的差异,就在修改位置的不同。BC 相间短路修改的是 B、C 两相之间的互导纳;BC 两相接地修改的是 B、C 各自的自导纳。两者都用到 1e6,但放的矩阵位置不一样,物理意义也完全不同:

# BC 相间短路:B、C 相之间加互导纳 Ybc_short = np.zeros((3, 3)) Ybc_short[1, 2] = Ybc_short[2, 1] = 1e6 # BC 两相接地:B、C 相各自对地加自导纳 Ybc_gnd = np.zeros((3, 3)) Ybc_gnd[1, 1] = 1e6 Ybc_gnd[2, 2] = 1e6

4.3 多节点系统的通用修导纳写法

单节点三相模型跑通之后,扩展到实际系统只需要处理一个问题:三相导纳阵的节点排序。常见排序方式有两种——按节点号连续排列三相(1A、1B、1C、2A、2B、2C)和按相分组(A 相所有节点、B 相所有节点、C 相所有节点)。在 PSASP 里一般都是前一种,自己写代码也推荐前一种,因为故障修改通常只涉及某个节点的某一相,按节点连续排三相时索引计算更直观。

假设系统有 N 个三相节点,总导纳阵维度是 3N×3N。对第 k 个节点做 A 相接地,只需要找到 (3k, 3k) 位置,加上 1e6 即可。对第 k 个节点做 BC 两相接地,就改 (3k+1, 3k+1) 和 (3k+2, 3k+2) 两个对角位置。支路内部故障则要额外在故障点插入新节点,这就是第六章要讲的 FY 支路处理。

5. 阻抗模拟避坑指南:五条现场踩过的坑

5.1 10⁻⁶ 和 10⁶ 用反方向,结果彻底失真

现象:A 相接地仿真时 UA 没有压到零,反而 B、C 相电压被压没了,结果全错。

原因:代码里组装的是导纳阵,但心里还想着阻抗矩阵“10⁻⁶ 代表短路”,把 A 相自导纳写成了 1e-6,等于把 A 相接地点开路了。

解决:先确认当前矩阵粒度到底是 Z 还是 Y。Z 矩阵里短路给 10⁻⁶、开路给 10⁶;Y 矩阵里短路给 10⁶、开路给 10⁻⁶。我自己的习惯是在代码开头加一句注释写明“此处为导纳阵,短路用大值”,防止隔一个月回来看代码时翻车。

5.2 Z_N 的设置被忽略,两相接地和相间短路分不清

现象:BC 相间短路和 BC 两相接地的计算结果几乎一样,或者出现明显错误的零序电流。

原因:相间短路时中性点悬空,Z_N 必须设成 ∞;两相接地时中性点直接接地,Z_N 必须设成 0。如果 Z_N 在两种工况下都取同一个值,故障特征就被搞混了。

解决:严格按照第四章的表格逐项核对。这个只能靠细心,没有任何跳过的方法。我一般把四种参数(Z_A、Z_B、Z_C、Z_N)统一放在一个字典里,每种故障类型对应一条记录,运行时直接查表,不手写散落的赋值。

5.3 三相节点顺序不一致,矩阵组装后一片混乱

现象:导纳阵不对称,或者求逆之后出现负电阻。

原因:有的地方按 1A、1B、1C 排,有的地方按 A1、B1、C1 排,故障修改时索引错位。尤其是读 PSASP 或 BPA 数据转换过来的节点表时,最容易被文件里原来的排序带偏。

解决:在程序最前面做一次节点索引归一化,强制转成“节点号×3+相序”的连续索引,后续所有组装、修改、输出都走同一个索引函数。转换完成后做一次对称性断言 np.allclose(Y, Y.T),不通过直接报错。

5.4 Ward 等值只消导纳不折算注入电流

现象:等值后边界节点电压和原系统比整体偏差 3%~8%,外部系统出力越大偏差越大。

原因:Ward 等值化简导纳阵只是等值的半边,外网发电机和负荷的注入功率没有折算到边界节点,等值系统等于少了外网注入。

解决:在做等值时同步计算 I_B' = I_B − Y_BE · Y_EE⁻¹ · I_E,然后加到边界节点的注入电流上。如果用的是 PSASP 的等值功能,记得在等值卡片里勾选“外网注入折算”再输出结果。

5.5 支路内部故障直接加节点,导纳阵不重新拉回路

现象:FY 支路内部故障计算时,新增故障节点之后导纳阵出现负对角元素,或者线路两侧电流对不上。

原因:支路内部发生故障后,原来的单条支路被拆成两条串联支路,故障点成为新的节点。如果只把故障点加进节点表、不把原支路导纳拆成两段,导纳阵里的拓扑关系和实际情况不一致。

解决:按第六章的规范化流程处理——原支路导纳 y 拆成 y1 和 y2 两段,分别挂在故障点两侧,故障点自导纳为 y1 + y2,故障点到两端点的互导纳为 −y1 和 −y2。拆完之后检查该支路两端电流是否满足 KCL,能满足再做求解。

6. 支路内部故障的规范化处理:从等值阻抗到验证技巧

课件最后一部分是 FY 支路内部故障的规范化处理,这是阻抗模拟最实用的延伸。所谓“支路内部故障”,就是故障点不发生在母线节点上,而是发生在线路某一段中间。工程里最常见的就是线路中点附近遭雷击闪络,故障点既不是线路 i 端也不是 j 端,而是在 i、j 之间某个位置。

处理办法很固定:把故障点 f 当成新节点插入系统。原支路 i-j 拆成 i-f 和 f-j 两段,导纳分别记为 y1 和 y2,串起来满足 y = y1·y2 / (y1 + y2)。在导纳阵里做如下修改:

Y_ii += y1,Y_jj += y2,Y_if = Y_fi = −y1,Y_jf = Y_fj = −y2, Y_ff += y1 + y2(再加上故障本身的接地或相间接地导纳)

如果原支路带线路充电电容,用的是 π 模型,那么拆开后两段线路的电容也要按距离比例重新分配,不能一股脑都挂在 i 端。这个细节最容易在画等值电路时省略,但结果往往差在无功分布上。

最后一章想分享一个我固定执行的验证顺序,比任何理论推导都实在。改完 FY 支路代码后,我从来不直接跑不对称故障,而是按三步走:第一步,把所有故障阻抗全部设成开路,跑一次正常三相潮流,看结果是否和原始系统一致——这一步能抓出导纳阵组装错误;第二步,做 A 相金属性接地,和对标软件的结果对比,重点看 UA、UB、UC 三相电压和故障分量电流;第三步,再跑 BC 两相接地,确认零序网络没有被错误地并联进去。三步全过,代码才算达到可用状态。

从那以后我每次改故障计算模块,都会强制把这三步走一遍,哪怕只是改了一个索引函数。这套流程替我挡下了至少五次在边界条件下才暴露的错误,比事后对着错误结果排查省太多时间。这份课件的核心价值,就在于把 Ward 等值、阻抗配置、数值近似和支路内部故障四条线串成一个完整闭环,希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询