Z-N临界比例法整定PID参数:从临界振荡到阶跃图验证
发布时间:2026/9/13 14:32:44 锦皓数字建站

简介面向自动化控制领域的PID参数整定学习者与工程技术人员这份资源以Z-N临界比例法为主线提供一套基于MATLAB的比例积分微分控制器参数整定与阶跃响应分析方案。针对缺少对象模型时的工程调试难题资源通过实验方式确定临界增益与振荡周期再据此计算比例系数、积分时间常数与微分时间常数将经典Z-N整定规则完整落地为可运行的仿真流程。压缩包内共2个文件含m脚本与png图各1个m脚本负责构建系统模型、绘制单位阶跃响应并完成参数计算png图用于对比整定前后的动态品质直观反映过冲、调整时间等指标变化。资源包仅7KB结构紧凑适合自动化、电气、机械等专业学生在课程设计或入门实践中对照学习。已有1197人浏览学习对于希望快速掌握临界比例法PID整定流程的读者具有较好的参考价值。1. Z-N法整定PID参数的核心思路先让系统振荡再查表收兵Z-N法最反直觉的地方它不追求一步调到稳态而是先把闭环推上临界振荡用这组极限参数反推工作参数。临界比例法实验只有三步——控制器切纯比例、逐步加大Kp、直到阶跃响应出现等幅振荡记下临界增益Kcr和临界周期Tcr剩下就是查表。标题里同时出现临界比例法和阶跃图对应Z-N法两条路线闭环临界振荡法和开环阶跃响应法反应曲线法。前者适合允许小幅振荡的工业过程后者适合不敢让系统振荡的场合。Z-N的价值是免去盲调。没经验的人对着Kp、Ti、Td三个旋钮乱试三个方向互相牵扯Z-N把问题压缩成只调一个Kp再查表得到一组能用的参数。调温控表、给PLC写PID、用vofa这类上位机调试PID看波形的人最后都会回到这张表。2. 临界比例法整定PID的实验步骤读出Kcr和Tcr再收手2.1 先判断对象适不适合Z-N临界比例法临界比例法要求对象在纯比例增益上升到某个值后闭环能出现稳定的等幅振荡。这个前提划定了适用范围典型一阶惯性加纯滞后对象——温度、压力、液位、电机转速这些阶跃响应呈单调S形临界振荡存在且幅度可控而纯积分对象、本质非线性通道、或者纯滞后过大的回路振荡往往不是干净的等幅状态量出来的周期也失去意义。工程上还要评估能不能振荡。临界振荡的幅度通常压在设定值阶跃的2%~5%以内对多数温控和压力调节没有破坏性但机械限位、化学反应器这类局部超调可能直接触发保护动作就不适合硬试。这类对象应该直接走Z-N另一条路——开环阶跃响应法或者用后面要讲的继电反馈做闭环辨识先离线把模型特征拿回来再谈参数。提示临界比例法测的是系统的临界稳定点不是工作点。实验做完第一步是把Kp立刻降回保守值再按表计算正式参数别带着临界增益长时间运行。2.2 现场临界振荡实验的完整操作流程以带PID功能的PLC或温控表为例按下面顺序执行每步都等过渡过程结束再动下一档把控制器切纯比例Td设为0Ti切掉。不同仪表切积分的写法不一样常见是Ti0、Ti9999或OFF以说明书为准三菱等PLC的PID指令里若带积分上下限实验阶段先放开。闭环投入让系统稳定在工作点再给设定值一个小幅阶跃幅度取量程的5%~10%。这一步是为了得到干净的阶跃图后面量振荡周期要用。观察响应曲线振荡在衰减说明当前Kp低于临界值等振荡基本平息后把Kp加大20%~30%重复。循环第3步直到出现等幅振荡。记下当前Kp就是Kcr在阶跃图上数相邻波峰间隔取多个周期平均得到Tcr。立刻把Kp降回实验前取值再按Z-N表换算出正式PID参数。判断当前位置离临界点多远看波形特征观测到的现象判断下一步操作阶跃后单调收敛无振荡Kp远小于Kcr大胆加大Kp幅度可到50%振荡出现且明显衰减Kp接近Kcr等衰减完成后加20%左右等幅振荡振幅基本不变已到临界点记录Kcr和Tcr收手振幅越来越大已越过临界点立刻降回上一档重新细扫最后一行是最容易出事的振荡发散说明增益越界多跑几个周期就可能触发输出限幅或保护现场操作要在发散苗头出现时立刻干预。2.3 用Python自动扫Kcr并量出Tcr手工盯曲线容易误判尤其振荡衰减很慢时。常见做法是先用被控对象模型在仿真里把流程跑通再回现场验证。下面脚本用FOPDT对象模型做闭环仿真对Kp扫描自动判断等幅振荡并量出周期import numpy as np def fopdt_step(Kp, model, dt0.01, t_end50.0, sp1.0): FOPDT对象纯比例闭环仿真。 model (K, T, tau)对象增益、时间常数、纯滞后时间。 K, T, tau model dn int(tau / dt) # 滞后对应的采样拍数 n int(t_end / dt) y np.zeros(n) # 被调量 u np.zeros(n) # 控制输出 for i in range(1, n): u_d u[i - dn] if i - dn 0 else 0.0 # 纯滞后用dn拍前的u y[i] y[i-1] dt * (K * u_d - y[i-1]) / T # 一阶惯性差分 u[i] np.clip(Kp * (sp - y[i-1]), 0.0, 100.0) # 纯比例输出限幅 return y def is_sustained(y, ratio0.2): 用后60%数据的波峰幅度变化判断是否等幅振荡。 seg y[int(len(y) * 0.4):] peaks [i for i in range(1, len(seg)-1) if seg[i] seg[i-1] and seg[i] seg[i1]] if len(peaks) 3: return False amps [seg[i] for i in peaks] return (max(amps) - min(amps)) / (max(amps) 1e-9) 0.2逻辑说明fopdt_step第10行做纯滞后第11行是一阶惯性对象的显式欧拉差分第12行是纯比例控制np.clip限幅必须保留否则仿真里输出可能超出执行机构物理范围。is_sustained通过相邻波峰判断振幅是否稳定ratio0.2的意思是峰值差距不超过20%就算等幅这个阈值对应工程上目测等幅的宽容度。参数说明dt取对象时间常数的1/50到1/100本例T5sdt0.01s合适t_end要覆盖至少10个振荡周期否则后半段样本不够sp1.0表示设定值阶跃1个单位限幅0~100贴近实际执行机构。对一系列Kp跑完后找到is_sustained返回True的最小Kp就是Kcrdef scan_kcr(model, kp_list, dt0.01): for kp in kp_list: y fopdt_step(kp, model, dtdt) if is_sustained(y): seg y[int(len(y)*0.4):] peaks [i for i in range(1, len(seg)-1) if seg[i] seg[i-1] and seg[i] seg[i1]] Tcr dt * float(np.mean(np.diff(peaks))) return kp, Tcr return None, None model (2.0, 5.0, 0.5) # 对象增益2、时间常数5s、滞后0.5s kp_list np.arange(0.5, 15.0, 0.5) Kcr, Tcr scan_kcr(model, kp_list) print(fKcr{Kcr:.2f} Tcr{Tcr:.2f}s)扫描逻辑是Kp从小到大递增第一个进入等幅状态的值就是临界点下界真值落在它和前一档之间要更精确在这个区间里再套一轮二分。受0.5步长限制本例会落在Kcr≈8.0、Tcr≈2.0s这一档后面章节都按这个数值继续。is_sustained的阈值从0.2放宽到0.3命中档位会提前一档这就是工程里看着差不多就算等幅的代价Kcr偏小、参数偏保守。3. Z-N查表确定PID参数由Kcr和Tcr算出Kp、Ti、Td并落地3.1 经典Z-N整定公式P、PI、PID三种控制器的查表规则拿到Kcr和Tcr之后Z-N法给的是一个乘法表核心是比例缩回来、积分微分按周期切出去控制器类型KpTiTdP0.50 Kcr——PI0.45 KcrTcr / 1.2—PID0.60 KcrTcr / 2Tcr / 8按第2章扫描结果Kcr≈8.0、Tcr≈2.0s来算PID参数为Kp4.8、Ti1.0s、Td0.25s。参数含义要分清Kcr是临界增益直接用Kcr闭环系统是不稳定的0.6这个系数把工作点退回稳定域内部同时给系统留出约4:1的衰减比。TiTcr/2意味着积分时间明显小于临界周期积分动作偏强这正是Z-N激进风格的来源——它面向快速恢复不面向小超调。TdTcr/8配合Ti形成积分滞后、微分超前的节奏两者不要只改一个。Z-N参数对模型偏差的敏感度也很高Kcr偏大10%最终超调可能放大30%以上。所以扫描阶段的步长和阈值直接决定结果质量粗扫得到的Kcr宁可偏小一档也不要越过真值。3.2 位置式PID的差分方程Ti、Td怎么折算成Ki、KdZ-N给的是连续域时间落到单片机或PLC里要做离散化。位置式PID用差分方程实现时推荐按增益外提的形式写Z-N参数表可以直接套进去u(k) Kp * e(k) (Kp / Ti) * Σe(j) * dt Kp * Td * (e(k) - e(k-1)) / dt其中KiKp/Ti、KdKp*Td。积分项用矩形法累加微分项用后向差分。现场最常见的落地错误是把Ti当成积分次数、Td当成微分次数控制周期不是1秒时参数全部偏移。class PositionPID: 位置式PIDKp、Ti、Td 按 Z-N 查表值直接传入dt为控制周期。 def __init__(self, Kp, Ti, Td, dt): self.Kp, self.Ti, self.Td Kp, Ti, Td self.dt dt self.e_prev 0.0 self.sum_e 0.0 def update(self, sp, y): e sp - y self.sum_e e * self.dt # 矩形法积分单位偏差*秒 d (e - self.e_prev) / self.dt # 后向差分微分 self.e_prev e u (self.Kp * e (self.Kp / self.Ti) * self.sum_e (self.Kp * self.Td) * d) return u逻辑说明update返回的就是控制输出u(k)位置式PID输出执行机构的绝对位置适合阀门、加热功率这类有保持能力的对象。积分累加用的是偏差乘dt所以Ti单位必须是秒和Z-N表一致把Ti写成分数倍的控制周期数是常见偏差来源。参数说明dt是PID运行周期单片机上放定时中断、PLC里放周期性执行的块dt必须和实际调用周期一致。微分项对噪声敏感反馈有毛刺时优先把微分放到测量值上只对-y求差分而不是直接掐掉Td。位置式落地还要加抗积分饱和输出到限幅时停止累加或把积分钳位回限幅边界否则从饱和退出会有明显滞后。增量式PID是位置式的变体输出相邻两拍的差值Δu系数折算关系相同只是累加对象从偏差变成输出增量步进电机或自带保持的执行器更合适。3.3 在PLC和仪表上落地比例带PB、采样周期和Ti的单位换算常见PLC和仪表不直接显示Kp而是用比例带PB%。量程归一化后PB与Kp的关系是PB100/KpKp4.8对应PB≈21%。用PB表示的现场实验阶段是减小PB而不是增大Kp方向别搞反。Ti的写法也五花八门有的表单位是秒有的表单位是分钟还有的控制指令里给的是积分时间×采样周期的倍数关系落地时先确认单位再填数。采样周期dt的选取建议压在临界周期Tcr的1/20~1/50dt太大差分微分的噪声被放大dt太小PLC扫描开销上升但控制品质几乎不提升。# 第2章扫描结果 - Z-N表 - 可运行PID对象 Kcr, Tcr 8.0, 2.0 # 临界增益、临界周期 Kp 0.60 * Kcr # 4.80 Ti 0.50 * Tcr # 1.0 s Td 0.125 * Tcr # 0.25 s dt Tcr / 40 # 0.05 s采样周期取Tcr的1/40 pid PositionPID(Kp, Ti, Td, dt)这段代码演示从Z-N表到可运行对象的最小衔接Kp、Ti、Td由查表乘出来dt独立选取。dt改变时Ti、Td不用重新算但程序里的调用周期必须同步修改否则积分累加和微分差分的时间基准就乱了。4. 用阶跃图验证Z-N整定效果超调量、衰减比与振荡次数的判读4.1 整定前后的阶跃图怎么对比Z-N参数投进去后别急着盯稳态按三个指标看阶跃图。第一是超调量Z-N按4:1衰减比设计时经典结果是第一波超调往往落在20%~40%对大惯性温度对象偏高对追求响应速度的场合刚好如果系统根本没有超调、直接爬上去说明Kp还有余量。第二是衰减比数连续两个同向波峰后一个约为前一个的1/4这是Z-N的设计目标衰减太快说明参数偏保守几乎不衰减说明Kcr扫得不准确。第三是振荡次数一般期望两个完整振荡周期内收敛到±5%以内振荡超过4~5个周期还没收住大概率是Ti设得太小、积分动作过强。还有一个容易忽略的条件验证阶跃的幅度至少要是噪声带的5倍否则超调量和衰减比全被噪声淹没看起来像振荡实际上是毛刺。用vofa这类上位机调试PID时把时间轴拉开、纵轴按量程归一化再看比盯数值变化直观得多。4.2 完整复现一遍FOPDT对象上的Z-N整定验证脚本把第2章的扫描和第3章的PositionPID串成一条完整的整定验证链路import numpy as np def sim_zn_pid(model, dt0.01, t_end80.0, sp1.0): K, T, tau model Kcr, Tcr scan_kcr(model, np.arange(0.5, 15.0, 0.5), dt) if Kcr is None: raise RuntimeError(没扫到等幅振荡检查kp_list范围) Kp 0.6 * Kcr; Ti Tcr / 2.0; Td Tcr / 8.0 pid PositionPID(Kp, Ti, Td, dt) dn int(tau / dt) n int(t_end / dt) y np.zeros(n); u np.zeros(n) for i in range(1, n): y_d y[i-1] # 反馈取上一拍测量值 u[i] pid.update(sp, y_d) u_eff u[i-dn] if i-dn 0 else 0.0 # 对象输入含纯滞后 y[i] y[i-1] dt * (K * u_eff - y[i-1]) / T print(fKcr{Kcr:.3f} Tcr{Tcr:.3f}s - fKp{Kp:.3f} Ti{Ti:.3f}s Td{Td:.3f}s) return y, u逻辑说明这段复用了第2章的scan_kcr和第3章的PositionPID先扫临界参数、按Z-N表算PID、再做闭环仿真。仿真里反馈取上一拍y[i-1]对象输入用dn拍前的u[i-dn]体现纯滞后顺序不能反控制量是当前算出来的对象感受到的是dn拍之前算出来的。参数说明t_end要覆盖足够多振荡周期滞后较大时建议取对象时间常数的15倍以上sp保持1.0输出y的目标值也是1.0超调量可以直接读百分比。跑完把y画出来对照4.1的三个指标核对。典型结果是第一波超调接近30%甚至更高、第二波衰减到1/4左右这是Z-N的正常表现不是参数算错。如果第一波就冲过头、贴近执行机构限幅说明Kcr扫描时把饱和振荡当成了临界振荡——等幅振荡必须发生在输出未触限幅的前提下否则量到的不是临界周期而是饱和周期。4.3 超调偏大、衰减太慢时的经验修正Z-N表给的是能用的参数不是最优参数。明确要求小超调的场合两个常用做法一是直接换Tyreus-Luyben表行业内也叫T-L整定取Kp0.45Kcr、Ti2.2Tcr、TdTcr/6.3牺牲响应速度换鲁棒性压力调节和化工温度回路更常用二是在Z-N基础上手动收Kp先降20%~30%Ti放长50%Td暂时不动跑一次阶跃图看衰减比再微调。另一个常见手段是按对象类型给经验起步值和Z-N结果互相验证对象类型起步Kp量级起步Ti量级微分使用建议温度大惯性2~1060~300 s可给TdTi/8压力中速10~505~30 s慎用传感器噪声敏感流量快速0.5~51~10 s一般不用Td这张表的逻辑是惯性越大越依赖积分拉稳态微分只在大惯性对象上有明显收益压力、流量回路传感器噪声大微分对噪声的放大远大于对超调的抑制这也是很多现场压力调节PID参数经验值偏保守的原因。表格里的数值要在量程归一化前提下理解执行机构量程不同时整体平移。5. Z-N整定的工程坑和继电反馈自整定的替代路径5.1 不敢做临界振荡开环阶跃响应法的切线读法临界比例法不敢做Z-N还有开环法。系统切手动给定值一个阶跃记录反应曲线在拐点画切线读出纯滞后L和时间常数T加上对象静态增益K代入Z-N第一法公式PID参数取Kp1.2T/(KL)、Ti2L、Td0.5L。切线画法直接决定参数拐点选得偏前L偏小、Kp偏大这里没有自动化手段多画几次取平均。L/T这个比值同时决定了整条路是否适用L/T大于0.5时系统本身难控Z-N两种方法给出的参数都会偏激进需要换控制结构。5.2 量不准Tcr继电反馈辨识PLC自整定的常见底层逻辑临界振荡实验的两个痛点——手动搜Kcr慢、等幅振荡幅度不可控——在继电反馈里同时解决。用滞环继电器代替PID做闭环继电器幅值d固定系统会自己进入极限环振荡记录被调量的振荡幅值a和周期Tcr用描述函数估算临界增益Kcr4d/(πa)周期直接读Tcr。估算完成后再套Z-N或者T-L表这就是主流PLC和DCS自整定功能常见的内部路径三菱、西门子的自整定指令基本沿这条思路实现只是把实验和查表都封装成了黑盒。现场想验证自整定结果是否合理可以用vofa或示波器观察整定过程中的振荡波形确认a和Tcr的量级再决定是否采纳参数。5.3 大滞后与串级Z-N表覆盖不了的两种场景L/T偏大的回路Z-N给的Kp会让输出在小扰动下反复大幅动作这时候优先考虑串级结构副回路先把滞后后面的扰动压住主回路再去管设定值跟踪。串级的内外环时间间隔一般拉开5~10倍内环先整定外环再用内环闭环对象的等效模型做一次Z-N不要两个环同时用临界比例法硬试。继电器幅值d取执行机构可输出的5%~10%滞环h取测量噪声幅度的2倍以上这两个值定下来整定流程就和临界比例法完全一致只是Kcr不再靠手动放大Kp逼出来系统始终在可控的小幅振荡里完成辨识。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。