ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

压缩机PLC控制程序完整编写思路与现场调试经验分享

压缩机PLC控制程序完整编写思路与现场调试经验分享 简介一套面向工业自动化与PLC编程学习者的空调压缩机控制工程源码聚焦通过上位机与PLC通信来实现压缩机参数检测与状态判断。作者基于Visual C开发了监控界面及串口通信模块可读取PLC信号并分析运行是否正常适用于具备C基础、希望了解工控上下位机联调或学习MFC程序设计的人员。整个压缩包共58个文件大小约2.64MB主要包含14个h头文件、13个cpp源文件、编程工具生成的obj/exe/pdb中间及可执行文件以及rc资源、ico图标、项目配置和ReadMe说明等目录结构清晰便于直接查看工程全貌。目前已有742人学习下载。资料中含有完整的MFC程序框架、PLC通信处理类、数据监测对话框、压缩机和主窗口代码覆盖界面布局、串口数据收发、状态解析与结果展示等关键环节可帮助读者快速上手基于VC6.0的工业控制软件开发理解空调压缩机控制系统的基本设计流程与实现思路也可作为课程设计或相关项目开发的参考资料。 做压缩机控制这块说实话一开始我也犹豫过要不要直接买成品控制柜。后来接了个老客户的压缩机改造项目要求几台机器既能独立运行又能联动数据还得送上位机现场的维修师傅也要能看懂逻辑。市面上成品板子要么逻辑固化改不动要么报价离谱干脆自己用PLC写了一整套程序。断断续续折腾了大半个月从画I/O表到现场调试坑没少踩、经验也攒了不少。这篇就把我编写压缩机PLC程序的完整思路、关键逻辑和现场踩坑实录整理出来适合厂里搞设备维护、自动化的同行也适合刚入门想找个真实项目练手的PLC初学者。1. 压缩机控制的核心需求与方案选型1.1 压缩机控制到底在管哪些事很多人以为压缩机控制就是“压力到了就停低了就启”真上手做会发现完全不是这么回事。空压机的控制对象是一个供气系统核心目标是用最经济的方式让管网压力稳定在用气端要求的范围内。拆开来看至少包括五块电机的启停和正反转保护、加载与卸载电磁阀的动作时序、排气压力和排气温度的实时采集、润滑油压差等关键保护信号、以及多台机器联控时的轮换逻辑。以最常见的螺杆空压机为例它不能像冰箱一样直接靠启停压缩机来稳压。因为电机启动电流大频繁启停对电网和机械寿命都是考验。所以标准的控制方式是“加载-卸载”模式压力达到上限时卸载电磁阀动作把进气阀关闭、油气分离器内的压力释放掉电机继续空转但不压缩空气压力跌到下限时加载电磁阀动作恢复进气、开始正常打气。只有空载状态持续一定时间后才允许电机停机。这个逻辑里所有时间参数都要可调否则不同用气工况下会频繁加卸载能耗和磨损都很严重。1.2 为什么不用成品方案非要自己编市场上不是没有现成的空压机控制器几百到两三千的都有。但成品方案有几个让我接受不了的短板第一是控制逻辑黑盒厂商不开放底层梯形图想改个延时时间、加一路报警都得看厂商脸色甚至换硬件第二是通讯接口和协议绑定严重想进厂里的SCADA上位机要么加钱买网关要么协议不开放第三是故障处理策略太死板很多成品板子对堵转、缺相、超温的处理就是单一跳机没有分级保护和自动重启的逻辑。自己用PLC写这套程序最大的好处是逻辑完全透明每一行都能跟维修师傅解释清楚。出了问题直接在线监控梯形图触点通断一目了然。另外I/O点数可以按实际需求配置今天要加一台联动明天要接一个温度变送器自己拿电脑改改就能搞定不用再买新控制板。对于设备多、改造频繁的工厂来说这种灵活性带来的隐性收益比省的那点硬件成本更值钱。1.3 硬件选型思路PLC、传感器与电气元件既然决定了自研硬件选型就得抠细节。我这次选的是信捷XDM系列的PLC原因有三一是支持模拟量输入自带两路AD省一个扩展模块的钱二是本体带网口支持Modbus TCP和RTU后面接上位机或者海康相机做视觉检测都很方便三是编程软件XDzero免费而且支持FB块结构化编程程序做模块化拆分后会清晰很多。当然你要是厂里统一用三菱或者西门子也完全没问题控制逻辑本身是通用的只是指令写法不同。传感器方面压力变送器选了两线制4-20mA输出的量程0-1.6MPa供电24V温度采集直接用PT100铂电阻接到PLC的模拟量模块做三线制接法可以抵消导线电阻。电气回路上主电机用接触器加热继电器配置了三相互感器做缺相和过流检测另外加了相序继电器。这些保护我坚持一个原则能用硬接线做的就不依赖程序。比如热继电器和相序保护一旦动作直接切断接触器线圈回路PLC只是做状态监控和报警显示就算程序跑飞了该跳闸还是会跳闸这是安全底线。2. 控制程序整体设计思路与逻辑架构2.1 程序框架主程序、加载控制与报警子程序整套程序我没feather写成一坨梯形图而是按功能拆成了主程序轮询、加载/卸载控制逻辑、报警与复位处理、多机联控逻辑、数据通讯这么几个模块。信捷的编程软件里支持子程序和FB功能块我把报警判断、模拟量滤波、时间累积这些复用性强的逻辑封装成FB这样多台压缩机的程序只需要调用同一个FB改参数的时候只改FB内部不用每台都翻一遍梯形图。主程序按扫描周期循环运行但不同模块的执行频率不一样。模拟量滤波和压力判断放在每周期执行轮换计时和累计运行时间用定时中断每分钟刷新一次通讯数据打包在子程序里按需触发。这样做的好处是PLC的扫描周期稳定不会因为通讯指令占用过长导致控制逻辑响应变慢。实际测试下来程序扫描周期稳定在2毫秒左右远优于空压机控制对实时性的要求。2.2 启动与加载时序为什么不能一按启动就打气启动时序是整个程序里最需要打磨的地方。压缩机如果一启动就直接加载进气阀打开、油气分离器建立压力电机等于带载启动启动电流会非常难看对电网和机械冲击都大。正确的逻辑应该是按下启动按钮后先输出卸载电磁阀控制信号让进气阀处于关闭位置然后接触器吸合、电机自由启动加速电机运行起来后延时3到5秒让油气分离器内部压力建起来、润滑系统正常循环再切到加载状态慢慢打开进气阀开始正常供气。这个“先卸载启动、延时再加载”的动作我用了两个定时器串联实现。第一个定时器做启动前三秒的安全延时第二个定时器在第一个计时完成后开始计时做加载后压力建立确认确认压力没有异常才把加载状态置位。还有一个细节是停机时也要先卸载再停机按下停止按钮后系统先输出卸载信号这时电机还在转但已经不打气了油气分离器内部的压力通过泄放阀降下来延时10秒左右再断开接触器。这样下次启动时管道里没有憋着压力电机没有带压启动的危险。2.3 压力控制策略回差控制与空载延时停机压力控制的经典做法就是双点回差控制也就是常说的滞回控制。以0.8MPa供气压力为例我设定加载压力0.75MPa、卸载压力0.82MPa。压力低于0.75MPa时加载高于0.82MPa时卸载中间这0.07MPa就是回差区间。这个回差非常关键如果不做回差、用一个点去切换压力在设定点附近小幅波动时加载卸载电磁阀会高频动作阀芯磨损快不说压力波动也让用气设备受不了。具体实现上模拟量模块读回来的压力是数字量需要先做工程量换算。我用的是4-20mA变送器量程0-1.6MPa信捷XDM的AD是12位数字量范围0-4095但4mA对应的是约819不是0。所以换算公式是实际压力 (AD值 - 819) / (4095 - 819) × 1.6MPa。程序里我直接用浮点运算指令算然后把结果放到掉电保持寄存器里方便调试时在触摸屏上直接查看。空载延时停机的时间我设为30秒。意思是卸载状态持续30秒后系统判断当前用气量小不需要维持空转就自动停掉电机。这个时间设置太短压缩机会频繁启停太长又浪费电。30秒是比较折中的值实际运行时用气比较规律的场合可以适当延长。这个参数我在触摸屏上做了数值设定入口操作工可以根据工况自己微调。2.4 保护逻辑的分级设计哪些信号必须硬接线保护逻辑我分了三个层级硬接线直接切断、PLC程序快速停机、PLC程序报警提示不停机。第一层级是热继电器、相序保护器、急停按钮这些通过常闭触点串在接触器控制回路里动作了就是硬切断PLC管不着也管不了。第二层级是排气温度超过110℃、油压差低于设定值这类信号进PLC程序扫描到之后立即断开接触器输出并且自锁直到人工复位。第三层级是压力传感器断线、冷却风扇过载、油滤堵塞等只报警提示不停机不然停机造成的生产损失比设备隐患还大。程序里的报警处理用了置位和复位指令任何一个报警条件满足就把相应的报警位和停机位同时置位停机位一旦置位不管其他条件怎么变化电机输出都会被封锁。复位按钮只在报警原因消除后才能清除报警位。这个设计是为了避免现场“就地复位然后马上又跳”的情况反复发生逼着操作工先处理故障原因再复位。报警信息通过触摸屏显示文字和指示灯双重提示便于维保人员快速定位。3. 关键程序段编写与调试验证3.1 I/O分配表动手编程前必做的功课我先说不做I/O分配表直接写程序的后果——我年轻时这么干过后来改得头大。I/O分配表就是一张清单把每一个输入输出点位、地址编号、信号类型、对应设备名称列出来。这不仅是给你自己看的后面接线电工要看、运维师傅要看甚至审计验收也要看。我这次分配的原则是输入用X0开始的连续地址输出用Y0开始的连续地址模拟量用AD通道编号全部留出余量方便扩展。拿这套压缩机来说数字量输入分配了启动按钮、停止按钮、急停、压力开关下限、压力开关上限、油压差开关、排气高温开关、相序异常、热继电器过载、复位按钮总共10个DI。数字量输出分配了主接触器、加载电磁阀、卸载电磁阀、运行指示灯、故障指示灯、卸载指示灯共6个DO。模拟量输入用了两路一路接压力变送器4-20mA一路接PT100测排气温度。剩余点位预留了联控通讯和备用通道。具体地址如下表信号名称PLC地址信号类型备注启动按钮X0DI常开带指示灯反馈停止按钮X1DI常闭按下优先断开急停按钮X2DI常闭硬接线到接触器回路油压差开关X5DI常开动作时报警停机排气高温开关X6DI常开动作时报警停机相序保护X7DI常闭硬接线同时进PLC热继电器X10DI常闭硬接线同时进PLC复位按钮X11DI常开故障复位主接触器Y0DO直接驱动接触器加载电磁阀Y1DO加载时通电卸载电磁阀Y2DO卸载时通电停机断电运行指示灯Y3DO绿色故障指示灯Y4DO红色闪烁压力变送器AD0AI 4-20mA0-1.6MPaPT100温度AD2AI PT1000-150℃3.2 启动与自动运行程序段的梯形图实现编程时我把整个自动流程拆成几个状态锁存段。第一段是电机启动控制启动按钮按下后如果在自动模式且没有停机位和故障位就把电机运行标志置位。停止按钮按下或者故障停机位动作则复位移除运行标志。这个运行标志会去控制Y0主接触器但实际输出前还要串联一个“启动卸载连锁标志”确保启动时处于卸载状态。第二段是加载控制电机运行标志为ON且启动延时定时器计时完成且压力低于设定加载值时置位加载标志输出Y1加载电磁阀。当压力高于卸载值时复位加载标志同时置位卸载标志输出Y2卸载电磁阀。卸载的同时启动空载计时器。空载运行时间超过设定值后直接复位电机运行标志完成自动停机。第三段是保护联锁油压差、高温、热继电、相序异常任何一个信号为ON立即置位故障锁存切断电机运行标志同时输出故障指示灯。故障锁存只有在复位按钮按下、且所有故障源已恢复为正常状态时才复位。这里我要强调一下故障信号的输入类型常开还是常闭一定要在I/O表里标清楚否则接线接成常闭程序里写常开不断线时反而是报警状态这种低级错误排起来特别费时间。3.3 模拟量处理与压力实时计算压力变送器信号接入PLC的AD0通道后程序里我写了专用的模拟量处理FB包含滤波和工程量换算。滤波用的是滑动平均连续采集5个扫描周期的AD值去掉最大值最小值后取平均值。这一步极有必要因为现场动力线、接触器吸合都可能会对模拟量产生脉冲干扰不做滤波的话压力值会偶尔跳变导致加载卸载误动作。工程量换算我直接用浮点计算指令把滤波后的AD整数值转成浮点数然后按公式换算成兆帕压力值。具体是压力 (AD浮点值 - 819.0) × 1.6 / (4095.0 - 819.0)。换算结果存到掉电保持寄存器D100触摸屏直接读D100显示管网压力。我在调试时用标准压力表做了一次线性校验0MPa时AD值约8190.8MPa时约24571.6MPa时约4095三个点确认下来误差都在正负0.5%以内足够满足控制需要了。3.4 仿真测试与现场调试的关键步骤程序写完后先别急着上现场我用信捷的编程软件自带的在线仿真跑了一遍。仿真器里可以手动强制输入信号我把启动、压力到上限、压力回下限、超温故障这些场景全部模拟了一遍重点观察各个定时器和状态标志的切换顺序是否正确。仿真测试能抓出大部分逻辑漏洞比如我发现启动时卸载标志和加载标志有过同时为ON的情况会导致两个电磁阀同时带电这在现场会造成气路逻辑混乱仿真阶段就修掉了。现场调试比仿真麻烦得多我按这个顺序走了一遍先断电确认接线无误特别是220V和24V不能混然后通电但不启动逐个测试输入信号比如按下启动按钮监控X0是否有变化模拟压力变送器信号看AD值是否线性变化确认输入全部正常后手动点动输出看接触器和电磁阀动作是否与程序一致。所有信号确认无误后才切换到自动状态带载试运行。试运行时我守着压力表观察了好几个小时重点看加载卸载切换压力点是否在设定范围内空载延时停机是否正常故障模拟时能否正确跳机。4. 常见问题与排查技巧实录4.1 压力读数跳变屏蔽与接地问题第一次通电测试时触摸屏上显示的压力值在0.7到0.85MPa之间来回跳实际压力表纹丝不动这明显是模拟量信号受干扰了。我排查了一圈发现压力变送器的屏蔽线虽然接了但接到了PLC外壳的接地端子没有真正接入厂区的地网等于是白接。后来把屏蔽层单独引到控制柜的接地铜排再确认PLC电源的24V负端与机柜地之间没有电位差跳变马上就消失了。这里多说一句模拟量信号线与动力线必须分开走线槽间距尽量大于20cm不要为了好看绑扎在一起。如果柜内空间有限实在分不开至少也要用屏蔽线并且屏蔽层只在PLC侧单端接地避免形成接地环流。还有一个容易被忽略的点是24V开关电源的直流输出负端最好用短接线与PE端子相连给共模干扰一个泄放通路实测对模拟量读数稳定性提升很明显。4.2 启动就跳闸相序与接触器互锁问题有一次测试新接线时一按启动断路器就跳了。排查发现是接触器主触点的相序接反了电机反转压缩机泵头在反转状态下憋压电流暴涨。这个粗心错误其实很容易避免但又是电工改造现场最常见的问题。我的经验是任何新接线或改动过主回路的项目第一次通电前一定要脱开负载先手动点动接触器确认电机转向确认无误再带载。还有个容易踩的坑是有两台压缩机共用一个配电柜各自的主接触器输出靠得太近接线时不小心把两相的相序接错了。这种问题热继电器和相序保护器都能发现一部分但最稳妥的做法是每台压缩机的PLC程序里都加一个“相序异常”输入在启动前检查相序信号正常才允许启动从源头上把隐患拦住。4.3 频繁加卸载回差设置与传感器安装位置设备投运一周后操作工反映压缩机动作太频繁有时一小时内加载卸载切换了十几次。我查了程序回差设定0.05MPa偏小了。管道上只要有几台用气设备同时启停压力波动就能轻松超过正负0.03MPa回差太小就会频繁触发切换。我把卸载压力从0.8提到0.82、加载压力从0.75调到0.73回差拉大到0.09MPa情况立刻好转。还有一次问题是压力变送器安装位置离压缩机太近出气口气流的脉动直接作用在膜片上读数波动本身就大连滤波都压不住。后来把变送器移到储气罐尾端的取样管上取样管做成向下弯的U型既能缓冲脉动又能防止冷凝水直接接触膜片读数就稳了。传感器安装位置对控制效果的影响真的不比程序逻辑小这个认知我是在现场折腾了好几次才建立起来的。4.4 通讯组网连不上地址映射与从站配置联控要求把三台压缩机的运行状态、压力、温度、故障信息都汇到中控室上位机。第一版通讯调试时上位机一直读不到数据排查到最后发现是PLC的Modbus寄存器地址映射写错了。信捷的寄存器D区在Modbus协议里对应的地址是40001寄存器编号也就是说D100对应的Modbus地址是40101但我在组态软件里填成了40100差一个数全部偏移了。这种问题靠肉眼查很费劲最好是用Modbus调试助手先单点读一下确认地址映射对得上再写组态。另外多台设备做从站时每台PLC的从站地址必须唯一波特率、数据位、校验位这些参数也要全部一致。我给三台压缩机的PLC分别设置了站号10、11、12程序里用一个“联控允许”寄存器使能联控模式下压力偏低时按运行时间最少优先的原则启动备用机这样既均衡了各台机器的累计运行时间又避免了两台机器同时加载造成管网压力过冲。4.5 定时器被重复触发扫描周期内的置位陷阱程序里还出现过一个比较隐蔽的逻辑错误空载延时停机定时器在卸载标志为ON期间一直计时但卸载标志在压力低于加载值时会被复位导致定时器被反复清除重新计时。表面上看是卸载后压缩机一直不自动停机排查了好一会儿才发现是定时器的使能条件写在了卸载标志前面扫描到压力降回加载值以下时卸载标志先复位定时器使能被切断下一次扫描又重新计时。修改方式是把空载计时器的使能条件改为“电机运行且未加载且未故障”用状态组合而不是单一卸载标志来触发问题解决。这个案例提醒我一件事写PLC程序时不能只看单个线圈的通断要站在扫描周期的角度把整个程序的执行顺序过一遍。特别是定时器和计数器它们的使能信号在同一个扫描周期内能不能保持稳定直接决定计时是否准确。好的习惯是需要连续计时的信号用置位复位指令做一个独立的“计时进行中”标志避免其状态受同一扫描周期内后续逻辑的干扰。5. 这套程序的后续扩展思路压缩机PLC程序做完交付后客户陆续提了一些新需求我做扩展时体会很有收获。比如后来加了远程监控功能PLC的网口直接接到车间交换机上位机用组态软件画面显示三台机的运行状态和趋势曲线操作工在中控室就能看到管网压力实时波动。再后来还加了一个简单的能耗统计用PLC的累计运行时间乘上额定功率估算每台机的日耗电量虽然不比电表精确但做趋势对比已经足够。还有一台机器因为用气波动大单纯的回差控制效果不理想我加了一个简易的PID调节输出通过模拟量模块给变频器速度信号让电机转速跟随压力变化空压机从定频控制升级成了变频联控。这个改造的思路也不复杂PID的设定值就是目标压力0.8MPa反馈值用压力变送器的读数输出接变频器的模拟量端子程序里把加载卸载控制改成了PID调节模式。效果很明显压力波动从正负0.1MPa缩小到了正负0.02MPa节电效果客户如实反馈很满意。写这块是想说自己编写PLC程序的最大价值不在于省了那点控制器的钱而是你掌握了一套可以不断迭代的系统。今天加一路传感器明天接一台变频器后天并进厂级信息系统只要初始程序的架构够清晰、变量规划有余量后续所有扩展都是在已有基础上做加法而不是推翻重来。回头再看这次自己编的压缩机PLC程序我最想跟各位同行分享的一点是控制逻辑本身并不难难的是把每个信号、每个延时、每个保护背后的物理意义搞清楚。压力为什么会有波动、启动为什么要先卸载、定时器为什么会被重复触发这些问题想明白了梯形图怎么写都是顺理成章的事。我到现在还保留着当时手画的时序图和I/O分配表隔段时间翻一翻对理清现场故障都很有帮助。各位自己动手做类似项目时也建议先花时间把控制需求和时序图理清楚再碰编程软件这一步做得越扎实后面调试的时间就越短。本文还有配套的精品资源点击获取
返回列表