ARTICLE DETAIL

资讯详情

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

S7-1200 PID水箱液位控制:博图V18从组态到整定实战

S7-1200 PID水箱液位控制:博图V18从组态到整定实战 1. 水箱液位控制到底难在哪先搞清楚被控对象的脾气水箱液位控制是过程控制里最经典的入门场景也是最能暴露问题的场景。很多人第一次用S7-1200做PID代码写完了、块也调用了结果要么液位一直在设定值附近来回振荡要么响应慢得像蜗牛爬要么阀门频繁动作导致执行机构提前报废。问题往往不在PID指令本身而在于没有先搞清楚被控对象的动态特性。水箱液位系统本质上是一个一阶惯性加纯滞后的对象。进水阀开度变化后液位不会立刻响应中间存在管道传输延迟和容积滞后。这个滞后时间决定了PID参数能调多激进。如果滞后大而积分作用强系统必然振荡如果滞后小但比例增益太低响应又会拖沓。所以调PID之前先做一次阶跃响应测试记录液位从稳定到新稳定的过渡曲线比盲目试参数高效得多。S7-1200在博图V18中提供了PID_Compact指令这是目前S7-1200系列最推荐的PID功能块。它支持自整定、手动/自动无扰切换、抗积分饱和还能通过工艺对象进行组态。相比老式的PID_Compact早期版本V18版本在自整定算法和诊断功能上有明显改进。选它而不是自己写PID逻辑核心原因是自整定能省掉大量试参时间诊断功能能在出问题时告诉你哪里不对。这个内容适合三类人一是刚接触S7-1200 PID的自动化工程师二是需要快速交付水箱/水池类控制项目的现场调试人员三是想从S7-200 SMART迁移到S7-1200平台的老手。不管你是哪一类下面的步骤和参数逻辑都能直接拿去用。注意博图V18安装后如果找不到许可证先检查Automation License Manager服务是否启动再确认授权是否已传送到本地硬盘。仿真无法启动的情况多数是PLCSIM V18没有和博图版本匹配安装。2. 博图V18里的PID组态从工艺对象到指令调用2.1 为什么必须用工艺对象而不是直接调指令PID_Compact在博图里有两种用法一种是直接在主程序里调用指令并手动填写参数另一种是先创建一个PID工艺对象再在程序里调用该对象。强烈建议用工艺对象方式原因有三个。第一工艺对象把参数存储在独立的DB块里下载程序时不会因为OB块重新初始化而丢失调好的参数。第二工艺对象支持在线自整定自整定过程中博图会弹出曲线窗口能直观看到整定进度和效果。第三工艺对象自带诊断功能当输入输出超出量程或参数不合理时会在博图诊断缓冲区里给出明确提示而不是让程序默默跑飞。创建工艺对象的路径是项目树中打开CPU文件夹双击“工艺对象”在弹出的对话框中点击“新增对象”选择“PID控制”命名为PID_TankLevel。命名建议带上被控变量名后期维护时一眼就能看出这个PID是管什么的。2.2 输入输出参数的量程匹配最容易埋雷的地方工艺对象创建后第一件事是配置输入和输出参数。这里有一个非常容易出错的点过程值量程和输出量程必须与实际传感器和执行器匹配。假设液位变送器是4-20mA输出对应量程0-2000mm。在博图中Input_PER引脚需要连接经过NORM_X和SCALE_X转换后的实际工程量或者直接使用Input引脚输入工程量数值。如果使用Input_PER则需要在工艺对象组态中设置过程值上下限为0和2000单位选mm。如果使用Input则程序里直接给工程量工艺对象里设置同样的上下限。输出方面如果控制的是比例阀输出4-20mA对应0-100%开度那么输出量程设为0-100单位%。如果控制的是开关阀加占空比调节输出量程设为0-100但执行机构需要把百分比转换成PWM占空比。实操心得我见过太多人把过程值上下限设成0-27648结果PID输出一直在极端值附近打转。原因是输入没有做量程转换PID以为液位一直在满量程附近。记住工艺对象里的过程值上下限是工程量不是原始AD值。2.3 采样时间与PID运算周期的关系PID_Compact的采样时间SampleTime决定了PID算法多久执行一次。这个值不是随便填的它和OB块的循环周期有直接关系。如果PID_Compact放在OB1中调用采样时间应设置为OB1的循环周期通常设为100ms。如果放在循环中断OB30中调用采样时间就是OB30的设定周期比如200ms。采样时间必须大于等于实际调用周期否则PID会报错。为什么采样时间不能太小因为液位系统的滞后时间通常在秒级甚至十秒级采样时间设成10ms没有意义反而增加CPU负担。一般经验是采样时间取滞后时间的十分之一到二十分之一。如果阶跃响应测试得到滞后时间约5秒采样时间设200-500ms都合理。3. 三步搞定PID参数整定从自整定到手动微调3.1 第一步预调节自整定让系统先稳下来博图V18的PID_Compact支持两种自整定模式预调节和精确调节。预调节用于系统从未稳定状态开始精确调节用于系统已经在设定值附近但需要优化动态性能。启动预调节的步骤在工艺对象的调试窗口中点击“启动预调节”按钮。此时PID会输出一个阶跃信号观察液位响应。预调节过程中PID会自动计算出一组参数包括比例增益、积分时间、微分时间。整个过程通常持续几分钟取决于系统滞后大小。预调节成功的标志是调试窗口显示“预调节完成”并且给出的参数能让液位稳定在设定值附近超调量在可接受范围内。如果预调节失败常见原因是过程值没有变化检查传感器和执行器、输出达到限幅检查阀门是否卡死、噪声太大检查信号屏蔽和滤波。注意预调节期间不要手动干预输出也不要切换手动模式否则自整定会中断。如果系统不允许阶跃扰动比如某些不允许液位大幅波动的场合预调节可能不适用需要改用手动整定。3.2 第二步精确调节优化动态响应预调节完成后如果发现响应还是偏慢或者超调偏大可以启动精确调节。精确调节会在设定值附近施加小幅度扰动进一步优化参数。精确调节的前提是系统已经稳定在设定值附近且过程值波动不超过设定值的5%。启动后PID会尝试不同的参数组合找到使误差平方积分最小的那组。这个过程比预调节快通常几十秒到几分钟。精确调节完成后PID参数会自动更新。此时可以观察液位曲线如果超调量小于5%、调节时间在可接受范围内就可以进入下一步。如果仍然不理想说明被控对象特性太特殊需要手动微调。3.3 第三步手动微调解决自整定搞不定的问题自整定不是万能的。有些系统因为非线性、死区、阀门特性差等原因自整定给出的参数只能算“能用”离“好用”还有距离。这时候需要手动微调。手动微调的核心逻辑是先调比例再调积分最后调微分。比例增益决定响应速度积分时间决定消除静差的速度微分时间决定抑制超调的能力。具体操作把积分时间设得很大比如9999秒微分时间设0然后逐步增大比例增益直到液位开始出现小幅等幅振荡。此时的比例增益记为Kp_critical振荡周期记为T_critical。然后按经验公式比例增益取0.6 * Kp_critical积分时间取0.5 * T_critical微分时间取0.125 * T_critical。这组参数通常能给出较好的动态响应。如果系统不允许振荡那就用保守法比例增益从自整定值的一半开始逐步增加每次增加后观察一个完整调节周期直到响应速度满足要求但超调不超过10%。积分时间从自整定值的两倍开始逐步减小直到静差在可接受时间内消除。实操心得液位系统的微分作用通常不需要太强因为液位信号本身可能有噪声微分会放大噪声。如果传感器信号波动大建议微分时间设0只用PI控制。我调试过的大多数水箱液位系统PI控制已经足够加微分反而让阀门动作更频繁。4. 程序调用与手动/自动切换的工程细节4.1 PID_Compact的调用位置和周期PID_Compact必须放在循环中断OB中调用而不是OB1。原因是OB1的循环周期不固定受程序扫描时间影响会导致PID采样时间抖动。循环中断OB30的周期是固定的比如100ms或200ms这样PID运算周期稳定参数才有意义。在OB30中调用PID_Compact时需要把工艺对象的背景DB作为参数传入。调用格式如下CALL PID_Compact_DB( Setpoint : HMI_Setpoint, Input : Level_Actual, Output Valve_Output, ManualEnable : Manual_Mode, ManualValue : Manual_Output_Value, Reset : PID_Reset, ModeActivate : Mode_Switch );其中Setpoint是设定值Input是过程值Output是输出值。ManualEnable为TRUE时进入手动模式ManualValue是手动输出值。ModeActivate用于切换自动/手动模式。4.2 无扰切换的实现逻辑手动切自动时如果PID输出和手动输出不一致切换瞬间会产生扰动。PID_Compact内部有输出跟踪功能但需要正确配置。在工艺对象的组态中勾选“手动模式时输出跟踪”选项。这样在手动模式下PID内部积分器会跟踪手动输出值切换回自动时输出不会跳变。如果没有勾选这个选项切换瞬间PID会从积分器当前值开始输出可能和手动值差很远。注意无扰切换的前提是手动模式下PID仍在调用。如果手动模式下停止调用PID_Compact积分器状态不更新切换时照样有扰动。所以即使手动模式也要保持OB30中调用PID指令。4.3 输出限幅和抗积分饱和水箱液位控制中阀门开度有物理限制比如0-100%。如果PID输出超过100%阀门已经全开但液位还没到设定值积分器会继续累积导致超调。这就是积分饱和。PID_Compact自带抗积分饱和功能但需要在工艺对象中设置输出上下限。设置输出上限为100下限为0。当输出达到限幅时PID会自动停止积分累积。如果没设限幅抗饱和功能不生效。另外如果阀门有最小开度限制比如低于10%时阀门实际关闭那么输出下限应设为10避免PID在0-10%区间无效调节。5. 常见问题排查与现场调试避坑指南5.1 PID输出不动或一直满输出这是现场最常见的问题。排查顺序如下现象可能原因排查方法输出一直0过程值大于设定值且PID方向反了检查工艺对象中“输出方向”设置液位控制通常选“反向”输出一直100过程值小于设定值且PID方向反了同上或检查设定值是否合理输出不动PID未使能或处于手动模式检查ManualEnable和ModeActivate引脚状态输出不动采样时间设置错误检查SampleTime是否大于OB30周期输出跳变输入信号噪声大增加输入滤波或在PID前加一阶滤波方向设置是新手最容易忽略的。液位控制中液位低于设定值需要开大阀门所以输出应随误差增大而增大对应“反向”作用。如果设成“正向”液位越低输出越小系统直接跑飞。5.2 液位振荡不止振荡的原因通常有三个比例增益太大、积分时间太小、滞后时间太大但PID参数太激进。排查方法先把积分时间设大、微分设0只留比例作用。如果仍然振荡说明比例增益太大逐步减小直到振荡消失。然后逐步减小积分时间直到静差消除但振荡不出现。如果系统滞后特别大比如液位响应滞后超过30秒那PID参数必须非常保守或者考虑串级控制。实操心得我遇到过一个大水箱滞后时间接近1分钟自整定给出的参数仍然振荡。后来把比例增益降到自整定值的三分之一积分时间加到三倍系统才稳定。滞后大的系统宁可慢一点也不要追求快速响应。5.3 博图V18仿真无法启动或PID不运行仿真环境下PID不运行常见原因有两个一是PLCSIM没有正确安装或版本不匹配二是工艺对象在仿真中不支持某些功能。博图V18对应的PLCSIM版本是V18如果装了V17的PLCSIM仿真启动会报错。另外PID_Compact在仿真中支持基本功能但自整定功能在仿真中可能无法正常执行因为仿真环境的扫描周期和真实CPU有差异。建议自整定在真实CPU上做仿真只用来验证逻辑。如果仿真中PID输出一直是0检查OB30是否在仿真中正常运行。有些情况下仿真启动后OB30没有自动启用需要手动触发一次。5.4 常见问题速查表问题快速排查解决PID输出反向检查输出方向改为反向输出跳变检查输入滤波增加滤波或屏蔽静差消不掉检查积分时间减小积分时间超调大检查微分和比例增大微分或减小比例阀门频繁动作检查微分和采样时间减小微分增大采样时间自整定失败检查过程值变化确认传感器和执行器正常仿真PID不动检查OB30和PLCSIM版本更新PLCSIM手动触发OB306. 从水箱液位延伸到更复杂的PID应用水箱液位控制跑通之后这套方法可以迁移到很多类似场景。比如温度控制被控对象也是大惯性加滞后PID参数整定逻辑几乎一样只是温度系统的滞后通常更大积分时间要设得更长。流量控制则相反响应快、滞后小比例增益可以设大一些积分时间可以短一些。如果液位系统有多个水箱串联或者进水流量本身波动大单回路PID可能不够用。这时候可以考虑串级控制主PID控制液位输出作为副PID的设定值副PID控制进水流量。串级控制能有效抑制流量波动对液位的影响。S7-1200支持多个PID_Compact实例串级控制只需要调用两个工艺对象把主PID的输出连接到副PID的设定值即可。前馈控制也是液位系统常用的补充手段。如果知道进水流量会突变比如上游泵启动可以在PID输出上叠加一个前馈量提前补偿扰动。前馈量可以通过实验确定记录泵启动后液位的变化趋势反推出需要的阀门开度补偿值。前馈加PID能显著减小扰动引起的液位波动。我个人在实际调试中的体会是PID参数没有绝对的最优只有针对特定系统的最合适。同一套参数换一个水箱、换一个阀门可能就要重新整定。所以与其死记参数不如掌握整定方法和排查思路。自整定能帮你快速找到起点但最终效果还是要靠现场微调。另外信号质量比PID参数更重要传感器噪声大、信号漂移再好的PID也调不出稳定曲线。先把信号做干净再调PID事半功倍。
返回列表