
前几天接到一个老客户的电话说车间那台真空退火炉还是老毛病——抽真空、升温、保温全靠人工盯着上一炉刚因为操作工没及时关预抽阀温度冲高把料烧废了。客户早就想换S7-300PLC理由很直接西门子300系列的模块好买、程序透明、维修电工多少都学过后期不用依赖厂家。于是我去现场待了两周把真空炉控制从继电器逻辑整个搬进了S7-300今天就把这套手把手玩法原原本本写出来。这篇文章只谈设备选型、程序结构、调试顺序和现场踩坑适合正在做真空炉改造的电气工程师、做设备维护的自动化人员也适合刚接触西门子PLC想找个真实案例练手的初学者。1. 控制需求拆解真空炉不是只控温度和压力那么简单1.1 常见的真空炉工艺与对应控制要求真空炉的“真空”不是单纯开泵抽气那么简单。常见的真空炉工艺有真空退火、真空钎焊、真空烧结每种工艺对真空度、温度曲线、冷却速率的要求都完全不同。比如真空钎焊工作真空度通常要求到5Pa以下温度曲线里往往有一段缓升平台让钎料充分润湿而真空烧结可能反而需要通入少量氩气做分压控制防止合金元素挥发这时的压力控制跟纯抽真空就两回事了。我把几个典型工艺的控制要求整理成了一张表项目启动前先跟客户逐条对齐工艺类型典型工作真空度温度控制特点冷却方式真空退火10~100 Pa升温均匀保温段控温稳定过冲小于5℃炉冷或充气强制冷却真空钎焊0.1~5 Pa多段升温平台钎焊温度段需缓慢升温充气快冷为主真空烧结10^-1 Pa以下或分压最高温段长时间保温要求温度均匀性高随炉冷却或充气对流冷却抛开工艺差异控制系统要抓的底层变量都是一样的真空度、温度、炉膛压力、冷却水流量、炉门状态、真空泵组状态。不要一上来就写程序先把这些变量和对应的传感器、执行器捋清楚后面才能谈自动流程。1.2 S7-300在真空炉项目里的具体承担内容S7-300在这套系统里不是简单地替代继电器它至少要做四件事。第一是模拟量采集和换算真空计输出的是电压信号热电偶和红外测温仪输出的是毫伏或标准电流信号PLC要把这些原始信号变成操作工看得懂的Pa和℃。第二是顺序控制机械泵、罗茨泵、前级阀、高真空阀、充气阀、加热电源这些设备必须按严格的时间顺序启停顺序错了轻则抽不到真空重则把泵或炉门结构弄坏。第三是连续调节加热功率通常通过可控硅调功器输出PLC要跑PID运算根据温度偏差实时调整输出值真空炉因为主要靠辐射传热热惯性很大PID参数必须单独整定直接套用普通电炉的参数十有八九会振荡。第四是安全逻辑任何时刻只要温度超限、真空度掉出工艺范围、冷却水中断或者炉门未关紧系统必须在几百毫秒内切断加热并且保持故障状态让操作员确认不能自己偷偷恢复。1.3 安全联锁与动作顺序先定规矩再写程序动手写代码前我会先画一张动作顺序表把每个工艺阶段的进入条件和退出条件定死。以一台真空钎焊炉为例自动流程至少是准备阶段——检查炉门已关、冷却水正常、电源正常抽空阶段——启动机械泵打开前级阀真空度达到设定值后启动罗茨泵继续抽到高真空阀开启压力升温阶段——真空度达到工艺要求后允许接通加热按曲线分段升温保温阶段——维持目标温度记录曲线冷却阶段——停止加热关高真空阀充入工艺气体启动循环风机强制冷却结束阶段——压力恢复到常压后允许开炉门。这些动作之间不是简单的“时间到了就下一步”而是每个阶段的切换都必须满足对应的条件信号。我习惯把这些条件写成联锁表一张纸贴在控制柜里。后续写梯形图时每个输出线圈前面都要串上安全条件而不是只靠状态位万一程序跑飞或者有外部干扰硬件层面的硬联锁还能兜底。2. 硬件接线与I/O分配每条信号线都对应一个安全故事2.1 真空计、热电偶和流量开关怎么选真空炉的测量仪表直接决定了控制质量这块千万别图便宜。真空度测量低真空段我一般用皮拉尼规量程大约0.1Pa到100kPa高真空段用冷阴极电离规能测到10^-4Pa量级。很多国产皮拉尼规输出0~10V模拟信号但要注意它的量程是对数刻度的——0V对应大气压10V对应满量程的极限真空中间电压跟压力不是线性关系程序里必须做对数换算这是后面一个大坑。温度测量方面常用两种方案K型和S型热电偶直接测炉膛温度或者用红外测温仪测工件表面温度。热电偶便宜可靠但真空炉里高温区环境复杂补偿导线要选同型号的接头处严格做屏蔽红外测温仪适合真空钎焊这类需要实时测工件温度的场合但价格贵而且受工件表面发射率影响大。冷却水系统一定不能只用压力开关流量开关更可靠我见过因为管路堵塞导致压力正常但流量不足、炉体局部过热的事故所以流量信号必须进PLC联锁。2.2 S7-300模块组合与量程卡设置CPU方面我常用315-2PN/DP主要考虑是程序量和通讯接口。真空炉控制程序量不大313C其实也够但315的通讯冗余和扩展能力好一些后期还能挂以太网模块做远程运维。数字量输入用SM321数字量输出用SM322模拟量输入用SM331如果加热输出是0~10V控制可以加一个SM332模拟量输出模块或者直接用可控硅调功器的通讯接口写输出看现场配的是什么调功器。SM331模块上有绿色量程卡这是新手最容易翻车的地方。量程卡的位置决定了模拟量通道的输入类型比如4~20mA、0~10V、热电偶、PT100等。改量程卡时一定要先断电模块正面有个小螺丝松掉后可以把量程卡拔出来旋转方向重新插回去。我遇到过不止一次现场装了模块但读数始终是0查半天发现量程卡还在出厂默认的“A”位置跟实际穿线的4~20mA对不上。2.3 I/O点表设计冗余安全点单独留通道设计I/O点表时除了常规的泵、阀、加热电源控制点安全联锁信号一定要单独占输入点不要跟状态显示共用。比如冷却水流量开关、超温报警开关、炉门限位开关这些信号要直接接到PLC数字量输入点并在梯形图里做“常闭逻辑”。如果是通过触摸屏操作可能需要在屏上显示设备的启停状态那这些状态点就也要占用输入点。下面是我常用的一组点表片段信号名称信号类型模块通道量程/说明皮拉尼规真空度AISM331 ch00~10V对应量程需按对数换算冷阴极规真空度AISM331 ch10~10V对数刻度热电偶K型炉温AISM331 ch2通过补偿端子接热电偶冷却水流量开关DISM321 ch0常开触头有水时闭合炉门关闭到位DISM321 ch1位置开关关到位闭合机械泵运行反馈DISM321 ch2接触器辅助触点机械泵启动指令DOSM322 ch0中间继电器线圈加热功率给定AOSM332 ch00~10V给SCR调功器实际操作时我会把每个通道的端子号、线色、屏蔽接地点都写到端子接线表里这一步看着琐碎但后期排查故障时能少走很多弯路。3. PLC程序实现模拟量整流、PID调节与状态机三块硬骨头3.1 模拟量信号处理的标准化写法S7-300的模拟量输入模块采集到的原始值范围是0~27648。比如一个0~10V的真空计信号PLC内部是把0V对应010V对应27648。常规做法是先把原始值转成0.0~1.0的实数再乘上量程系数。但真空计的量程不是线性的很多皮拉尼规课规的压力值是按10的幂变化的所以必须做一个分段的指数换算。我习惯写一个FC叫FC100专门处理所有模拟量。它的输入是PIW地址和仪表量程参数输出是浮点工程值。皮拉尼规的对数换算我用STL写过一个标准块核心思路是L PIW256 // 读取皮拉尼规原始值 0-27648 ITD // 转换为32位整数 DTR // 转为实数 L 2.7648e4 /R // 归一化到0.0-1.0 L 10.0 *R // 得到0-10V电压值 L 2.0 // 下限指数对应量程起始压力10^2Pa L 1.0 R // 电压对应指数偏移具体系数由仪表说明书决定 **R // 10的指数运算 T #VACUUM_PA真实项目里每个真空计厂家给的换算公式都不一样有的是以1Pa为基准的真数刻度有的直接给了一个电压-压力对照表。最稳妥的做法是把厂家的标定表抄回来在程序里做查表和插值或者用SCL块写循环查找。这一步不能省我见过有人直接按线性换算结果真空度显示误差超过一个数量级联锁压力点被完全带偏。3.2 温度PIDFB41调用与参数整定思路S7-300的PID控制最标准的是用FB41“CONT_C”功能块它需要被定时调用我通常放在OB35里OB35的循环周期默认100msPID的采样时间就跟着这个周期走。调用FB41时要给每个背景数据块单独分配DB号码不能共用一个背景数据块。比如加热温度用DB10充气压力用DB11每个控制回路一个背景块。FB41的关键输入SP_INT是设定值(PID内部应归一化到0~100%或者实际的工程值通常用浮点格式)PV_IN是过程值MAN是手动输出值。真空炉调试时经常要手动控制加热所以操作模式要接好当切换开关处于“手动”时把MAN的值直接送给输出处于“自动”时让LMN输出跟随PID运算结果。我还会加上一个无扰切换逻辑也就是从自动切到手动前把当时的LMN值赋给MAN避免输出突变导致加热功率跳变。参数整定上真空炉因为热惯性大纯比例作用容易造成稳态误差积分时间必须足够长微分作用要慎用因为炉温信号本身噪声比较大微分容易放大干扰。我实际整定的经验是先给一个很小的输出阶跃比如加热输出从0跳到20%观察炉温在半小时内的上升斜率估算出增益和惯性时间再按临界比例度法细调。初期可以把P设小、I设长跑一条保温曲线时观察有没有振荡和超调再逐步缩小积分时间。这套方法虽然慢但对真空炉这种大滞后对象比简单抄参数可靠得多。3.3 自动工艺流程用状态机替代梯形图堆叠真空炉的自动流程如果全用梯形图自锁互锁堆起来程序会非常长改起来也痛苦。我更推荐用状态机方式用一个INT变量表示当前阶段比如0停止、1预抽、2主抽、3升温、4保温、5冷却、6结束。每个OB或FC里用“比较当前阶段号执行不同逻辑”的方式来组织。步进的动作逻辑可以用SCL写一段精简的框架CASE #STEP OF 1: // 预抽 Q_PUMP1 : TRUE; Q_VALVE_PRE : TRUE; IF #VAC_LO 100.0 THEN #STEP : 2; END_IF; 2: // 主抽 Q_VALVE_HI : TRUE; IF #VAC_HI 5.0 THEN #STEP : 3; END_IF; 3: // 升温 Q_HEAT : TRUE; IF #TEMP #TARGET_TEMP THEN #STEP : 4; END_IF; ... END_CASE;看着像高级语言但编译下载后一样跑在PLC里。这种方式的好处是每个阶段入口和出口都清清楚楚维护人员拿到程序后能看到“当前在第几步等哪个条件进下一步”调试时可以直接把STEP强制到指定阶段做单步试车。如果硬件支持也可以用GRAPH但我个人觉得SCL的CASE更直观而且不依赖Step7的专业版软件通用性更好。每个阶段内部还要考虑超时。比如预抽阶段正常应该在5分钟内达到设定压力如果超时还没到要报故障而不是无限等下去。所以我会给每个阶段配一个延时定时器进阶段时启动T_xxx判定阶段完成时复位如果T_xxx时间到而阶段完成标志没置位马上切到故障状态并弹出报警画面。3.4 联锁与故障处理逻辑宁可误动作不可不动作安全联锁的梯形图我坚持用“硬逻辑优先”的原则。比如加热输出继电器线圈前面必须串上这几个条件的常开触点真空度已达标、炉门关闭、冷却水流量正常、超温报警未触发、急停未按下。这些触点要在硬件回路上也串一遍——PLC输出到中间继电器的线路上另外加装一套继电器回路做硬联锁这样即使PLC掉电或程序跑飞硬件上依然能切断加热电源。故障复位逻辑也要想清楚。常见的做法是做一个“故障保持”M区任何联锁动作都会把故障标志置1对应的报警灯或触摸屏弹窗常亮故障复位按钮需要满足“所有条件已恢复”才能把故障标志清掉。我在现场遇到过操作工为了赶工期复位按钮按下去就把报警清掉结果条件其实还没恢复造成设备强行启动。所以复位键必须接成“按条件复位”而不是“无条件复位”比如按复位键时PLC先检查故障原因的输入信号是否已经恢复成安全状态再允许清除故障标志。4. 现场调试顺序为什么先测点再整定、先抽空再升温4.1 Step7项目搭建与硬件组态易错点开局第一步是在Step7里新建项目插入一个300站点然后按实际硬件配置插入机架和模块。最容易错的地方是“模块订货号”必须跟实际安装的一模一样比如SM331的6ES7 331-7KF02-0AB0和-7KB02-0AB0虽然外形一样但模拟量输入通道数和量程卡位置完全不同。组态时如果订货号选错PLC下载硬件组态后有可能直接报故障红灯或者某个站的I区address对不上。组态完成后要检查一下模拟量模块的测量范围设置。在Step7里双击SM331的通道会看到“Measuring range”下拉框要选择“4 wire transducer”、“2 wire transducer”或者“RTD”等选项这些选项对应着实际接线方式和量程卡位置。我碰到过组态里选了4~20mA两线制但实际接线是四线制传感器结果AI通道读出来一直是27648上限或者跳变。这类问题在硬件组态阶段就要跟电气图逐一核对。4.2 逐点测试IO用强制功能模拟开车条件程序写完后不要急着上设备先在PLC的变量监视表里逐一强制模块输出。比如用M区强制模拟“炉门关闭到位”信号在梯形图里观察对应的Q点会不会动作。这一步我习惯叫“空点测试”就是把每一路输入、输出的逻辑关系捋清楚再合闸。强制输出之前一定要断开执行机构的电源比如把接触器的主回路断开或者拔掉中间继电器只在PLC侧检查Q点通断。曾经有工程师强制Q点时没有断开主电路结果机械泵突然启动差点造成人身事故。强制一个点观察一个点确认无误后复位再做下一个。数字量输入测试时可以用短接线把传感器信号短到PLC输入端子触发一次看程序里I点变化模拟量输入测试则在端子处加一个信号发生器给定5V电压看转换值是否对应满量程的一半。4.3 真空泵组启动顺序与检漏验证真空泵组是我在调试时花时间最多的地方因为它涉及机械泵、罗茨泵、扩散泵之间的启停顺序。典型启动顺序是先开冷却水确认水流量正常启动机械泵打开预抽阀把真空系统从大气压抽到100Pa左右达到切换压力后停预抽阀启动罗茨泵或者开高真空阀继续往下抽如果工艺要求更高极限真空再启动扩散泵或分子泵但这阶段对阀门动作时序的要求更严格稍微操作错就可能把油返到炉膛里。调试时我一般手动模式一步步验证每次只做一个动作观察真空计读数的变化趋势。要特别留意“不漏气”这件事系统抽到某个压力后长时间不上可能是法兰没压好、真空计本身漏气或者放气阀没关严。最简单的办法是用氦质谱检漏仪没有的话也可以用“压力回升法”——关掉所有泵和阀看炉膛压力回升速率如果回升速率高于工艺要求先查机械密封和阀门。4.4 PID整定实操从阶跃响应到临界比例度PID参数一定要在真空度和炉温都稳定、炉内没有工件或只有空炉的情况下开始整定。第一步设定目标温度把PID设成纯P模式给一个不大的输出阶跃比如加热输出从20%切到30%记录炉温上升曲线看滞后时间和上升速率。第二步根据上升阶段的斜率估算出基本比例系数把I和D暂时设0观察纯P作用下的稳态波动。如果曲线缓慢振荡说明P太大减小P如果升温太慢适当增加P。第三步加入积分作用从I较大值开始慢慢减小直到温度能回到设定值且不超调。真空炉升温阶段对超调量很敏感因为炉内辐射加热有延迟超调容易烧坏工件。我通常把目标定为“升温段允许过冲2℃以内保温段稳定在±1℃”。有些现场为了达到这个指标甚至会在接近目标温度前20℃切换到手动输出提前降功率这种方法虽然简单但对操作经验依赖太强不如把PID整到位省心。5. 投产后反复出现的故障与排查思路5.1 真空度读数乱跳接地与屏蔽是头号嫌疑真空炉底盘内部传感器很多真空计信号线如果跟加热电源线、泵电源线走同一个线槽干扰必然严重。投产后如果发现真空度数值无规律跳变第一反应不是去怀疑真空计坏了而是去检查信号电缆的屏蔽层是否单端接地、模拟量模块的公共端子是否接到了保护地。S7-300的模拟量模块对共模干扰比较敏感我曾经因为屏蔽层两头都接地产生了地环路真空度读数在50Pa附近来回跳了近10Pa后来改为模块侧单端接地问题立刻消失。另外检查一下调功器的散热风扇或交流接触器线圈是不是跟信号线靠得太近。真空炉的加热电源是大功率器件启停瞬间会产生很强的电磁干扰这类干扰通过空间耦合进信号电缆比传导干扰更难查。处理方法是用带屏蔽的专用信号电缆并且单独走管路径尽可能远离变频器和调功器的主回路。5.2 加热功率上不去热电偶补偿与冷端问题有一次现场反馈“升温阶段加热输出已经100%了温度却纹丝不动”。到现场一看热电偶读数明显偏低炉子实际温度可能已经过高只是PLC不知道。问题出在热电偶补偿导线接反——K型补偿导线有正负极接反后温度显示偏了很大。另一类常见问题是热电偶冷端补偿设置SM331组态里冷端补偿方式如果是“参考端子”而不是“内部补偿”必须把补偿导线接到模块的参考端子上否则温差越大读数越不对。排查这类故障时我先用便携式测温仪直接测热电偶热端附近的炉体温度跟PLC读数对比偏差超过正常范围就直接查接线和补偿不要急于动PID参数。等温度显示准了再判断加热功率够不够否则容易把病根误判成PID问题调了半天是白费功夫。5.3 自动流程卡在某一阶段条件不满足排查法设备运行一段时间后自动流程有时会莫名卡在“预抽”阶段不动。我教操作工的排查套路是先看触摸屏当前提示的“等待条件”接着去PLC的变量表里找对应的过程IO看是真空计还没到切换值还是某个阀门反馈信号异常。多数情况是机械泵掉以导致前级阀没开到位或者真空计探头污染读数偏低一直达不到100Pa的切换点。最实用的技巧是在程序里给每个阶段加一个“状态停留时间”和“最后不满足条件”的保持变量。当流程卡住时故障画面直接显示“预抽阶段等待真空度小于100Pa已120秒”而不是让操作工盯着满屏程序猜。这个功能看着不起眼但能省下大量现场沟通时间我几乎所有项目都会加上。5.4 PID振荡与批次差异工艺曲线与参数匹配同一个炉子空炉和带满炉料时热惯性差很多PID参数不通用。客户常问为什么空炉调试很好的程序正式生产时温度超调到十几度。原因很简单装料量加大后热容量变大同样的比例增益会导致积分过冲。我的建议是把工艺曲线按装炉量分成两到三档PLC里存三套PID参数操作工根据装炉量选择“轻载/中载/满载”模式。或者更简单一点升温段用固定功率斜率控制到了保温段才切到PID这样能把大部分振荡避开。批次差异还有一个容易被忽略的点真空度不同炉内残余气体的导热能力不同温度均匀性也随之变化。所以同一组PID参数在5Pa和0.5Pa条件下的表现是不一样的。如果工艺允许尽量把保温阶段的真空度控制在一个稳定区间再做参数整定这样批次的重复性会好很多。最后再说一个个人经验真空炉控制系统交付后最值钱的往往不是程序本身而是你留给操作工和维修工的那张联锁表。把每个报警、每个互锁条件、每个泵阀顺序都写成现场看得懂的表格贴在柜门上以后不管是换传感器还是改程序都能少走很多弯路。我每次去售后现场第一件事就是看那张表格还在不在——它比绝大多数编程注释都管用。