多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

区域PSS综述:从建模、选址到时滞补偿与自适应协调控制

区域PSS综述:从建模、选址到时滞补偿与自适应协调控制 简介这份PDF综述面向电力系统稳定性分析与控制方向的研究生、科研人员及工程技术人员系统梳理了区域电力系统稳定器PSS及其协调控制的研究现状帮助读者快速建立该领域的知识框架理解低频振荡抑制的关键技术路线。资源包共1个PDF文件大小约464KB内容涵盖PSS原理简析、电力系统建模、区域系统PSS配置原则、时滞处理及控制器设计等核心章节并涉及Prony辨识法、几何法与留数法配置、相位补偿法以及遗传算法、粒子群优化等智能协调优化手段同时讨论了WAMS广域测量系统引入时滞后的稳定性分析问题。文中还展望了智能控制、自适应控制及新能源接入对PSS研究的影响可作为课题选题、文献综述与工程方案设计的参考依据。目前已有86人学习适合需要系统了解区域PSS协调控制研究脉络的读者研读。1. 区域 PSS 综述到底能帮你省下多少试错成本如果你正在做励磁附加控制相关的课题或者刚接手一个区域互联电网的低频振荡分析任务大概率会遇到一个很现实的问题PSS 的配置和协调控制涉及建模、选址、反馈信号选取、时滞补偿、参数整定好几个环节每个环节都有不同的方法流派光靠翻零散论文很难拼出完整的技术路线。这份《区域电力系统稳定器及其协调控制研究综述》就是冲着这个痛点来的——它把 PSS 原理、系统建模、区域配置原则、时滞处理、控制器设计五个方向串成了一条线并且给出了每个环节当前最常用的方法及其适用边界。适合电力系统稳定分析方向的研究生、调度部门的稳定专责以及做广域阻尼控制器开发的工程师。它不教你推公式但能让你在选方法、定参数、排故障时少走几轮弯路。2. PSS 原理与系统建模从单机无穷大到你手头的电网2.1 单机无穷大系统里的正阻尼是怎么产生的PSS 的核心逻辑其实不复杂发电机励磁系统本身会引入相位滞后当系统发生低频振荡时这个滞后会让励磁附加转矩落在 Δω 的反相位上产生负阻尼。PSS 要做的就是通过一个超前环节把相位掰回来让附加转矩与 Δω 同相从而提供正阻尼。综述里用单机无穷大系统的传递函数框图把这个过程拆得很清楚。发电机采用三阶实用模型励磁系统用一阶惯性环节描述推导出的附加转矩 ΔTe 表达式表明只要 PSS 传递函数 G(P) 的超前相位恰好等于 Δδ、TE 引起的相位滞后PSS 就能增加一个与 Δω 同相位的成分 ΔTp正阻尼就建立起来了。这个结论虽然是在单机无穷大系统下推出来的但它是理解多机系统 PSS 设计的基础。实际工程中你不可能对每台机组都做全阶建模所以通常的做法是先用单机无穷大模型确定 PSS 的基本结构和补偿相位范围再在多机系统中做协调。提示单机无穷大推导出的相位补偿量是一个基准值直接搬到多机系统里往往不够因为机组间的振荡模式不同需要的补偿相位也不同。2.2 Prony 辨识为什么成了量测建模的首选系统建模这块综述把方法分成了线性理论分析法和非线性建模分析法两大类。线性方法包括特征值分析、频域分析、电气转矩解析法适合小扰动稳定分析非线性方法主要是时域仿真和基于量测的分析法。其中基于量测的 Prony 辨识法被明确点名为最常用的方法。原因很直接它不受电网规模限制不需要知道元件模型的准确参数也不依赖运行方式直接从实测或仿真波形里辨识出振荡模态。对于区域互联电网这种模型参数经常拿不准的场景Prony 的实用性远超传统建模方法。如果你手头有 PMU 录波数据用 Prony 做模态辨识的基本流程是import numpy as np from scipy.linalg import hankel, svd def prony_analysis(signal, sample_rate, model_order): signal: 实测信号序列如功角偏差或功率偏差 sample_rate: 采样率PMU 常见 100 Hz model_order: 模型阶数一般取信号中预期模态数的 2-4 倍 n len(signal) # 构造 Hankel 矩阵 h hankel(signal[:n - model_order], signal[n - model_order - 1:]) # SVD 降噪并确定有效秩 U, S, Vh svd(h, full_matricesFalse) # 根据奇异值跳变确定实际阶数 effective_order np.sum(S 1e-6 * S[0]) # 用最小二乘求解线性预测系数 # ... 后续求解特征根得到模态频率和阻尼比 return effective_order # 实际使用时采样率要和 PMU 配置一致 # 模型阶数先设大一点再根据奇异值分布截断这段代码的关键参数有两个sample_rate必须和 PMU 实际采样率一致常见的是 100 Hz 或 50 Hzmodel_order不能设得太小否则模态分辨不出来但设太大又会引入虚假模态。我一般会先设成预期模态数的 4 倍然后看奇异值分布在明显跳变的地方截断。综述里还提到Prony 法结合多信号在线辨识可以做广域 PSS 的协调设计具体做法是对发电机组施加小扰动信号用多信号 Prony 拟合出系统模型再根据观测性指标选择 PSS 的配置机组和输入信号。这条路子在工程上已经有实际案例但前提是你的 PMU 数据质量要过关。3. 区域 PSS 配置几何法比留数法好在哪3.1 配置机组和反馈信号的选择逻辑区域系统 PSS 配置要解决两个问题哪些机组装 PSS以及每台 PSS 用什么反馈信号。综述里说得很清楚区域互联产生的区间振荡模式频率低而且多台机组可能和同一振荡频率强相关。所以配置原则是先根据系统间互联阻尼特性确定需要装 PSS 的机组再根据与机组强相关的振荡模式来设置 PSS 的频率范围。选址方法有留数法、参与因子法、几何法、右半平面零点、最小奇异值等。综述明确指出留数法和几何法是最常用的两种但几何法在面对多种备选反馈信号时效果更好。留数法的问题在于当系统有不同类型的备选反馈信号时不同信号的幅值比差异很大留数法很难统一比较。几何法通过构造一个综合几何指标把不同信号的可控性和可观性归一化处理选出的反馈信号更靠谱。3.2 用几何指标做选址的实操步骤如果你要用几何法做 PSS 选址大致流程是这样的第一步在系统工作点附近线性化求出状态矩阵 A 和输出矩阵 C。第二步对每个候选反馈信号计算其对应的几何指标。几何指标的定义是import numpy as np def geometric_index(A, C, mode_idx): A: 系统状态矩阵 C: 输出矩阵对应某个候选反馈信号 mode_idx: 目标振荡模式的索引 返回该信号对该模式的几何指标 # 求特征值和左右特征向量 eigenvalues, right_vecs np.linalg.eig(A) left_vecs np.linalg.inv(right_vecs) # 取目标模式对应的特征向量 phi right_vecs[:, mode_idx] # 右特征向量 psi left_vecs[mode_idx, :] # 左特征向量 # 计算几何指标 # 分子是可控性分母是归一化因子 controllability np.abs(np.dot(psi, phi)) observability np.linalg.norm(C phi) gi observability / (np.linalg.norm(psi) * np.linalg.norm(phi)) return gi # 对每个候选信号循环计算选几何指标最大的 # 注意C 矩阵的每一行对应一个候选反馈信号第三步对所有候选信号按几何指标排序选最大的那个作为该 PSS 的反馈信号。第四步对选定的反馈信号用相位补偿法整定 PSS 参数。综述里提到有文献基于综合几何指标做广域 PSS 设计能有效解决多备选信号的问题。还有文献用综合参与因子指标在不同运行方式下验证了有效性。这些方法的共同点是不依赖单一信号而是从系统全局角度评估每个候选信号对目标模式的贡献。注意几何法算出来的指标是在特定运行方式下的结果。如果你的系统运行方式变化大建议在多个典型方式下分别计算取交集或加权平均。4. 时滞处理相位补偿法怎么用才不翻车4.1 时滞从哪来为什么不能忽略区域 PSS 用广域信号做反馈信号传输要经过 PMU 采样、上行通道、数据集中服务器、下行通道好几个环节。综述里给出了时滞的组成表达式t ΔT_PMU ΔT_up ΔT_server ΔT_down其中上行和下行通道的传输时延受通信协议、线路负载、传送距离、通道带宽、是否经过路由器等因素影响变化范围从几十毫秒到几百毫秒。综述引用的实测数据表明江苏电网广域测量系统的通信延时基本在百毫秒内贵州电力调度两端间的网络通信延时在十毫秒左右不同 PMU 的抖动时延差别较大。时滞的危害在于它会在主导振荡频率附近产生相位偏差恶化阻尼效果。当时滞较大时控制器收到的反馈信号和当前处理信号不是同一时间断面的控制效果可能适得其反。4.2 相位补偿法的参数整定逻辑相位补偿法是当前处理时滞最常用的方法。它的思路是在控制器模型里加入相位超前/滞后环节和增益调节把时滞引起的相位滞后补偿掉。具体做法是先测量或估算时滞 t计算它在目标振荡频率 ω 处引起的相位滞后 Δφ -ωt。然后在 PSS 的相位补偿环节里设置超前角度使总相位在 ω 处满足正阻尼条件。PSS 的传递函数通常包含三个环节隔直环节、相位补偿环节、放大环节。综述里给出的 2 级 PSS 结构中本地 PSS 和广域 PSS 的传递函数都包含这三个环节。相位补偿环节的参数 T1、T2、t1、t2 需要根据相位偏差来整定放大环节的增益 K 决定 PSS 产生阻尼的强度。实际操作中我一般会这样做import numpy as np def phase_compensation_params(delay_ms, osc_freq_hz, target_phase_deg): delay_ms: 实测时滞单位毫秒 osc_freq_hz: 目标振荡模式频率单位 Hz target_phase_deg: 需要补偿的目标相位单位度 返回相位补偿环节的 T1/T2 比值 omega 2 * np.pi * osc_freq_hz delay_s delay_ms / 1000.0 # 时滞引起的相位滞后弧度 phase_lag -omega * delay_s # 需要补偿的总相位 total_compensation np.deg2rad(target_phase_deg) - phase_lag # 根据补偿相位计算 T1/T2 # 常用做法是让补偿环节在目标频率处提供所需超前角 # 具体公式取决于补偿环节的级数和结构 # 这里给出两级补偿的简化计算 alpha (1 np.sin(total_compensation / 2)) / (1 - np.sin(total_compensation / 2)) return alpha # 使用时滞值建议取多次测量的最大值 # 目标相位一般设为 10-30 度具体看系统阻尼需求这个计算的关键在于时滞值不能只测一次要取多次测量的统计值最好用最大值或 95% 分位数。因为时滞的随机性很强用平均值可能导致部分时段补偿不足。综述里还提到有文献提出时延分段补偿方法把时延分区处理结合各区间时延的不同采取区间补偿根据在线量测数据自动调整补偿区间。还有文献提出分层预测补偿方法预测系统测量数据并计算控制量序列。这些方法比固定补偿更适应时滞的随机性但实现复杂度也更高。提示如果你的系统时滞抖动很大固定相位补偿法可能不够用。这时候要么改用鲁棒控制器设计要么上分段补偿或预测补偿。5. 控制器设计与参数协调自适应为什么是刚需5.1 常规 2 级 PSS 的结构和参数含义综述里给出的常规区域 PSS 控制器采用 2 级结构本地 PSS 用本地测量信号广域 PSS 用广域测量信号。两个 PSS 的传递函数都包含隔直、相位补偿、放大三个环节。隔直时间常数 T 决定 PSS 对低频信号的响应范围一般取 3-10 秒。相位补偿环节的参数 T1、T2、t1、t2 根据相位偏差整定放大环节的增益 K 决定阻尼强度。增益太小起不到阻尼作用太大又会引起其他模式失稳。参数整定的难点在于区域系统中多个 PSS 之间存在交互影响单独整定每台 PSS 的参数合在一起可能效果不好。综述里提到一旦区域间控制器参数协调不当可能会影响本地控制器的控制效果。5.2 智能算法协调优化的适用场景协调控制的主要方法有相位补偿法和智能算法协调优化。相位补偿法是依次整定把已确定的参数作为已知条件逐个整定剩余控制器。智能算法协调优化则是用优化算法对所有控制器参数统一协调。综述里提到的智能算法包括改进粒子群算法等。具体做法是用 Prony 辨识系统低频振荡的振荡模式把 PSS 协调转化为具体目标函数下的优化问题再用智能算法求解。如果你要用粒子群算法做 PSS 参数协调目标函数一般这样构造import numpy as np def pss_objective(params, system_model, target_modes): params: 所有 PSS 的参数向量 [K1, T1_1, T2_1, K2, T1_2, T2_2, ...] system_model: 系统状态空间模型 target_modes: 目标振荡模式列表 返回目标函数值越小越好 # 把参数写回系统模型 updated_model apply_pss_params(system_model, params) # 计算闭环系统特征值 eigenvalues np.linalg.eigvals(updated_model.A_closed) # 提取目标模式的阻尼比 damping_ratios [] for mode in target_modes: # 找到最接近目标频率的特征值 idx find_closest_mode(eigenvalues, mode) lam eigenvalues[idx] # 阻尼比 -实部 / 模 zeta -np.real(lam) / np.abs(lam) damping_ratios.append(zeta) # 目标函数最大化最小阻尼比 # 同时惩罚参数越限 penalty 0 if any(np.array(params) 0): penalty 1e6 return -min(damping_ratios) penalty # 粒子群优化时参数范围要根据实际 PSS 的物理限制设定 # 增益 K 一般不超过 20时间常数在 0.01-10 秒之间这个目标函数的逻辑是让所有目标模式中最小的阻尼比尽可能大。实际使用时还要加上参数越限的惩罚项以及可能需要的其他约束比如增益不能超过励磁系统的限制。综述里还提到闭环转矩分析法DTA给出了角度相关量参数关于低频振荡模态的灵敏度指标可以用于不同运行方式下的 PSS 参数配置和实时调整。还有文献提出振荡模式特征值及其阻尼比对控制器参数的灵敏度指标用于避免参数越限。5.3 自适应调整为什么绕不开综述在最后部分明确指出目前的广域 PSS 研究大多基于离线固定参数设计但实际系统运行方式和结构时刻在变动离线参数设计不能满足实际运行要求。随着自适应控制技术的应用这个问题有望解决。从工程角度看自适应调整的必要性来自三个方面一是运行方式变化导致特征值阻尼变化较大时开环配置的参数可能达不到抑制效果二是 PMU 的应用使得全局信息共享和区域间 PSS 参数配置成为可能三是控制器数量增加后控制器之间的相互作用可能带来新的稳定性问题需要在线协调。综述里提到的做法包括基于 DTA 指标在不同运行方式下配置 PSS 参数并实时调整基于灵敏度指标进行参数配置实现阻尼约束优化用 Prony 辨识振荡模式后转化为优化问题求解。这些方法的共同思路是用在线辨识获取当前系统状态再根据状态调整参数。6. 避坑与排查区域 PSS 工程中最容易翻车的五个点6.1 现象Prony 辨识出的模态频率和仿真对不上原因模型阶数设得不对或者采样率不匹配。Prony 对模型阶数很敏感阶数太低会漏掉模态太高会引入虚假模态。另外如果 PMU 采样率和信号实际频率不匹配辨识结果会整体偏移。解决先用已知仿真信号验证 Prony 程序确认阶数选择逻辑正确。实际数据先做频谱分析大致确定模态频率范围再据此设定模型阶数。采样率必须和 PMU 配置一致不能想当然。6.2 现象几何法选出的反馈信号在实际系统中效果不好原因几何指标是在特定运行方式下算的如果实际运行方式偏离计算工况指标排序可能变化。另外几何法只考虑了可控性和可观性没有考虑时滞的影响。解决在多个典型运行方式下分别计算几何指标取加权平均或最差情况下的排序。选完信号后还要校核该信号在加入通信时滞后是否仍然有效。如果时滞影响大可能需要重新选信号。6.3 现象相位补偿后阻尼反而变差了原因时滞值估计偏小补偿相位不够或者补偿相位过大在非目标频率处引入了负阻尼。另外如果 PSS 增益设得太大即使相位对了也可能引起其他模式失稳。解决时滞值取多次测量的最大值或 95% 分位数不要用平均值。补偿相位先从小角度开始试逐步增加同时监测其他模式的阻尼比变化。增益整定时先设小值确认目标模式阻尼改善后再逐步加大。6.4 现象多台 PSS 单独整定都合格联合运行后出现新振荡原因PSS 之间的交互影响。区域系统中多台 PSS 同时工作时它们的控制作用会相互叠加可能在某个频率上产生新的谐振或负阻尼。解决不要单独整定每台 PSS要用协调优化方法统一整定。如果条件不允许至少要在联合仿真中校核所有 PSS 同时投入后的闭环阻尼比。发现新振荡模式后调整相关 PSS 的相位补偿或增益必要时降低某些 PSS 的增益。6.5 现象离线设计的参数在实际系统中效果逐渐变差原因系统运行方式变化导致振荡模式漂移离线参数不再匹配当前工况。新能源接入、负荷变化、线路检修都会改变系统动态特性。解决建立在线辨识和自适应调整机制。用 PMU 数据实时辨识振荡模式根据辨识结果调整 PSS 参数。如果暂时做不到在线调整至少要在典型运行方式下分别设计参数组根据当前工况切换。注意自适应调整本身也可能引入稳定性问题参数调整速率不能太快要有足够的阻尼裕度。7. 从综述到落地用 Prony 加灵敏度指标做一轮参数校核综述读完之后最实际的动作是拿你手头的系统做一轮参数校核。我一般会走这样一条链路先用 Prony 从 PMU 数据里辨识当前运行方式下的振荡模式再用灵敏度指标判断哪些 PSS 参数需要调整最后用优化算法做一轮协调。具体操作上Prony 辨识的代码前面已经给了这里重点说灵敏度指标的计算和用法。综述里提到的灵敏度指标有两个一个是角度相关量参数关于低频振荡模态的灵敏度另一个是特征值及阻尼比对控制器参数的灵敏度。后者的计算更直接import numpy as np def damping_sensitivity(A, param_name, delta1e-4): A: 当前闭环系统状态矩阵 param_name: 要计算灵敏度的参数名 delta: 扰动步长 返回目标模式阻尼比对参数的灵敏度 # 计算当前阻尼比 eigvals np.linalg.eigvals(A) # 找到最弱阻尼模式 zeta -np.real(eigvals) / np.abs(eigvals) weakest_idx np.argmin(zeta) zeta0 zeta[weakest_idx] # 扰动参数后重新计算 A_perturbed perturb_param(A, param_name, delta) eigvals_p np.linalg.eigvals(A_perturbed) zeta_p -np.real(eigvals_p) / np.abs(eigvals_p) # 找到对应的模式按频率匹配 idx_p find_closest_mode(eigvals_p, eigvals[weakest_idx]) zeta_p_val zeta_p[idx_p] # 灵敏度 sensitivity (zeta_p_val - zeta0) / delta return sensitivity, zeta0 # 对每个 PSS 的每个参数循环计算 # 灵敏度为正且绝对值大的参数优先调整 # 灵敏度接近零的参数说明对目标模式影响小不用动这个灵敏度指标的作用是告诉你哪个参数对目标模式的阻尼影响最大。灵敏度为正且绝对值大的参数稍微增加就能显著改善阻尼灵敏度为负的参数增加反而会恶化阻尼。实际调参时优先调灵敏度大的参数灵敏度小的参数保持不动。综述里还提到基于灵敏度指标可以做 PSS 参数配置的约束优化避免参数越限。具体做法是设定阻尼比的下限约束用优化算法在参数空间里搜索满足约束且使最弱阻尼最大化的参数组合。我自己的习惯是先用灵敏度指标做一轮粗调把明显需要动的参数找出来再用粒子群或遗传算法做一轮细调在粗调结果附近搜索最优解。这样比直接上优化算法收敛快也不容易陷入局部最优。从那以后我每次拿到新的系统数据都强制走一遍 Prony 辨识加灵敏度校核的流程哪怕系统看起来运行正常。因为低频振荡这东西等它表现出来的时候往往已经晚了。希望帮到你。本文还有配套的精品资源点击获取
返回列表