
1. 先把这个项目的真实需求捋清楚我接到这个活儿的时候现场已经“手工”跑了快两年操作工每天盯着压力表指针去开泵、关泵遇到夜班打盹真空罐压力经常冲到下限一批产品直接报废。所以这个项目不能简单理解成“做个真空泵控制程序”核心是把一套靠人值守的真空泵机组改成能自动维持真空度的运行控制系统顺便把启停记录、故障报警、运行时间这些脏活累活从人脑子里搬出来。这套工艺本身不算复杂一个真空稳压罐两台旋片式真空泵一用一备一套真空压力变送器加上若干手动截止阀和安全阀。车间要求真空罐内压力稳定在一个区间比如相对压力-40 kPa到-60 kPa之间不同产品工艺段还不一样。泵需要在压力回到上限时启动抽真空抽到下限时停机中间必须有足够滞回不然泵会频繁启停电机和接触器都受不了。1.1 需求拆成控制点才能谈选型跟现场主管聊完之后我把需求整理成一张表这也是我做这类项目的第一步序号需求说明1手动/自动切换手动模式用于调试检修自动模式用于正常生产2压力闭环控制按压力上/下限自动启停主泵带滞回3一用一备轮换主泵故障自动切备泵按累计运行时间轮换主备4故障联锁保护电机过载、相序错误、急停、压力变送器断线5参数可调压力上下限、滞回值、轮换周期在触摸屏上直接改6运行数据记录泵累计运行时间、启动次数、故障记录7配方快速切换不同产品对应不同真空度区间一键切换参数组这里有个容易被忽略的点压力上下限和滞回值必须能在触摸屏上改不能写死在PLC里。现场工艺员会随着产品批次调整工艺每次改完还要走审批流程如果参数不能在线修改我这个控制系统交付后就得反复改程序那就真成了给自己挖坑。1.2 为什么会选PLC加触摸屏的架构其实市面上有现成的真空控制仪面板上带数码管和几个按键便宜、能启停泵、能显示压力。但这类仪表的问题在后期暴露得很明显参数组少、没有配方功能、故障记录几乎为零、没法联网。车间后面还要上MES系统控制器如果连个以太网口都没有到时候还是得换。PLC加触摸屏的方案初期成本确实比控制仪高但换来的是灵活性。西门子S7-200 SMART自带以太网口昆仑通态触摸屏也标配网口两者走网线就能通信省了232转接头和一堆线缆。更关键的是整个控制逻辑可以随时改压力控制方式以后想从两位式控制升级成PID恒压程序层面改动即可不用动柜子里的线。所以我跟客户谈方案的时候没有把重点放在“用什么配件”而是把需求逐条摆出来让他们看明白PLC加触摸屏是把这些需求一次性兜住了。后面的事实也证明这个选择是对的——验收之后不到半年他们因为新客户的工艺要求自己就在触摸屏上把压力区间改了一分钱没花。2. 硬件选型和I/O分配照着控制点配柜子硬件选型看起来简单实际上最考验经验。这个项目用的是西门子S7-200 SMART CPU SR30加昆仑通态TPC1061Ti触摸屏这两样都是各自产品线里出货量最大的型号之一不是什么冷门配置。但选型背后的逻辑值得展开说说尤其对刚入行的同行有参考价值。2.1 CPU为什么选SR30而不是更小的SR20先算I/O点数。系统输入点有主泵热继电器、备泵热继电器、断路器辅助触点、急停按钮、远程/本地选择开关、两组压力变送器断线检测可能需要另算逻辑。输出点有主泵接触器、备泵接触器、声光报警器、运行指示灯。输入大约6到8个输出4到6个按点数看SR20的12入8出也够用。但我不建议把点数卡得太死。现场有个规律柜子装完到调试期间客户总会追加信号。这个项目就遇到过设备厂家后来要求加一个“泵腔温度过高”信号输入还有一个“真空泵运行状态反馈”输出给上位机。如果当时选SR20I/O就满了只能临时加扩展模块柜子里没有预留位置就很被动。SR30有18路数字量输入和12路数字量输出余量充足。更重要的是SR30本体上带一个RS485口和以太网口以太网口同时用于编程下载和与触摸屏通信不需要额外买通信模块。对小型设备来说这款CPU是真正的性价比之选。再加一个模拟量扩展模块EM AE01用于采集真空压力变送器的4-20mA信号。EM AE01是一路模拟量输入模块对这个项目正好够用如果你以后遇到两路以上模拟量的需求直接上EM AE04或者EM AM06组态方式是一样的。2.2 触摸屏选型和通信组网昆仑通态触摸屏这里选的是TPC1061Ti10.2英寸分辨率1024×600电阻屏嵌入版组态环境。说句实在话昆仑通态的屏在国产触摸屏里性价比很高尤其适合S7-200 SMART这个档次的PLC。它的组态软件MCGS嵌入版上手快自带西门子S7-200 SMART以太网驱动通信配置十分钟就能搞定完全不需要专门写通信协议。电阻屏这点我必须提一下。很多外行觉得电容屏高级但在工业现场操作工经常戴着手套电容屏根本没法用。电阻屏用指甲或者手套尖都能点这才是工业触摸屏该有的样子。所以选型的时候不要单纯被“高配”带跑得看现场使用场景。组网结构非常简单PLC和触摸屏都接在电控柜内的普通交换机上或者直接网线直连设备IP地址备注CPU SR30192.168.0.2PLC以太网口TPC1061Ti192.168.0.10触摸屏网口上位机调试电脑192.168.0.100临时接入PLC和触摸屏直连的话用一根普通网线就行S7-200 SMART的网口支持自适应交叉。如果后面要接MES把这个交换机往上连一层就完事网络架构不用动。2.3 I/O分配表控制柜接线之前I/O分配表必须先定下来电工才能照着画接线图。这个项目的分配表如下地址信号类型说明I0.0急停按钮常闭输入串入硬件回路的同时也进PLCI0.1远程/本地选择开关输入本地时触摸屏操作被禁止I0.2主泵热继电器常闭输入过载时断开PLC检测到后联锁停主泵I0.3备泵热继电器常闭输入同上I0.4主泵运行反馈接触器辅助触点用于判断接触器是否真实吸合I0.5备泵运行反馈接触器辅助触点同上I0.6泵腔温度过高常开输入设备厂家后来追加的信号AIW0真空压力变送器4-20mA量程-0.1MPa~0MPaQ0.0主泵接触器输出驱动主泵启动Q0.1备泵接触器输出驱动备泵启动Q0.2声光报警器输出故障时报警Q0.3报警指示灯输出柜面指示这里有个细节急停按钮和热继电器的常闭触点我在硬件回路上也串了一路直接切断接触器线圈电源。也就是说即使PLC程序出现异常或者CPU死机急停和过载保护依然有效。PLC里的联锁逻辑是第二道防线不是唯一防线这个原则做设备控制的人必须刻在脑子里。3. PLC程序架构从模拟量标定到双泵轮换S7-200 SMART的编程环境是STEP 7-MicroWIN SMART支持梯形图、STL和功能块图我在这个项目里用的是梯形图为主。整个程序没有用什么花哨的指令核心就是定时器、比较指令和置位复位外加一点间接寻址用来做配方读取。3.1 数据交换区规划PLC和触摸屏之间通信本质就是触摸屏去读写PLC的V区地址。所以编程的第一步不是写逻辑而是规划V区数据地址数据类型用途VD100实数当前压力工程值MPaVD104实数压力上限启动泵VD108实数压力下限停止泵VD112实数滞回值VW120整数主泵累计运行时间秒VW122整数备泵累计运行时间秒VB130字节控制模式0手动1自动VW132整数配方号VB134字节故障标志位M0.0位主泵启动命令M0.1位备泵启动命令M0.2位自动模式下的启动许可这些地址在触摸屏组态时一一对应PLC这边通过V区读写触摸屏那边就能直接看到了。规划的好处是程序里不会出现满天飞的地址引用后期维护查表就能定位问题。3.2 模拟量采集和工程量换算压力变送器接在EM AE01上读取地址是AIW0。4-20mA信号对应的数字量范围我按S7-200 SMART扩展模块手册的约定处理4mA对应约553020mA对应27648。工程量换算公式是// 读取原始值并转换为实数 LD SM0.0 MOVW AIW0, VW10 ITD VW10, VD14 DTR VD14, VD18 MOVR VD18, VD20 // 标定当前压力 (原始值 - 5530) * (上限-下限) / (27648-5530) 下限 MOVR VD20, VD100 -R 5530.0, VD100 MOVR VD100, VD22 *R 0.1, VD22 // 量程上限-下限 0-(-0.1) 0.1MPa MOVR VD22, VD24 /R 22118.0, VD24 // 27648 - 5530 22118 MOVR VD24, VD100 -R 0.1, VD100 // 加上量程下限-0.1MPa这里用到的0.1就是量程差如果压力变送器量程不同把这一项换掉就行。需要注意S7-200 SMART的模拟量输入模块在不同固件版本下4mA对应的数字量可能不一样有的手册标的直接就是0对应4mA。接完线之后第一步就是用信号发生器给一个已知电流看PLC读到的原始值对照手册确认一遍再写标定公式这是最稳妥的。模拟量还有一个常见问题就是信号波动。真空泵启动的瞬间接触器吸合和电机启动会造成电磁干扰压力信号会出现几格跳动反映到工程值上就是压力突然跳变几十kPa。我在程序里加了一阶滤波把最近20个扫描周期的采样值做平均实测下来效果明显// 简单滑动平均每周期采样一次存入FIFO取平均 LD SM0.0 MOVR VD100, VD30[VW40] // 按索引存当前值 INCW VW40 AW VW40, 20 MOVW 0, VW40 // 累加求平均省略循环部分实际用子程序实现压力滤波值参与控制判断但触摸屏上显示原始值和滤波值两个数一旦偏差过大基本就能判断传感器或者线路有问题了。3.3 自动控制核心两位式控制加滞回真空泵的自动控制我用的是经典的两位式控制也叫滞回控制。逻辑很简单当压力大于等于上限比如-40 kPa说明真空度不够启动泵抽真空当压力小于等于下限比如-60 kPa说明真空度够了停止泵压力介于上下限之间保持当前状态不变。梯形图实现核心就一段比较指令加置位复位。关键点是上限和下限的设定值本身就已经包含了滞回不需要再额外加滞回参数。我把滞回值也单独列了一个地址VD112是为了方便客户在触摸屏上微调程序里上限用VD104下限用VD108这两个值由操作工设定滞回值只是帮助理解逻辑的术语。为什么不用PID恒压控制因为真空泵是容积式设备启停控制响应快抽真空过程本身有较大惯性PID频繁调节反而会导致泵在低速区域润滑不良。工业上大多数真空泵机组用的都是两位式控制只有要求极高真空稳定度的场合才会用变频器加PID。这个项目里工艺允许压力在20 kPa范围内波动两位式控制完全够用成本还低。3.4 双泵轮换和故障切换一用一备是真空泵机组的标配需求实现方案有两种一种是按时间轮换比如每24小时切换一次主备关系一种是按启停次数轮换。我选了时间优先、次数辅助的方式。程序里有一个定时中断每秒钟把当前运行泵的累计时间加1存到VW120或VW122。凌晨零点的时候对比两个泵的累计运行时间自动把运行时间少的那个设为“主泵”另一个为“备泵”。这个切换过程不需要停机只是改变后续启动时先启动谁。故障切换是关键。如果主泵运行中热继电器动作I0.2断开PLC检测到故障后立即停止主泵输出同时把故障标志VW134里面对应的位置1然后自动启动备泵。这个过程要求程序扫描周期足够快所以故障检测和切换逻辑我放在主程序最前面确保每个扫描周期都会检查。备泵启动之后如果备泵也跟着故障那就只能停机报警了这时候声光报警器必须响起来操作工不到现场处理报警不会自动消失。故障需要操作工在触摸屏上按下“故障复位”按钮才能解除防止设备带病自动重启。3.5 安全联锁的优先级程序中所有输出都受安全联锁约束联锁的优先级从高到低依次是急停、热继电器、泵腔温度过高、压力变送器断线。急停是最高优先级PLC读到I0.0断开时不管在什么模式、什么状态下直接把Q0.0和Q0.1全部复位。压力变送器断线检测这块容易被忽略。模拟量信号如果线路断了AIW0会跑到接近满量程或者零工程值会显示一个极端值如果不加判断自动模式会一直启动泵或者一直停泵。我在程序里判断如果当前压力大于0.05 MPa或者小于-0.115 MPa判定变送器故障进入报警状态禁止自动启泵。4. 昆仑通态触摸屏组态把画面设计成操作工爱用的样子触摸屏组态用MCGS嵌入版工程文件包括主控窗口、设备窗口、用户窗口、实时数据库和运行策略几个部分。很多人第一次用MCGS会一头扎进用户窗口画画面结果通信没配置实时数据库里也没建变量最后屏幕上全是####符号。正确顺序是先配置设备窗口和实时数据库再画画面。4.1 通信配置设备窗口是第一步双击设备窗口在工具箱里找到“通用串口父设备”和“西门子S7-200 SMART以太网”两个设备按顺序添加。S7-200 SMART以太网驱动不需要串口父设备直接添加以太网设备驱动即可。配置项里要填几个关键参数参数值说明本地IP地址192.168.0.10触摸屏的IP远程IP地址192.168.0.2PLC的IP本地端口号0驱动自动分配远程端口号102S7协议默认端口通信超时3000ms超时时间过短容易误报采集周期500ms变量刷新周期通信超时和时间设置很讲究。设太短PLC偶尔一个扫描周期慢了或者网络波动触摸屏就会报通信故障现场看着吓人实际啥事没有。设太长操作工按了按钮半天没反应体验极差。我一般设置在2000到3000毫秒之间。4.2 实时数据库建变量设备驱动设置好之后要在实时数据库里新建变量并把变量关联到PLC的V区地址。这里用到的核心机制是“设备变量”和“通道连接”。在设备组态里每添加一个通道就对应PLC的一个寄存器地址。比如要显示当前压力在设备驱动的通道列表里添加一个“VD100”数据类型选浮点周期采集。然后在实时数据库里新建一个名为“当前压力”的变量把它的连接设备设为“S7-200 SMART”通道设为刚才添加的“VD100”。这样触摸屏上的“当前压力”就是PLC里的VD100双向实时同步。变量数量一多建议在通道名称上加上设备名、用途、单位比如“VD100_当前压力_MPa”“VD104_压力上限_MPa”这样后期维护不会看晕。4.3 画面结构主控、操作、参数、报警、趋势我把触摸屏画面分成五个页面底部分别对应功能按钮总览画面模拟量仪表显示当前压力两个泵的运行/停止/故障状态灯累计运行时间报警指示灯操作画面手动/自动切换按钮主泵/备泵手启手停按钮故障复位按钮参数画面压力上限、压力下限、轮换时间设置输入框报警画面报警列表显示故障发生时间、故障内容、故障消除时间趋势画面实时压力曲线和历史压力曲线。操作画面有个细节值得单独说手动/自动切换按钮在程序里是用沿触发改变的不是电平触发。PLC里把M0.0作为手自动切换信号触摸屏上的按钮每次按下通过脚本把M0.0置位一瞬间程序检测到上升沿后把VB130的值翻转。如果直接用M0.0的保持状态去控制按钮弹起后状态就丢了容易误操作。手动模式下触摸屏上的启泵按钮直接控制Q0.0和Q0.1但急停和热继电器联锁依然生效。这就保证了调试阶段操作工的安全也让自动化工程师能放心大胆地去试程序。4.4 报警和趋势历史昆仑通态的报警功能很好用。在实时数据库里把“当前压力”设为报警变量设置上限报警、上上限报警、下限报警、下下限报警对应不同颜色等级。再把“主泵故障”“备泵故障”这些位变量也配成开关量报警这样故障发生时报警画面会自动弹出记录。报警变量的死区设置也别忘了。压力在设定值附近震荡时如果不设死区报警会在触发和恢复之间反复切换报警列表会被刷屏。我把死区设定成2 kPa即超过报警限之后必须恢复到报警限以内2 kPa报警状态才算解除。历史趋势曲线需要挂数据存盘策略。MCGS里可以用“配方”或者“数据集”功能把压力数据定时写入U盘或内部存储。这个项目客户要求保留30天的压力趋势用于追溯工艺稳定性我在策略里设置了每分钟存一个点一天1440个点存储量不大昆仑通态完全扛得住。5. 配方数据怎么给到PLC两种能落地的写法关于“昆仑通态触摸屏上的配方数据怎么给到PLC”这个问题网上讨论特别多因为这个需求很普遍但不少教程只讲画面配置没讲数据是怎么进到PLC的。我在这个项目里试过两种方案也都给客户用上了下面把两种做法和适用场景都讲清楚。5.1 方案一用MCGS配方构件直接下发MCGS嵌入版自带配方组态功能操作路径是在“配方”节点下新建配方组每个配方组里有若干字段每个字段关联一个PLC变量地址。比如客户有两种产品每种产品的真空度工艺区间不同配方号产品名压力上限(MPa)压力下限(MPa)轮换时间(H)0产品A-0.04-0.06241产品B-0.03-0.0512在配方组态里建立字段时分别把“压力上限”字段关联到VD104“压力下限”关联到VD108“轮换时间”关联到VW122。这样每个配方保存的就是一组PLC寄存器的值。组态界面上在用户窗口拖入一个“配方”构件绑定已建立的配方组。运行时操作工点击配方构件弹出配方选择窗口选中配方后点“保存”或者“下发”MCGS会自动把配方字段里的数值写入对应的PLC寄存器。如果要用脚本控制MCGS提供的函数可以这样用 选择第1个配方组中的第0号配方并下发 !RecipeSel(0, 0) !RecipeSend(0, 0)方案一的优点是开发量极小几乎不写代码配方界面是现成的操作工可以浏览配方内容、直接修改数值再保存。缺点也很明显配方字段多了以后界面很冗长而且MCGS配方构件下发的本质是逐字段写寄存器如果PLC正在运行的关键程序段刚好在读取这些寄存器存在数据不一致的窗口期。5.2 方案二PLC端指针批量读取数组对于配方数量多、每个配方字段多、或者PLC需要在特定时机主动切换配方的场景我建议用第二种方案把配方数据作为数组存在PLC的V区触摸屏只负责选择配方号PLC通过间接寻址把对应配方的数据读出来。具体做法是在PLC中划出一片连续的V区作为配方区例如从VB200开始每个配方占用16个字第一个字是配方号后面依次是压力上限、压力下限、轮换时间等参数。触摸屏上只有一个“配方选择”输入框操作工输入配方号PLC程序比较当前配方号变化后用间接寻址把对应配方的数据拷到当前参数区。S7-200 SMART的间接寻址在梯形图里操作稍微麻烦一点我用STL示例来表示核心逻辑// 配方区起始VB200每个配方16字节配方号存VB199 LD SM0.0 MOVB 0, AC0 MOVB VB199, AC0 // 计算偏移地址 配方号 * 16 SLW AC0, 4 // 把配方数据拷到当前参数区 VD104、VD108、VW122 LD SM0.0 MOVD VD200[AC0], VD104 MOVD VD204[AC0], VD108 MOVW VW208[AC0], VW122这里用AC0作为偏移量指针。注意S7-200 SMART的间接寻址是按字节加偏移的所以配方号先乘16再作为地址偏移。实际项目中数据更多可以用循环指令批量拷贝我这里是精简版。方案二的最大优势是数据一致性配方内容在切换瞬间一次性拷入当前参数区PLC程序后续只读当前参数区不存在读到一半的中间状态。而且这种配方数据完全可以脱离触摸屏存在以后上位机或者MES下发配方号PLC逻辑不用改。5.3 配方数据下发的校验细节不管用哪种方案配方数据下发后一定要做校验。我在PLC程序里加了一段校验逻辑每个配方最后一个字存一个校验值可以是该配方所有参数的求和。下发后PLC自动计算一遍跟存储的校验值对比不一致就报“配方数据错误”拒绝切换。这个校验看起来土但特别实用。曾经有一次客户在触摸屏上手动改了配方数值某个字段填错一位如果没有校验压力下限设成了-0.6 MPa泵会一直运行不停机真空设备都可能损坏。有了校验至少能把这个错误挡在控制逻辑之外。另外提醒一个坑昆仑通态的配方字段类型要跟PLC数据类型严格对应。压力上下限在PLC里是32位浮点数VD配方字段类型就必须选“浮点”如果选成“整数”下发的值会被截断成小数点前的整数-0.04会变成0控制逻辑直接乱套。6. 联机调试实录现场踩过的坑和排查链路项目调试那两周我实打实踩了几个坑有些是设备差异有些是习惯问题。把这些记录下来比写一百行程序还有价值。6.1 通信连不上的排查链路第一天通上电触摸屏所有变量显示“####”通信失败。这是我预料之内的但排查链路还是得按步骤走少一步都可能走弯路步骤操作结果1检查网线连接确认PLC和触摸屏在同一交换机/直连2用电脑Ping触摸屏IP192.168.0.10通了3用电脑Ping PLC的IP不通4检查PLC系统块里IP地址发现PLC IP被改成192.168.1.25把PLC IP改回192.168.0.2通信恢复问题根因是PLC之前被上一个调试人员设置过IP我默认以为出厂是192.168.0.2没有去系统块里确认。后来我在S7-200 SMART软件里专门检查系统块的以太网设置而不是只靠网线连上之后的首次扫描。这个教训就是任何设备拿到手先看它当前配置不要想当然。6.2 压力信号波动导致泵频繁启停通信解决后我测试自动控制逻辑发现一个怪现象压力明明在区间中间泵却在启停之间来回切换。用软件在线监控AIW0发现原始值在某个值附近上下跳动跳了大概0.5 kPa的幅度刚好卡在控制阈值附近导致泵的启停条件反复满足。这个问题的根源不是程序错误而是压力变送器的信号噪声。我的解决方案分两层第一层是程序里加滑动平均滤波减少跳变幅度第二层是检查屏蔽线接地把压力变送器的屏蔽层在控制柜端单点接地信号稳定性明显改善。这里有一个经验硬件问题优先于软件方案解决。如果先把屏蔽处理好滤波可能根本不需要加那么重。滤波越重系统响应越慢真空度控制的滞后就越大这是两难的事情。我这个项目里把滤波窗口设为20个扫描周期既压住了噪声又不至于影响控制响应。6.3 真空泵启动瞬间压降造成的温度假报警调试到第三天设备厂家新加的信号“泵腔温度过高”出了问题。主泵每次启动后的头几秒温度信号都会瞬间窜到报警值触发联锁泵马上停下来接着再次启动形成循环。厂家说温度传感器肯定没问题我这边也怀疑过是不是接线问题。后来我用万用表量了传感器在泵启动瞬间的信号发现确实是真跳变不是接触不良。再仔细想泵启动瞬间电流大断路器辅助触点切合瞬间有电压跌落给温度传感器供电的开关电源输出被拉低了传感器输出信号也跟着波动。解决方法是把温度传感器的供电改到单独的开关电源上并且程序里对温度报警增加延时确认只有报警状态持续3秒以上才认定为真报警。这个延时时间放在了联锁逻辑里启动瞬间的短暂波动不会触发停机。6.4 配方误下发后的数据恢复问题调试接近尾声客户做验收测试时操作工误触了触摸屏上的配方下发按钮把当前正在生产的产品A参数覆盖成了产品B的参数真空度一下子不对了虽然没废产品但把现场工艺员吓了一跳。事后我在配方画面加了一个“确认下发”二级弹窗操作工点击下发后必须再点一次“确认”才会执行。同时在PLC程序里加了配方参数备份区每次下发前把当前正在运行的参数自动存到V区的备份区域操作工在触摸屏上随时可以一键恢复上一组参数。这套“备份确认”的组合后来成了我做所有带配方功能项目的固定套路。小投入效果却非常明显至少从那次以后现场再没有出现过误操作导致工艺参数丢失的情况。这个项目给到我的最大体会是控制系统做得好不好技术方案只是一半另一半是对操作习惯的理解和对异常情况的兜底设计。一个真正好用的真空泵控制程序不是逻辑有多精巧而是操作工用起来顺手、出问题时能快速定位、误操作时有退路。这些东西单看图纸是看不出来的得靠现场一遍遍磨出来。