贴膜机这活儿,听着就是个“把膜贴上去”的简单动作,但真要在现场稳定跑起来,你会发现自己面对的是一大堆互相咬合的环节:取膜、对位、贴合、压辊、节拍、报警……而这些全都压在一个PLC身上。这篇笔记是我用西门子S7-1200做贴膜机控制系统的一段完整记录,从工艺需求怎么拆、硬件怎么选、I/O怎么分,到程序里的状态机怎么写、现场调试踩了哪些坑,全部摊开来讲,末尾附上核心SCL代码。适合正在接类似非标自动化设备、准备用S7-1200做控制的电气工程师,也适合刚入行想看看贴膜机控制逻辑长什么样的兄弟参考。
1. 项目需求梳理与控制系统方案选型
1.1 贴膜工艺全流程拆解
先别急着打开博途写程序,拿到一台贴膜机的需求,第一件事是把工艺动作拆到“任何一个气缸、任何一根轴在干什么”都清清楚楚。以我们这套设备为例,贴的是电子产品保护膜,规格大概150mm×80mm,节拍要求4秒一件,贴合精度±0.5mm以内。听起来指标不苛刻,但到了现场你才知道,光是把膜“稳住、放平、一次贴上去”这三步就能折磨你一周。
工艺动作拆开是这个顺序:人工或上料机构把产品放到贴合工装 → 取膜机构带着真空吸盘移动到膜片料仓上方 → 吸盘下降、真空开启、吸附膜片 → 真空检测OK后吸盘上升 → 取膜机构移动到贴合工位 → 吸盘下降,膜片边缘先接触产品 → 压辊从一端滚到另一端,把膜片压实排气泡 → 压辊抬起 → 吸盘破真空松开 → 取膜机构退回原位 → 下料机构把成品推走。
这个流程里有几个关键点需要单独拎出来说。第一是“真空取膜”这一下,膜片能不能被可靠吸起来,直接决定后面所有动作有没有意义;第二是贴合瞬间,膜片和产品之间不能有偏斜,一偏就是报废;第三是压辊速度不能太快也不能太慢,太快容易压出气泡或把膜拉变形,太慢直接拖慢节拍。控制系统的设计,就得围绕着这几个关键点来回打磨。
1.2 为什么选S7-1200而不是其他PLC
说实话,贴膜机这种设备的控制难度并不算高,但胜在“杂”:既有普通气缸逻辑,又有轴运动,还有真空检测和一堆传感器信号。我一开始也想过继续用老款200 SMART,毕竟成本低、用的人多,但仔细一算账就发现不划算。200 SMART做基础气缸控制没问题,可一旦要同时处理两三个轴的运动控制、还要在HMI上做配方切换和报警追溯,程序写起来就会很别扭。
S7-1200在这个项目中体现出明显的优势。首先是博途平台下组态方便,从PLC到触摸屏到伺服轴,全在一个工程里搞定,不用像以前那样几套软件来回切。其次是它本身支持运动控制功能,可以直接组态步进或伺服轴,发脉冲也好、走通信也好,不用再外挂运动控制模块。再一个是通信扩展能力,后面如果想接视觉、接扫码枪、接MES系统,以太网口都在,不至于被硬件限制住。
至于为什么不直接上1500,答案就俩字:浪费。贴膜机需要的点数、轴数、通信规模,1200这个级别完全够用,1500在成本上要高出一截,对非标设备来说没必要。选型这件事,讲究的是够用、好维护、供货稳定。S7-1200正好卡在这个甜点位。
1.3 系统架构与控制思路
整体控制架构分三层:最底层是执行机构,包括气缸、真空发生器、伺服或步进电机;中间层是检测元件,包括磁性开关、光电传感器、负压检测开关;最上层就是S7-1200和人机界面触摸屏。
控制模式我一般分三种:手动、单步、自动。手动模式供调试时用,每个气缸、每根轴都能单独动作,方便排查机械和接线问题;单步模式用于程序联调,把自动流程拆成一步步,每按一次启动走一步,方便看每一步的动作条件和结果;自动模式就是正常生产时的连续运行。这三个模式在程序里必须有明确的互锁逻辑,尤其是不能在自动运行中误切到手动,否则动作会乱套。
自动流程的控制思路,我最终选择的是“主状态机+分步骤执行”的结构。整个自动循环拆成若干个大状态,比如取膜状态、移动状态、贴合状态、压辊状态、复位状态,每个状态内部再细分动作步。这样做的好处是,报警定位时可以直接在触摸屏上显示“当前走到了哪一步、缺了什么条件”,调试和生产维护都省心。当初如果全用梯形图一层层套着写,程序不仅长,而且出了问题你根本不知道它卡在哪。
2. 硬件配置与I/O分配
2.1 CPU选型与模块扩展
硬件选型我是按照“输入输出点数 + 轴数量 + 扩展余量”来推算的。这台贴膜机统计下来,数字量输入大概需要24点,数字量输出大概需要18点,另外还有2个步进轴(取膜轴和压辊轴),其中取膜轴我们用了步进电机,压辊轴一开始用气缸驱动带丝杠,后面改成了步进电机驱动,方便调速度。
CPU我选了1214C DC/DC/DC这一款。它自带14点输入和10点输出,板上还集成了4路高速脉冲输出,带步进驱动绰绰有余。点数不够的地方,加了一个8点输入的扩展模块和一个8点输出的扩展模块,型号就是SM 1221和SM 1222这一类。算下来还剩下几个备用点,留着给后期加检测传感器用。
这里有个实际选型时要特别注意的坑:S7-1200的脉冲输出和普通输出共享资源,如果你的轴比较多,一定要提前算清楚。另外,如果轴用的是伺服驱动器,通过脉冲+方向方式控制,那么除了脉冲输出点,还要规划驱动器的使能信号和报警复位信号,这些都要占用输出点。
2.2 执行机构与传感器梳理
先盘一下这台设备上的执行机构。气缸一共六个:料仓顶升气缸、取膜吸盘升降气缸、贴合压紧气缸、压辊升降气缸、挡料气缸、下料推料气缸。每个气缸配两个磁性开关,分别检测伸出到位和缩回到位,这就占掉了12个输入点。
轴是两个步进轴,一个负责取膜机构在料仓和贴合工位之间水平移动,一个负责压辊在贴合面上的水平滚动。步进驱动器用脉冲+方向模式,使能信号由PLC输出点控制。
传感器方面,取膜吸盘的真空回路上装了一个负压检测开关,用于判断膜片是否真正吸住;料仓里装了光纤传感器,检测膜片是否缺料;贴合工位入口处装了对射光电,检测产品是否放到位。另外还有气压开关,检测设备的气源压力是否正常。
这里面我要专门提一句负压检测开关的安装位置,很多新手容易在这上面栽跟头。负压检测开关一定要尽量靠近吸盘安装,中间管路越短越好。如果装得离吸盘很远,真空建立和消失都会有明显延迟,程序里哪怕你加延时也容易误判,要么吸起来了说没吸住,要么膜片已经放下了还说真空在。
2.3 I/O分配表设计
I/O分配表看着简单,但分配得好不好直接影响后面接线和调试的效率。我给大家看一下我们这套设备的一个分配示意,注意我留了余量,并且把同一类型的信号尽量聚在一起。
| 地址 | 信号说明 | 类型 | 地址 | 信号说明 | 类型 |
|---|---|---|---|---|---|
| I0.0 | 启动按钮 | DI | Q0.0 | 取膜吸盘升降电磁阀 | DO |
| I0.1 | 停止按钮 | DI | Q0.1 | 取膜真空电磁阀 | DO |
| I0.2 | 急停 | DI | Q0.2 | 贴合压紧电磁阀 | DO |
| I0.3 | 模式选择手动 | DI | Q0.3 | 压辊升降电磁阀 | DO |
| I0.4 | 模式选择自动 | DI | Q0.4 | 料仓顶升电磁阀 | DO |
| I0.5 | 气压正常 | DI | Q0.5 | 挡料电磁阀 | DO |
| I1.0~I1.5 | 各气缸到位磁性开关 | DI | Q0.6 | 下料推料电磁阀 | DO |
| I2.0 | 真空检测OK | DI | Q0.7 | 取膜轴脉冲 | DO |
| I2.1 | 缺料检测 | DI | Q1.0 | 取膜轴方向 | DO |
| I2.2 | 产品到位检测 | DI | Q1.1 | 压辊轴脉冲 | DO |
| I2.3 | 取膜轴原点 | DI | Q1.2 | 压辊轴方向 | DO |
| I2.4 | 压辊轴原点 | DI | Q1.3 | 运行指示灯 | DO |
| I2.5 | 设备门锁开关 | DI | Q1.4 | 蜂鸣器 | DO |
分配I/O时有几个习惯我一直在坚持。一个是输入输出的地址不要排得密密麻麻,每个模块留几个空点,防止现场改线、加信号时地址不够用。再一个是磁开关、光电这些DC24V传感器统一用PNP型,搭配S7-1200的源型输入,接线一致性好,备件种类也少。输出点控制电磁阀时,如果是直流电磁阀,记得在阀体线圈两端并续流二极管,这个东西在图纸上不起眼,但少了它,电磁阀断电瞬间的反向电动势很容易把输出模块搞坏。
3. 程序架构与核心代码实现
3.1 程序块规划
程序架构我习惯在新建项目的时候就把文件夹结构搭好,不然程序一长,找一段逻辑能翻半天。这套贴膜机的程序最终分了这么几个块:
OB1是主程序,负责扫描周期内的总调度。OB100是启动初始化块,系统上电时把状态恢复到位、轴参数加载好、报警清空。OB30我设了一个循环中断,每100ms执行一次,用来做节拍统计和设备运行时间统计。
功能块方面,主体是FB_自动流程,用SCL编写,里面实现了整个自动运行的状态机;FB_轴控制,封装了取膜轴和压辊轴的复位、绝对移动、相对移动这些动作;FC_报警处理负责报警判定、报警复位和蜂鸣器控制。
数据块分两部分:DB_设备参数用来存放所有工艺参数,比如轴的速度、加速度、位置坐标、各气缸的动作延时、真空检测延时,这些都是可以在触摸屏上修改的;DB_运行数据存的是当前状态、节拍时间、产量计数、报警记录等动态数据。参数和运行数据分开存,好处是下载程序时可以选择只下载运行数据还是全部下载,不会把现场调好的参数弄丢。
3.2 自动运行状态机SCL实现
自动流程我最终用SCL的CASE语句来实现,相比用梯形图一层层套,SCL的框架感更强,读起来就像看一张流程图。下面是一段简化的核心代码,实际项目里会比这个长不少,但骨架就是这样的:
CASE #iStep OF 0: // 空闲状态,等待启动 IF #bStart AND #bReady THEN #iStep := 10; END_IF; 10: // 取膜吸盘下降 #bCylLiftDn := TRUE; IF #bCylLiftDnDone THEN #iStep := 20; END_IF; 20: // 真空开启,等待负压建立 #bVacuumOn := TRUE; IF #bVacuumOK THEN #bMemVacuumOK := TRUE; #iStep := 30; END_IF; 30: // 吸盘上升,取膜完成 #bCylLiftUp := TRUE; IF #bCylLiftUpDone THEN #iStep := 40; END_IF; 40: // 取膜轴移动到贴合工位 #bAxisMoveStart := TRUE; IF #bAxisMoveDone THEN #iStep := 50; END_IF; 50: // 吸盘下降,膜片贴合产品 #bCylLiftDn := TRUE; IF #bCylLiftDnDone THEN #iStep := 60; END_IF; 60: // 破真空,压辊从一端滚到另一端 #bVacuumOn := FALSE; #bRollerRun := TRUE; IF #bRollerDone THEN #iStep := 70; END_IF; 70: // 压辊抬起,吸盘上升 #bRollerUp := TRUE; #bCylLiftUp := TRUE; IF #bCylLiftUpDone THEN #iStep := 80; END_IF; 80: // 各轴回待机位,循环完成 #bAxisBackHome := TRUE; IF #bAxisHomeDone THEN #iStep := 0; #bCycleDone := TRUE; END_IF; END_CASE;用状态机的最大好处是,每一步的动作执行条件、完成条件都写得很明确,一旦设备卡住,触摸屏上显示当前步骤号,现场人员一眼就能看出“哦,卡在真空检测这一步了”或者“卡在轴移动这一步了”。相比用M继电器加定时器堆出来的老式梯形图,这种结构不管是调试还是后期维护,效率都高太多。
3.3 真空吸附与贴合压力控制逻辑
真空吸附这部分我单独拿出来写,因为它在贴膜机里太容易出问题了。逻辑本身不复杂:吸盘下降到位 → 真空电磁阀打开 → 等待负压建立 → 负压开关动作 → 判断吸着成功。但实际调试中你会发现,负压开关的响应时间、膜片的透气性、吸盘和膜片之间的贴合度,都会让检测结果变得不可靠。
我的做法是加了两个延时:一个是真空开启后等待负压建立的延时,一般给300ms到500ms,不要太长,长了拖节拍,短了容易误判;另一个是负压开关动作之后的稳定确认时间,给50ms左右,防止开关在临界点抖动导致偶发误报。这两个延时我都做成参数放到DB_设备参数里,现场调机时可以直接在触摸屏上改。
这里要提醒一句:有些膜片本身是微透气的,比如一些带排气槽的保护膜,真空建立时间会明显变长。碰到这种情况,单纯靠调延时是治标不治本,还是要从吸盘选型和膜片特性上想办法。实用经验是,优先选用带唇边的吸盘,唇边可以增加和膜片的接触面积,密封性更好。
贴合压力这一块,我们这套设备最初是用“气缸+节流阀”的方式控制的,压辊压在膜片上的力完全靠气缸减压阀设定。这种方式简单可靠,但没法做压力闭环,如果想做压力曲线监控,就得换成比例阀或者伺服电缸。如果预算允许,我建议后面改版时优先考虑伺服电缸加压力传感器,设备档次和稳定性都会上一个台阶。
3.4 报警与安全联锁
报警逻辑我的原则是“宁可多报,不能漏报”。每个气缸动作,除了正常完成条件之外,都加了一个超时检测。比如吸盘下降指令发出后,3秒内没有到位信号,程序就判定气缸卡死或磁性开关故障,立刻停掉自动流程,在触摸屏上报“吸盘下降超时”。这个超时时间也是可调的,根据实际动作速度留出1.5到2倍余量。
安全联锁方面,急停按下时,程序第一时间切断所有输出模块的负载电源,而不是仅仅靠程序里把输出置假。因为程序置假有扫描周期的延迟,万一PLC死机或者通信出问题,输出还是有电的,很危险。我是在硬件回路上做了急停继电器串在负载电源前面,急停一按,电磁阀和步进使能全部断电,这是硬逻辑,不依赖程序。
设备门锁和光栅信号也接入了程序联锁,门打开或者光栅触发时,自动流程立即进入暂停状态,轴停止输出,气缸停在当前动作状态,等复位信号确认安全后再继续。程序中要特别注意,暂停恢复后的起始状态必须明确,不能让气缸在半空中继续走接下来的动作,我一般会加入一个“重新定位”的回归步骤。
4. 调试实录与常见问题排查
4.1 调试流程与步骤
设备到现场之后的调试顺序,我基本遵循一套固定的路子,不跳步。第一步是上电前的检查,拿着I/O表逐点对线,确认每一个输入输出地址和实际信号对得上,这一步虽然枯燥,但能省掉后面大量排查时间。然后是手动调试,把所有气缸、轴分别点动一遍,确认动作方向、速度、限位都正常。再往下是单步调试,把自动程序一步一步走通,每一步的条件和输出都确认一遍。全部正常后,才进行连续空跑和带料试贴。
调轴的时候,我习惯先把速度参数设得很低,点动确认方向正确后,再慢慢加到一个合适的工作速度。如果一上来就用最终速度调机,一旦方向搞反或者坐标没设对,轻则撞机构,重则烧驱动器。取膜轴我们是步进电机,调起来相对粗放;压辊轴如果用的是伺服,还要先把电子齿轮比和单位换算搞清楚,运动控制的单位不对,程序里写的坐标全是空中楼阁。
带料试贴阶段,重点观察的就是三件事:膜片有没有被稳定吸起、贴合位置有没有偏差、压辊走完有没有气泡。这三个问题对应的调试手段不一样,下文细说。
4.2 常见问题速查表
调试过程中遇到的问题,我整理了一张速查表,基本覆盖了贴膜机最常见的几类故障。注意这些故障虽然看起来是机械或者传感器的问题,但很多根源在程序逻辑和安装细节上。
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
| 吸盘吸不起膜片 | 真空度不足、吸盘磨损、膜片透气 | 检查真空发生器、更换吸盘、调整负压检测阈值 |
| 真空检测时好时坏 | 负压开关安装离吸盘太远、管路打折 | 缩短检测管路、固定管路走向、增加稳定延时 |
| 贴合位置偏移 | 轴原点漂移、机械定位松动 | 重新回原点、改用硬限位加绝对坐标、检查机械固定 |
| 压辊出气泡 | 压辊速度太快、压力不足、膜片张力不均 | 降低压辊速度、增大压力、检查膜片送料张力 |
| 气缸到位信号偶尔丢失 | 磁性开关位置偏移、信号抖动 | 调整开关位置、程序加滤波确认时间 |
| 光电误触发 | 气管排气口正对传感器、油雾污染 | 调整排气方向、加装挡板、定期清洁传感器 |
| 步进电机丢步 | 加减速太陡、负载偏大、脉冲频率过高 | 降低加速度、增加减速时间、检查机械负载 |
| 设备一启动就报警 | 气压未建立、安全门未关、轴未回原点 | 完善启动前准备条件的判断逻辑,HMI显示缺哪一项 |
4.3 几个印象深刻的现场故障案例
挑三个印象最深的案例展开说说,都是那种排查起来绕了不少弯的问题。
第一个是对射光电频繁误触发。事情发生在产品到位检测上,生产过程中偶尔会出现“产品明明没到位,程序却判定到位了”的情况,导致吸盘直接压下去,差一点把产品压坏。排查了很久,最后才发现是旁边真空发生器排气口吹出的气流正好经过对射光电的检测区域,气流波动导致光电信号偶发性误动作。处理方式很朴素:把排气口加了一段消声器,方向改到朝下,再在对射光电外面加了一块小挡板。从那以后,我养成一个习惯:所有气动排气口都不能直接对着任何传感器。
第二个是贴合位置一直往一个方向偏。机械上判断定位没问题,坐标也核对过很多遍,但跑个两三百片之后,贴合位置就会慢慢偏出去。后来发现是取膜轴的原点感应开关用的是普通的接近开关,每次回原点的停止位置受速度影响有微小差异,累积下来就变成了位置偏差。解决方法是把回原点方式改成“减速停止+硬限位确认”的方式,并且在程序里回完原点后再执行一次绝对坐标校准。这个案例让我深刻理解了,轴的原点精度不是靠买多贵的传感器,而是靠回原点方式的工程设计。
第三个是真空检测偶发误判。现象是膜片明明被吸住了,程序有时候会报警“真空不足”,有时候又反过来,膜片已经放下了还显示真空OK。起初怀疑是负压开关质量不好,换了新的依旧。后来顺着管路查,发现从吸盘到负压开关之间有一段很长的软管,中间还有个大转角,导致真空建立和泄放都有延迟。把管路缩短、转角理顺之后,问题彻底消失。从此我设计气路图时,对负压检测管路的长度做了明确标注,要求不超过30厘米。
5. 程序复用与后续扩展的想法
5.1 把状态机模板沉淀成自己的“库”
这台贴膜机做完之后,我把自动流程的状态机框架抽出来,存成了自己的模板库。以后再遇到类似的“取料-移动-贴合-下料”设备,我基本只需要改状态编号、改动作步骤、改参数表,核心框架直接复用。这个习惯价值非常大,非标自动化项目最怕的就是每台设备程序都从零开始写,既慢又容易出错。有了模板,新项目的编程时间至少能压缩一半。
保存模板的时候要注意,不能把具体的轴坐标和I/O地址一起带过去,模板里只保留逻辑骨架,设备相关的点全部做成参数。换句话说,程序里不该出现硬编码的地址和数值,能做成参数的全部做成参数,这才是“复用”而不是“复制粘贴”。
5.2 扩展方向:视觉定位、数据追溯和MES接口
这套设备后续如果要升级,我第一个想到的就是加视觉定位。贴膜机的贴合精度如果既要快又要稳,纯靠机械定位和气缸限位是到不了头的,加一套视觉引导,把产品实际位置识别出来再叠加偏移量给轴走,系统就完全不一样了。
再一个数据方向,把每片的贴合时间、报警次数、产量统计、操作人员信息全部存下来,通过以太网接口接到产线管理系统,就实现了单机设备的数字化管理。S7-1200的联网能力足够做这件事,不需要额外加硬件,程序里加一个数据块存记录,定时往服务器上传就行。
我个人在实际调试过程中最大的体会是,贴膜机所谓的“技术含量”,不在于某个动作多么精巧,而在于整套系统在长时间、高节拍运行下还能保持稳定。调试时你可能为了一个真空误判折腾一整天,但最后发现就是一个管路长度和传感器位置的问题。所以做这类设备,耐心和细心比什么都重要。最后再分享一个小技巧:每台设备交付前,一定要做一次至少连续运行2小时的带料老化测试,把节拍、不良率、报警次数记录下来,能暴露绝大部分隐藏问题。这个步骤看起来费时间,但和客户现场三天两头打电话比起来,这点成本低多了。