ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

基于信捷PLC的压缩机控制系统设计与梯形图程序实战详解

基于信捷PLC的压缩机控制系统设计与梯形图程序实战详解 简介面向工业自动化学习者与空调压缩机运维工程师这套PVC控制程序配套VC编写的上位机监控工具可实现压缩机运行参数采集、状态显示与异常判断属于工业控制与上位机软件开发结合的典型实例。压缩包共58个文件、约2.64MB其中包含PLC程序源代码、大量h/cpp上位机源码、可执行exe、调试用pdb/obj、MFC工程文件dsw/dsp/rc及说明文档等便于查看完整项目结构并二次开发。已有742人学习下载。借助源码可重点学习串口通信Serial.cpp/Plc.cpp如何对接PLC、OnlineData/TestDlg等模块如何完成数据解析与界面交互以及压缩机监控软件的工程组织方式。对于想了解工业上位机开发流程的读者这套代码提供了从数据通信、界面显示到异常报警的相对完整范例可用于校招项目、课程设计或实际产线改造参考。1. 项目背景与需求分析1.1 压缩机控制系统到底要解决什么问题压缩机这东西看着不起眼但在一家工厂里的地位就跟心脏似的。气动阀门要靠它供气吹瓶、喷漆、气刀吹水、气动执行机构全指着那一路压缩空气。我接过不少设备改造的活儿发现很多中小型工厂对压缩机的控制还停留在最原始的阶段一个压力开关到了上限停机到了下限启动没了。这种方案不是不能用但用起来是真的难受电机启停频繁、管网压力波动大、多台机器抢着启动严重的时候直接烧接触器。我自己写这套压缩机PLC程序当初就是为了解决现场这三类问题。第一压力波动太厉害后道工序用气量不稳定动不动就低压报警第二双机组运行时两台机器启动次数极不平衡一台累死一台闲死第三故障停机之后没人知道等到生产停了才发现气不够。这些问题用继电器逻辑不是不能做但逻辑复杂了以后接线多到你怀疑人生改一个功能要重新拉线根本不现实。所以核心思路就一条用PLC把这套逻辑全部接管过来用程序代替硬接线。压缩机的启停控制、加减载控制、轮换控制、故障判断全部跑在梯形图里。维护的时候打开软件看一眼梯形图哪一路有问题一目了然改逻辑就在电脑上拖几个触点的事不用动一根线。这篇东西我尽量写得实在一点不管是刚入门想练手的还是接到空压机改造项目不知道怎么下手的看完应该都能有个清晰的框架。1.2 控制方案选型为什么我选了信捷PLC说到PLC品牌三菱、西门子、欧姆龙都是老牌劲旅但我这套程序最终用的是信捷。原因很纯粹第一是性价比第二是上手速度快第三是技术支持资料好找。中小型设备改造甲方对成本敏感得很一台进口PLC的价钱够买三台国产的而信捷XC系列的指令结构跟三菱FX系列非常接近梯形图思维通用会写三菱的看了信捷的说明书半天就能上手。当然如果你手头有西门子S7-200 SMART或者三菱FX3U这篇文章里的逻辑照样用只是指令写法上要稍微做个转换。比如信捷的上升沿指令是PLS三菱也是PLS西门子则是R_TRIG区别不大。我后面贴的梯形图逻辑片段就以信捷XDPPro软件为例毕竟我用这台机器调试的程序就是在这上面跑的。硬件上用的是信捷XC3-24T-E继电器输出类型24个IO点对双机组压缩机来说刚好够用留了一两个备用点以防后面加功能。选这个型号还有一个考虑XC3系列本体自带两路模拟量输入可以直接接压力变送器的4-20mA信号不用另外加模拟量模块。压缩机控制最关键的输入信号就是管网压力有了本体模拟量通道硬件成本又能省一截。2. 整体控制逻辑设计2.1 压力控制方案滞回控制在压缩机上比PID更实用刚开始设计这套程序的时候我纠结过一个问题压力控制到底用PID还是用滞回控制。做过过程控制的朋友都知道PID在恒压控制上确实好用给定一个目标压力变频器拖电机调速压力稳稳的。但问题在于这套系统的执行机构是普通的定频电机只有启停两种状态没有调速手段PID输出的调节量根本无从执行。如果为了用PID硬上一个变频器成本瞬间翻好几倍甲方肯定不干。所以对于启停控制的压缩机滞回控制才是正解。滞回控制说白了就是设两个压力点一个启动压力一个停止压力中间留一个死区。举个例子我用气系统要求管网压力稳定在0.6-0.8MPa区间那我压力下限设0.6MPa到了这个点启动加载压力上限设0.8MPa到了这个点卸载。中间这0.2MPa的压力差就是死区防止频繁启停。这个逻辑跟家里空调温控是一个道理设定26度到了25度停机到了27度再启动中间就是滞回区间不然压缩机几秒钟就得启停一次谁都受不了。这个方案看着简单但里面有个参数设置的门道。死区设大了压力波动范围大后道工序容易出问题死区设小了电机启停频繁接触器和电机的寿命都会受影响。我自己的经验是对于0.6-0.8MPa的供气系统死区下限不要低于0.05MPa。如果管网容积大、用气量波动不剧烈可以适当压缩死区范围比如0.65-0.75MPa这样压力稳定性更好。反之如果管网容量小、瞬时用气量大死区就得放宽否则压缩机会被憋得一会儿一启停。2.2 多机组轮换逻辑运行时间均衡与先启先停双机轮换是这套程序的另一个核心模块。两台压缩机如果每次都是1号机先启动那1号机的运行时间会远远超过2号机时间一长1号机的保养周期到了而2号机还跟新的一样设备利用率严重不均。我做轮换逻辑的核心思路是记录每台机组的累计运行时间启动时优先启动运行时间短的那台停止时优先停掉运行时间长的机组让两台机器的工作量尽量拉平。启动顺序再细化一下正常自动模式下如果管网压力掉到启动压力以下系统先检查两台机的故障状态有故障的跳过然后比较两台机的运行时间运行时间短的那台优先启动。停止的时候反过来运行时间长的先停。如果两台机都在运行且压力仍然低于启动压力那就说明用气量已经超过单机供气能力了这时候启动第二台两台一起加载补气。轮换逻辑里还有一个容易踩的坑就是启动间隔。两台电机如果同时启动启动电流叠加对变压器冲击很大特别是变压器容量偏小的老车间严重情况下会直接把低压总开关顶跳了。所以我在程序里加了一个二启动延时第二台机组启动时先判断第一台机已经运行超过30秒才允许第二台启动。这个30秒是我根据现场电机启动时间实测调的如果现场变压器余量大可以缩短到10-15秒如果本身供电就紧张建议放到60秒以上。2.3 安全保护与故障联锁设计继电器控制方案里保护逻辑一般是靠热继电器、压力开关、温度开关这些硬元件去触发动作是可靠但问题是你不知道它因为什么停的也不方便做复杂的联锁。PLC方案里我全部改成了软逻辑判断配合输入信号能做到故障分类、声光报警、故障记忆甚至远程通知。我在这套程序里加了五类保护电机过载保护、排气高温保护、排气压力超高保护、相序断相保护以及紧急停机。电机过载信号直接从热继电器的常闭触点接入PLC输入点这个是最基本的排气高温用PT100温度变送器接到模拟量通道超过105度报警110度连锁停机排气压力超高接一个压力开关的常闭触点超压直接切断输出。相序保护器输出也串进PLC输入点三相电相序不对或者缺相时PLC直接禁止压缩机启动。这五类信号我全部做了锁存处理。什么叫锁存就是故障触发了以后即使故障源信号恢复了程序里这个故障状态也保持住必须人工确认复位才能重新启动。这个设计太重要了不然故障一瞬即过机器又自动启动了维修人员连故障原因都看不到。我在触摸屏上把这些故障分成了三类红色报警表示需要立刻停机处理的黄色报警表示可以维持运行但需要关注的白色提示表示设备处于待机或者手动状态。经过实际运行验证这套分级报警逻辑能让现场操作工在第一时间判断问题的严重程度不会因为一个小报警误停了整条产线。3. 程序设计实操从IO表到梯形图3.1 IO点表与硬件接线规划写程序之前先把IO点表列清楚。这一步千万别省我见过不少新手一上来就打开软件写程序写到一半发现输入点不够用了或者信号接错了通道返工返到怀疑人生。我这份双机组压缩机的IO分配是这样规划的地址功能说明信号类型X01号机启动按钮常开输入X11号机停止按钮常闭输入X22号机启动按钮常开输入X32号机停止按钮常闭输入X4急停按钮常闭输入X51号机热继电器过载常闭输入X62号机热继电器过载常闭输入X71号机排气高温开关常闭输入X102号机排气高温开关常闭输入X11相序保护器输出常开输入X12手动/自动切换常开输入Y01号机主接触器输出Y11号机加载电磁阀输出Y22号机主接触器输出Y32号机加载电磁阀输出Y4故障报警灯输出Y5报警蜂鸣器输出注意停止按钮和故障信号全部用常闭触点接入这样万一信号线断了PLC检测到的是断开状态会当作停止或者故障来处理属于失效安全设计。以前见过有电工把急停接到常开点上线被老鼠咬断之后急停功能完全失效还好没出大事后来我全部改成常闭点接入。接线方面所有输入信号的公共端并到PLC的COM端输出端根据负载类型选电源。继电器输出型PLC的好处就是交直流都能带主接触器和电磁阀线圈用220V交流供电没问题。建议在输出端的公共线上加一个2A的熔断器不然哪一路输出短路了PLC内部继电器直接烧穿那就得换板子了。3.2 核心梯形图逻辑拆解IO表定完程序框架就可以搭建了。我用结构化方式把程序分成了四个功能块手动控制块、自动控制块、轮换调度块、故障处理块。信捷XDPPro软件里支持子程序调用主程序里用CALL指令调这四个子程序逻辑清楚后面维护也好查。下面我把自动控制里最核心的加载卸载逻辑写出来用结构化文本便于理解转换成梯形图也就是几行的事// 自动控制主逻辑 - 加载/卸载判断 IF 设备总启动 AND NOT 急停 THEN // 滞回控制核心压力低启动加载压力高停止加载 IF 模拟量压力 启动压力设定值 THEN 加载请求 : TRUE; ELSIF 模拟量压力 停止压力设定值 THEN 加载请求 : FALSE; END_IF; END_IF; // 防频繁启动延时控制 IF 加载请求上升沿 THEN 启动延时定时器(目标 : 设定延时时间); END_IF; IF 启动延时定时器完成 THEN 1号机主接触器输出 : TRUE; END_IF;这里面的关键逻辑是加载请求是置位优先还是复位优先。我采用的是复位优先加死区控制意思是压力一旦达到上限加载请求无条件复位这样能保证不会出现超压还在加载的情况。启动延时定时器的设定值我一般推荐用可调参数在触摸屏上设一个输入框默认给20秒。这个20秒的含义是压力低到启动值后先等20秒再启动防止压力只是瞬时波动导致误启动也顺便让加载电磁阀先动作把系统压力建立起来再合主接触器降低启动负载。轮换调度的核心代码逻辑也不复杂思路就是记录两台机的运行时间。信捷的定时器T在断电后会复位所以我得用累计运行时间寄存器用1秒脉冲对运行中的机组计时把累计值存到掉电保持的寄存器区域。启动时比较M0和M1两个寄存器的值谁小谁先启。有一点要特别注意信捷XC3的掉电保持区默认是D512开始的部分设置累计时间寄存器的时候要选对地址不然停机断电后再上电累计时间清零了轮换逻辑就白做了。3.3 参数设置与触摸屏联动这套程序我配了一个7寸的触摸屏主要显示四块内容管网压力实时值、两台机的启停状态和运行时间、参数设定页面、故障报警页面。参数设定页面里的内容全部放到PLC的掉电保持寄存器里这样现场操作工可以直接改启动压力、停止压力、延时时间这些参数不需要每次改参数都开电脑连PLC。触摸屏和PLC之间的通讯用串口RS485Modbus协议。信捷PLC做Modbus从站是标配功能触摸屏做Modbus主站去读写PLC的寄存器。配置的时候注意几个地址映射问题PLC的M区跟Modbus地址不是完全一一对应的关系一般在触摸屏组态软件里有专门的PLC型号选项选对了型号就能自动映射不用自己算地址偏移。如果用的不是同一个牌子那就要查协议映射表了。我见过有同行用国产触摸屏配信捷PLC地址配错导致读回来的数据完全不对排查了半天最后发现是地址偏移了一位。压力变送器的模拟量转换部分我用的是信捷XC3自带的2路AD通道。输入信号4-20mA对应0-4000的数字量程序里用一个线性转换指令就能算出实际压力值。公式很简单实际压力 采集值 * (压力上限 - 压力下限) / 4000 压力下限比如量程0-1.6MPa的压力变送器采集值如果是2000那实际压力就是2000乘以1.6再除以4000等于0.8MPa。这个换算不复杂但一定要在程序里做滤波处理不然压力波动剧烈的时候采集值会在真实值附近跳来跳去造成加载卸载判断反复变化。我一般做两次滤波第一次用均值滤波取最近20次模拟量采样值的平均第二次加一个变化率限制单次采样变化超过0.02MPa就直接忽略掉认定是干扰信号。这两层滤波做完压力曲线基本就平滑了。4. 现场接线调试与高频故障排查4.1 模拟联调不接主电路先验证逻辑现场调试最大的忌讳就是一上来就送电带负载。我这套程序在实验室阶段就用了一个模拟调试台把现场会接的开关量信号全部用按钮和指示灯模拟出来。具体做法是PLC的输入点X0-X12全部接上自复位按钮输出点Y0-Y5全部接上指示灯。按下一个启动按钮看启动输出指示灯有没有亮按一下热继电器信号看报警输出指示灯有没有亮。这一步特别关键逻辑上的问题在上电之前基本都能暴露出来。我记得第一次调试时候就发现一个问题急停按钮复位之后系统没有保持停机状态而是直接恢复到自动待机状态。这个在模拟调试时一眼就看出来了因为急停按钮用的是常闭点复位后常闭点恢复导通程序里如果只用了常闭点的常闭接点去判断急停状态那急停不动作时反而是导通的程序根本检测不到“急停动作过”这个状态。必须用置位复位思路把急停做成一个锁存标志急停动作时置1人工复位时才清0。模拟联调还有一个好处就是可以验证轮换逻辑。我在模拟台上按了好几次启动停止观察两台机指示灯的点亮顺序确认运行时间短的先启动。如果发现轮换方向不对直接在程序里比对逻辑改一下就行这要是在现场改光停机审批和断电挂牌就够你等一上午的。4.2 现场调试高频问题实录调试记录里挑三个最典型的案例说说。第一个是压力波动大。程序逻辑看着没问题加载卸载都按照设定值在工作但现场压力表指针来回摆动幅度快到0.15MPa了。排查下来发现是压力变送器的安装位置有问题。变送器安装在压缩机排气管后的单向阀前面气流通过时产生明显的动态压力波动PLC收到的信号自然跟着剧烈起伏。处理方法是在变送器取压口加了一段缓冲管并且把仪表安装在缓冲管末端脉动气流经过缓冲管后基本被天然阻断了压力波动幅度降到0.03MPa以内。这个属于机械安装的问题程序里滤波能缓解但不能治本根源还是得从取压方式入手。第二个是双机组频繁出现同时启动。程序里明明加了二启动延时现场还是同时跑了。检查梯形图发现延时定时器用的是普通型T指令但这个定时器在扫描周期比较长的时候复位信号和定时器完成信号出现了竞争关系。加载请求一触发定时器还没完成累加就被复位了导致延时逻辑形同虚设。改成脉冲型定时器并且在复位逻辑前加了一个定时器完成状态保持的中间继电器问题解决。第三个是通讯干扰。触摸屏上压力值偶尔跳变到满量程时间没有规律但大多集中在1号机组启动瞬间。这个典型的强电干扰主接触器吸合瞬间大电流在电缆上产生强电磁场耦合到RS485通讯线上。处理方法有三步通讯线换成双绞屏蔽线屏蔽层单端接地通讯线走独立的线槽跟主电缆拉开距离在触摸屏通讯口两端各加一个磁环。三步做完再没出现过通讯异常。4.3 程序优化与维护心得程序跑稳定之后我一直在持续做微调优化。第一版程序里的参数全部是固定值写在程序里的后来改成了触摸屏可调灵活性高了很多。第二版又加了一个运行记录功能把每天的启停次数和累计运行时间存在PLC里定期清空一次这样能看出来设备的使用规律帮甲方安排保养计划。维护角度还有一个建议程序里所有报警输出最终都汇总到了一个“综合故障”输出点上。这个点接到值班室的声光报警器上任何故障都能第一时间被发现。如果项目预算允许可以加一个物联网远程报警模块故障时直接把报警信息推到手机上远程复位也可以做。不过这个要看现场的网络条件和甲方需求不是必须的功能。最后再说一个经验程序写好了务必备份。信捷的程序文件是XDP格式不光是程序还有注释、触摸屏画面配置这些。我习惯每改一版程序就复制一份存档命名按日期加版本号比如compressor_v20240815.xdp。这套压缩机程序跑了半年中间改了三版每次都能追溯回上一个稳定版本心里有底得多。现场维护的时候只要带着U盘插上USB下载线几分钟就能把程序导出来查看比对着硬接线猜逻辑痛快太多了。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进