简介一套面向空调压缩机控制的PLC程序及其VC上位机监控软件完整工程适用于工业自动化学习者、PLC工程师及C上位机开发人员。程序逻辑负责采集与判断压缩机运行参数上位机通过串口或以太网与PLC通信直观显示状态并支持告警覆盖从下位机逻辑到人机交互的典型闭环。压缩包共58个文件以h/cpp源代码为主辅以obj中间文件、pdb调试信息、exe可执行程序及rc资源脚本整体仅2.64MB结构清晰便于阅读与二次开发。已有745人学习下载。内含PLC控制源码、VC工程含MFC界面、通信处理类、调试符号与可执行文件可深入理解工业控制中数据采集、协议解析与界面展示的具体实现思路适合作为入门到进阶的参考项目。1. 压缩机PLC程序逻辑不值钱防喘振和恒压才值钱写压缩机PLC程序最容易被低估的从来不是启停逻辑而是恒压控制和防喘振边界。我拆过好几套“看着完整”的压缩机程序最后现场出问题全集中在加载/卸载频繁切换、PID积分饱和、喘振线没校准这三处。这套自己编的压缩机PLC程序针对单螺杆和双螺杆中压气源站的常见工况覆盖22kW到75kW主机把启动时序、加载卸载、恒压PID和防喘振保护做成了一套可移植的框架。适合做设备配套的电气工程师、搞变频压缩机改造的调试人员以及想从继电器控制转PLC的人。拿到手你能明确三件事凭什么让机组在额定压力附近不频繁起停、PID参数怎么落到实际机组上、出了故障怎么通过程序里的数据块快速定位。2. 硬件选型与IO映射把通道分配和信号接线一次想清楚程序写得再漂亮硬件通道对不上就是白搭。我见过不止一次项目交付后才发现AI通道不够用、通讯口少一个最后只能外挂模块或者改方案。硬件选型这步其实有明确算法提前算清楚后面省很多事。2.1 主机与扩展模块选型三个必须算准的参数选PLC先不急着看品牌先把三类参数数清楚。第一是开关量输入DI启动、停止、急停、油压开关、高温开关、相序保护、变频器故障这已经是7个点再加上可能有的油滤堵塞、排气温度高按10到12个DI规划比较稳妥。第二是模拟量输入AI排气压力、吸气压力、电机电流各一路排气温度用PT100单独占一路热电阻通道这就是4路模拟量。第三是变频器通讯口现在几乎没见过用硬接线0到10V给频率的机组了多数走Modbus RTU所以CPU上必须带RS485口最好再留一个以太网口给触摸屏或上位机。选型时按这个底子去对CPU选带以太网和至少一个RS485的主流1200/1500级系列DI模块按16点DO模块按继电器输出8点AI模块按4通道4到20mA热电阻单独配2通道PT100模块。如果做一体机方案面板带触摸屏的PLC还省了单独组态但要注意一体机的AI通道经常只有2路不够用就得上扩展模块。DO输出这里有个容易忽略的点如果直接用继电器输出点驱动加载电磁阀和主接触器响应速度没问题但触点寿命和感性负载的灭弧要留意我一般会在PLC输出和负载之间加中间继电器价格不高但现场能少换几茬输出点。2.2 IO分配表数字量、模拟量、通讯口各管什么下面这张IO分配表是我在这套程序里的底稿直接照搬就能对上功能块里的地址通道地址信号名称电气规格信号去向I0.0启动按钮常开DC24V主程序启动条件I0.1停止按钮常闭DC24V主程序停机条件I0.2急停常闭DC24V硬件回路程序联锁I0.3油压开关常开有油压闭合启动/运行许可I0.4高温开关常开超温闭合报警停机I0.5相序保护常开正常闭合主接触器许可I0.6变频器故障常开故障闭合故障停机AI0排气压力4-20mA量程0-1.6MPaPID反馈、加载/卸载判断AI1吸气压力4-20mA量程0-0.1MPa防喘振辅助判断AI2电机电流4-20mA电流互感器变比过载保护、防喘振修正AI3排气温度PT1000-200℃高温保护AO0变频器给定0-10V或4-20mA频率给定Q0.0主接触器继电器输出主电机供电Q0.1加载电磁阀继电器输出加载动作Q0.2卸载电磁阀继电器输出常闭停机泄放Q0.3报警灯继电器输出故障指示Q0.4运行指示继电器输出运行状态这张表里最关键的是I0.2和Q0.2。急停用常闭触点是为了断线时能触发停机卸载电磁阀在电控上是“失电卸压”也就是说PLC输出点断开时电磁阀反而打开泄放这样突然断电或者程序跑飞时油气桶压力能被泄掉不会憋着压力硬启动。接线时这两处千万别图省事改成常开。2.3 模拟量通道的工程量转换从4-20mA到bar和℃模拟量信号进PLC后是原始数字量不做工程量转换PID和报警逻辑全在“猜数”。这里有个很典型的坑某主流平台的模拟量模块满量程对应27648不是65535。很多人用通用库函数没注意这个上限算出来的压力直接翻了一倍多。我在这套程序里写了一个通用的换算功能块FC1001SCL实现如下FUNCTION_BLOCK FB1001 VAR_INPUT rawValue : WORD; // 模拟量模块原始码值 scaledMin : REAL; // 工程量下限单位bar或℃ scaledMax : REAL; // 工程量上限 END_VAR VAR_OUTPUT scaledValue : REAL; // 换算后的工程量 isFault : BOOL; // 断线/超量程标志 END_VAR VAR tmpReal : REAL; END_VAR tmpReal : WORD_TO_REAL(rawValue); // 判断信号是否在有效区4mA对应020mA对应27648 IF tmpReal 2764.8 THEN // 小于10%量程视为断线或信号异常 isFault : TRUE; scaledValue : 0.0; ELSE scaledValue : (tmpReal / 27648.0) * (scaledMax - scaledMin) scaledMin; isFault : FALSE; END_IF;逻辑说明先把WORD转成REAL再按比例映射到工程量区间。断线判断用满量程的10%作为阈值因为4mA时码值已经接近0正常压力变送器不会跌到这么低。参数据实填写即可排气压力通道scaledMin填0.0scaledMax填1.6PT100通道如果模块直接出温度就不走这个块走热电阻模块的量程映射。实际调用时我把FB1001放在循环中断里每100ms执行一次输出直接进DB1001运行数据区。这样压力值、温度值在整个程序里统一使用不需要到处做换算。还要提醒一句4-20mA变送器的供电电源尽量用隔离型DC24V别和图省事共用开关电源同一路输出AI通道跳变问题十有八九出在共地干扰上。3. 启动与加载卸载逻辑三段式时序和双环压力控制压缩机控制的本体逻辑其实不复杂难在把时序、延时和异常分支交叠处理好。启动时序不对会顶油压加载卸载判断不滤波会让机组频繁空满载切换这两点直接决定机组寿命。3.1 三段式启动时序预润滑、建压、再加载我习惯把启动分成三个阶段每个阶段之间用定时器串联而不是把所有条件挤在一个扫描周期里。正常启动流程是按下启动按钮后先开油泵如果有预润滑油泵建立润滑油压延时5秒油压开关I0.3闭合后闭合主接触器Q0.0启动主电机主电机运行后进入建压阶段这一阶段排气压力从0爬到接近额定压力根据气罐大小通常延时10到30秒建压完成后才打开加载电磁阀Q0.1机组正式带载。为什么加载前必须等建压因为压缩机一旦加载排气侧阻力瞬间增大如果这时油循环还没建立轴承和转子处在干摩擦状态几秒钟就能把主机拉伤。我见过有人在建压延时上做手脚只留了3秒理由是“用户着急用气”结果三个月内换了两台主机。这套程序里我用状态机实现三段式启动SCL核心片段如下CASE startupStep OF 0: // 待机 IF startCommand AND prelubeOK THEN startupStep : 1; prelubeTimer(IN : TRUE, PT : T#5S); END_IF; 1: // 预润滑计时 prelubeTimer(IN : TRUE, PT : T#5S); IF prelubeTimer.Q AND oilPressureOK THEN mainContactQ : TRUE; // 闭合主接触器 pressureBuildTimer(IN : TRUE, PT : T#20S); startupStep : 2; END_IF; 2: // 建压计时延时后加载 pressureBuildTimer(IN : TRUE, PT : T#20S); IF pressureBuildTimer.Q THEN loadValveQ : TRUE; // 打开加载电磁阀 startupStep : 3; END_IF; 3: // 正常运行 // 进入加载/卸载和PID控制环节 END_CASE;说明prelubeTimer和pressureBuildTimer都是TON定时器PT分别是5秒和20秒。这里的20秒是按15m³/min、12m³缓冲罐的工况估的如果用户现场管网很大建压时间要加长到30秒甚至更长否则会出现“加载瞬间压力还没上来PID反而把频率往下压”的怪现象。停止时序也一样先卸载再延时15秒断开主接触器最后停油泵。这个15秒是给油气桶和管路泄压的时间如果一停机就断主接触器下次启动时排气侧带着背压主电机等于带载启动电流冲击非常大。3.2 加载/卸载双环控制为什么不能只有一个压力上限很多继电器控制的老机组就一个压力继电器到了上限就卸载降到下限就加载。这套逻辑放到PLC里看着没问题实际用起来机组会频繁空满载切换因为用气侧负荷波动让压力在设定点附近来回抖。工业现场的压缩机组空载功率大约是满载功率的30%到40%频繁切一次的电费可能看不出来但电磁阀阀芯和接触器触点的磨损是实打实的。我在程序里做的做法是双环控制加延时滤波。第一环是加载环排气压力低于下限且持续超过2秒才打开加载电磁阀第二环是卸载环排气压力高于上限且持续超过2秒才关闭加载电磁阀。上下限之间拉出滞回区。比如额定压力0.8MPa的机组上限设0.82MPa下限设0.70MPa这样中间有0.12MPa的缓冲区压力波动不越界就不动作。SCL里的核心判断写成// 加载判断压力低于下限并持续2秒 IF pressureExhaust loadingSetpoint AND loadDelayTimer.Q AND NOT loadValveQ THEN loadValveQ : TRUE; END_IF; // 卸载判断压力高于上限并持续2秒 IF pressureExhaust unloadingSetpoint AND unloadDelayTimer.Q AND loadValveQ THEN loadValveQ : FALSE; END_IF;参数说明loadingSetpoint是加载下限unloadingSetpoint是卸载上限两个值都写在DB1000参数区现场直接用触摸屏改不用重新下装程序。延时滤波时间建议设在2秒到5秒之间不要设0。如果设成0一个20毫秒的压力尖峰就能触发一次加载动作一晚上能来回切上百次。这个延时滤波在程序里就是两个TON定时器加载和卸载各自独立互不影响。对于变频压缩机组加载/卸载判断还要加一个条件加载后机组进入PID恒压模式变频器频率由PID输出决定卸载时变频器直接压到最低频率通常25Hz维持油循环但不再出力。这种双环控制的好处是额定压力附近由PID平滑调节超出滞回区才让加载/卸载电磁阀动作既稳又省。3.3 把整个控制流程拆成功能块OB1主程序里挂什么程序写到最后一定要拆功能块别把所有逻辑堆在主组织块里。拆块最大的好处是定位故障快现场调试时直接监视对应功能块的输入输出不需要在几百行程序里翻变量。这套程序的块结构大致如下表块名称类型职责OB1主循环每周期调用各FB状态总调度FB1001模拟量处理工程量转换、断线判断FB1002启动/停止状态机三段式启停时序FB1003加载/卸载控制双环滞回判断、延时滤波FB1004PID恒压控制调用PID指令抗积分饱和FB1005防喘振保护喘振线折线计算、最小频率修正FB1006报警与停机汇总故障条件触发安全停机DB1000参数区所有设定值集中存放DB1001运行数据区实时压力、温度、频率、累计时间OB1里的调用顺序也有讲究。我一般按“模拟量处理→启动状态机→加载卸载→PID→防喘振→报警停机”的顺序执行。模拟量先处理后面所有逻辑拿到的都是干净的工程量报警放在最后是因为它要汇总前面各个块的故障位如果顺序反了可能出现“故障已经发生但报警块先跑完了下一周期才看到故障位”的情况白白多等一个扫描周期。运行数据区DB1001建议设置成掉电保持这样现场停机断电后累计运行时间、加载次数这些考核数据不会丢用户问起来也能直接查。4. PID恒压控制与防喘振参数落不上机程序等于白写变频压缩机的核心价值在恒压控制但PID参数一旦不合适现场就是开着变频器还不如工频直接跑。这一章把PID回路的搭建、整定路径和防喘振实现讲透按这个思路调至少不会出现“一加载就超压、一卸载就欠压”的振荡。4.1 PID回路结构反馈、给定、输出怎么分配到变频器PID回路的结构很简单反馈选排气压力给定选额定压力输出给变频器频率。但有几个细节必须处理否则回路根本稳定不下来。第一是采样周期。压力变送器到排气压力的变化不是瞬时的气体压缩和管网缓冲存在大惯性采样周期建议设在200到500毫秒。采样太快反而会放大压力波动让PID输出跟着跳采样太慢又会漏掉喘振前的压力尖峰。我用的是300毫秒在循环中断OB30里调用。第二是反馈滤波。压力信号直接进PID经常带着高频扰动我习惯在PID前面加一阶低通滤波时间常数取1秒左右。滤波和时间滞后是两个概念滞后会恶化控制品质滤波是去掉真实压力之上叠加的噪声两者路径不同不能为了“响应快”把滤波关了。第三是无扰动切换。这套程序支持手动和自动两种模式手动时直接给变频器一个固定频率切回自动时PID的积分项要重新初始化到当前输出值否则切换瞬间变频器频率会猛跳一下现场叫“踢了一脚”。我在程序里对PID块的复位输入做了处理切换时把当前输出值写到PID的积分项做到无扰动。PID块的调用代码PID_1( Setpoint : DB1000.setPressure, // 目标压力一般0.80MPa Input : filteredPressure, // 滤波后的排气压力 Output : freqOutput // 变频器给定频率单位Hz );参数说明PID_1是平台自带的PID指令Configure激活后会在后台生成背景数据块。setPressure直接引用DB1000里的参数现场触摸屏可改。freqOutput是REAL型频率值经AO0通道输出给变频器如果用通讯给定则把它写入Modbus保持寄存器。4.2 参数整定从经验值到现场微调的完整路径气体压力系统属于大惯性大滞后对象PID参数和温度、液位回路类似不能用电机转速回路的经验值。我常用的初值如下参数初值范围调整方向比例增益Kp0.5 - 1.5压力振荡则减小响应慢则增大积分时间Ti30 - 60秒静差消除慢则减小超调大则增大微分时间Td0气体回路一般不开微分微分时间直接设0这点很多人不理解。压缩机的压力反馈滞后很大微分对滞后系统的相位补偿非常有限反而会把压力变送器上的噪声放大成频率抖动。除了个别离心式压缩机需要微分前馈螺杆机变频控制我基本不用微分。整定路径我走的是先空载状态让机组稳定运行手动给变频器一个中等频率比如40Hz观察排气压力是否平稳然后切到自动给定压力设额定值Kp从0.5开始Ti从45秒开始记录压力从加载到稳定的响应曲线。如果压力超调超过0.02MPa把Kp往下调0.2如果压力一直在额定值下方慢慢爬但始终差0.01MPa把Ti缩短5秒。现场调参机的技巧是每次只改一个参数改完至少等三个完整加载卸载周期看效果别同时调两个参数出了问题都分不清是哪个引起的。还有个常见误区是“压力达不到额定就拼命加Kp”。压缩机的产气量受主机排气量上限约束频率到50Hz后压力上不去是机组选型问题不是PID问题。这时候该检查的是加载电磁阀是否完全打开、进气阀是否卡涩、油气分离器压差是否过大而不是继续拧PID参数。4.3 防喘振边界线用一段折线函数做保护防喘振是压缩机程序里最像“玄学”的部分。离心式压缩机有严格的喘振边界螺杆机虽然不易深度喘振但在排气压力高、进气量不足时也会出现压力脉动和异响。我对螺杆机的做法是给最小频率加一条随排气压力抬升的折线压力越高变频器最低频率越往上抬强制保证机组有足够的流量通过。防喘振功能块FC2005的SCL实现FUNCTION_BLOCK FB1005 VAR_INPUT exhaustPressure : REAL; // 排气压力单位MPa END_VAR VAR_OUTPUT minFrequency : REAL; // 变频器最小频率下限 END_VAR // 基础最小频率25Hz minFrequency : 25.0; // 排气压力超过0.80MPa后每升高0.01MPa下限频率增加0.5Hz IF exhaustPressure 0.80 THEN minFrequency : 25.0 (exhaustPressure - 0.80) / 0.01 * 0.5; END_IF; // 上限封顶50Hz IF minFrequency 50.0 THEN minFrequency : 50.0; END_IF;逻辑说明当机组排气压力处于高位时如果变频器频率被PID压得很低主机排气量跟不上系统泄漏转子区域会形成压力波动这就是喘振前兆。这段折线的本质是“压力越高最小频率同步抬升”让机组始终工作在稳定流量区。0.5Hz/0.01MPa这个斜率是我在一台75kW螺杆主机上实测出来的现场值不同主机有差异最稳妥的做法是从喘振实验数据里取三个压力点拟合出斜率不要直接套我这里的数。防喘振输出minFrequency要和PID输出做比较变频器实际给定频率取PID输出和minFrequency两者中的较大值。这行逻辑放在FB1004里写等于是给PID输出加了一个动态下限。调试时注意观察如果机组卸荷状态下频率一直被防喘振压在40Hz以上说明斜率设大了压缩机长期高转速空转会额外耗电可以按0.2Hz/0.01MPa往下调直到压力低时能降到25Hz附近。5. 调试与常见故障排查五个最容易翻车的现场细节程序下装后真正见真章的是现场调试阶段。这一章写五个我在压缩机项目上真实踩过的坑每一条都按现象、原因、解决的顺序展开对照着排查能省不少往返现场的时间。5.1 现象一AI通道读数跳变加载卸载乱切现象是机组一上电触摸屏上的排气压力在0.4到0.9MPa之间反复跳加载电磁阀跟着频繁动作压缩机根本没稳定运行过。用万用表量压力变送器输出4到20mA信号是稳的问题出在PLC读出端。原因有两处一是AI模块通道滤波没启用压力变送器输出的微弱波动被直接采样二是变送器供电的24V开关电源和PLC模块共用一个接地变频器启动后高频干扰串进模拟量通道。现场排查确认后我在组态里给AI通道启用了50Hz数字滤波变送器供电改成隔离DC/DC模块信号屏蔽层在PLC侧单端接地。处理后压力读数稳定在0.79到0.81MPa之间正常波动。从那以后所有项目标配这三样再没在通道跳变上返过工。5.2 现象二停机后压力无法泄放安全阀起跳现象是机组正常停机后排气侧安全阀经常在几分钟后自动起跳现场还能听到明显的漏气声。查程序逻辑停机时序是先断主接触器再卸载油气桶里的压力没有泄放路径。原因就是卸载电磁阀接线方式接反了。原理上停机必须先卸载让油气桶压力从0.8MPa泄到接近大气压再断主接触器。但我检查现场发现电磁阀选了常开型断电后阀门关闭泄放口被封死。解决方式有两种一是把电磁阀换成常闭型失电自动打开泄放口二是如果电磁阀已经装好没法换程序停机时先保持加载阀在断电前强制打开15秒再断主接触器。我现在的习惯是IO分配阶段就把Q0.2定义为失电卸压选型时直接选常闭型电磁阀把泄放这个动作交给硬件兜底。5.3 现象三加载后PID爬升极慢压力一直上不去现象是空载状态下机组一切正常一切到自动恒压排气压力缓慢爬到0.7MPa后基本不动距离额定0.8MPa总是差那么一点频率已经到50Hz但压力就卡在那里。原因排查下来有两个层面。一是压力采样点装在储气罐入口距离压缩机出口有十几米管道PID反馈到的压力比压缩机出口压力低不少。二是加载瞬间PID从积分0开始慢慢爬初始输出太低变频器频率先掉到25Hz左右主机产气量不足。解决方法是把压力变送器移到用户端或者至少靠近出口管路让PID反馈的滞后尽量小同时在程序里加了前馈逻辑加载命令一旦触发PID输出直接跳到40Hz的基础频率然后由PID在这之上微调。这个前馈值写入DB1000参数区现场按管网大小调到35到45Hz之间。5.4 现象四防喘振逻辑频繁误动作空载频率被太高现象是机组在正常卸载状态下变频器频率一直保持在45Hz以上系统压力都到上限了频率就是降不下来电机长时间高转速空转排气温度跟着往上飙。原因还是防喘振折线函数的斜率取得太陡。按我5.3里的0.5Hz/0.01MPa参数套到一台40kW小主机上排气压力刚超过0.78MPa最小频率就被抬到接近42Hz而此时机组实际处于卸载状态根本不需要那么多流量。解决方式是把斜率从0.5降到0.15并且增加一个判断条件只有机组处于加载状态loadValveQ为TRUE时防喘振的最小频率限制才生效卸载状态下最小频率始终按25Hz处理交给后面的加载判定去决定何时重新加载。这样既保住了防喘振能力又避免了空载高转速浪费。5.5 现象五累计运行时间不涨用户数据对不上现象是设备安装后跑了半个月用户查保养周期发现累计运行时间还是几十小时明显不对打开PLC在线监视运行计时变量一直为0。原因有两种可能一是主循环里根本没调用运行计时功能块光在OB1里写了启动逻辑计时器没被驱动二是计时用的秒脉冲信号来自系统时钟但掉电保持的DB数据区被OB100初始化程序清零了。解决方法是把累计运行时间单独放到一个掉电保持DB块里用系统时钟的上升沿做累加不在任何初始化组织块里对这个DB做清零。同时把加载次数、总运行时间和满载运行时间分三个变量存储这样用户保养时能区分“累计通电时间”“满载运行时间”和“空载运行时间”对判断主机状态非常有用。6. 进阶用法单机改群控再用趋势曲线回放故障这套单机程序跑熟之后最值得做的是两件事把单机逻辑扩展成群控轮值以及给关键运行数据加上趋势曲线记录。两个方向都不需要换硬件基于现有PLC和触摸屏就能落地。6.1 Modbus群控用轮询状态机管理多台机组多台压缩机并列的站场控制目标是让机组轮值运行累计运行时间接近同时保证管网压力平稳减少频繁起停。实现方式不复杂选一台机组做群控主站其余机组作为Modbus从站主站通过RS485轮询每台从站的运行状态、排气压力和累计运行时间。我在程序里用CASE结构写了一个轮询状态机核心片段如下CASE modbusState OF 0: // 向第1号机发送读请求 rs485Send(reqFrame[1]); modbusState : 1; 1: // 等待第1号机响应 IF rs485ReceiveDone THEN ParseFrame(recvBuffer, unit1Data); modbusState : 2; ELSIF rs485Timeout THEN unit1Data.fault : TRUE; modbusState : 2; END_IF; 2: // 依次询问第2号机 rs485Send(reqFrame[2]); modbusState : 3; 3: IF rs485ReceiveDone THEN ParseFrame(recvBuffer, unit2Data); modbusState : 0; ELSIF rs485Timeout THEN unit2Data.fault : TRUE; modbusState : 0; END_IF; END_CASE;逻辑说明这里的状态机每个周期只轮询一台从站避免485总线冲突。轮询周期取决于从站数量和通讯参数波特率9600bps下每台约50毫秒三台机组一个完整轮询周期在150毫秒左右完全够用。超时判断一定要做现场最常见的状况是从站掉电如果程序卡在等待接收里整个轮询就停死了。我一般设500毫秒超时标记从站故障后继续轮询下一台。轮值策略我用的是“运行时间最短优先”每次需要加载备用机时主站比较各从站的累计运行时间选择最小的那台下发启动命令。这样三台机的磨损能基本拉平。另外要加一台备机自动启动逻辑主站检测到当前运行机组排气压力低于下限并持续10秒时自动启动下一台机组这个10秒延时比单机程序的滤波时间要长目的是避免管网短时大流量造成机组频繁加机现场叫“抖动”。6.2 趋势曲线把最近1000秒的运行数据做成环形缓冲故障排查最怕“人不在现场数据已经过去”。我在这套程序里加了一段环形缓冲记录把排气压力、变频器频率、电机电流三个关键值按1秒间隔写入数组保存最近1000条。故障发生后触摸屏上直接调出曲线看故障前十几分钟的波形比盯着报警代码猜原因快得多。环形缓冲的SCL实现// 每秒执行一次的循环中断OB30 idx : idx MOD 1000; trendPressure[idx] : pressureExhaust; trendFrequency[idx] : freqOutput; trendCurrent[idx] : motorCurrent; idx : idx 1;参数说明idx是环形写指针MOD运算保证写到999后回到0覆盖最旧数据。trendPressure、trendFrequency、trendCurrent三个数组各1000个REAL元素占用的保持性存储区不大可以设为掉电保持。故障发生瞬间记录当前idx位置触摸屏按“时间从旧到新”展开读取配合报警时间戳就能看到完整过程。我一般会要求现场至少保存两个完整加卸载周期的曲线这样PID振荡是渐变的还是突发的一眼就能分辨。复盘一次典型的夜间故障现场反映凌晨三点压力突然掉到0.3MPa但报警记录里没有任何故障码。调出趋势曲线看到0.8MPa压力平稳运行了将近800秒然后燃气压力在3秒内直线掉到0.3MPa变频器频率同时到顶电机电流比正常值高但没到过载阈值。结合时间戳判断是管网侧用气量骤增或管路泄漏不是压缩机本体问题。后来检查确认是用户端疏水阀卡涩放空和PLC程序没有任何关系。从那以后我养成了一个习惯每次写完压缩机程序下装前强制走一遍检查清单——先核对IO映射表和接线图再做模拟加载卸载循环最后用趋势曲线看三个完整运行周期确认没问题才允许进现场调试。这个习惯帮我挡掉了好几次“看起来能跑、一开机就翻车”的尴尬希望也能帮到你。本文还有配套的精品资源点击获取