1. 包装机控制系统的需求,到底从哪说起
1.1 客户的原始诉求与现场调研
接到这个项目的时候,客户那边其实只说了一句话:我们这条包装线,想换成PLC控制。听起来很简单对吧?但真正去现场捋了一遍之后,才发现里面的门道远不止"换一个控制器"这么简单。
先说说现场的情况。这是一条典型的成品包装产线,工艺流程大致是:输送带把产品送上来,到位后停住,气缸夹紧,薄膜裹过来,封切机构切一刀,然后成品落到下一段输送线,同时计数器加一。原来用的是老式继电器控制柜,外加几个时间继电器和计数器,参数全靠电位器调,温度控制用的是老式温控表。看着能跑,但问题很典型:继电器触点氧化后偶尔不吸合,计数器和实际产量经常对不上,换一种包装规格就要重新调半天电位器,操作工嫌麻烦,干脆把灵敏度调到最大,结果膜还没到位就开始封切,废品率直线上升。
我在现场蹲了半天,把工序拆解成了几个关键节点:送料检测、到位定位、夹紧、封切、排出计数。每个节点对应哪些传感器、哪些气缸、哪些电机,全部列成表格。这一步非常重要——很多项目失败不是因为PLC程序写不好,而是需求根本没有理清楚就急着画梯形图。我还专门问了操作工平时最讨厌的操作是什么,得到的答复是:换规格时要调一堆旋钮,容易调错。这其实就是一个隐藏需求:参数必须集中、可视化、可保存,最好做成配方。
调研结论最后落在三个方面:第一,控制系统要稳定,不能再出现继电器那种偶发不动作;第二,参数调整必须傻瓜化,操作工不能懂电气也能完成换型;第三,要有故障提示,不能再靠老师傅闻味道听声音来猜问题。这三条,直接决定了后面的硬件选型和程序架构。
1.2 为什么最终选了 S7-1200
在PLC选型这个问题上,我其实纠结过一阵子。客户现场维护人员以前接触过老款200系列,三菱的也用过。但从这个项目的实际需求倒推,S7-1200是最合适的选择,原因有三。
第一个原因是通信和监控需求的升级。客户明确提过一嘴,以后可能会接生产管理系统,要实时看产量和报警。S7-1200自带以太网口,支持PROFINET和普通TCP/IP通信,后续不管是接上位机、触摸屏还是扫码枪,都很方便。相比之下,老款200系列要加通信模块才能联网,成本和复杂度都上去了。第二个原因是程序容量和调试效率。S7-1200使用博途软件编程,支持功能块、全局数据块、多语言混合编程,结构化程度比老平台高很多。对于包装机这种中等规模控制逻辑,S7-1200的存储空间和工作内存完全够用,而且博途的在线监控和强制功能让调试效率翻倍。第三个原因涉及成本核算——不能只看PLC本身的价格,还要算调试工时、备件库存和未来的扩展成本。综合下来,S7-1200的性价比是最稳的。
具体型号我选的是CPU 1214C DC/DC/DC。为什么不是价格更低的1212C?因为我预估的数字量IO点数在40个左右,1214C本体自带14个数字量输入、10个数字量输出,再配一个信号板和一个数字量扩展模块就够了。如果选1212C,点数太紧张,后期接口不够用再换CPU,折腾的时间和成本更高。另外DC/DC/DC版本供电是24V直流,现场控制柜里本来就有稳定的开关电源,不需要额外处理220V转24V的问题,比AC版本更适合这种非标设备环境。
2. 硬件配置:IO点数的统计和选型思路
2.1 IO点数统计到底怎么算才稳妥
很多初学者在算点数的时候容易犯一个错误:只统计当前需要的点,不预留余量,结果现场一调试就发现这个要加传感器、那个要加指示灯,点位全满了,只能外挂继电器硬凑。
我这个项目的IO点数,是严格按照功能清单逐个字段填出来的。输入侧:启动按钮1个、停止按钮1个、急停回路反馈1个、复位按钮1个、控制模式切换旋钮(手自动)1个,这属于操作类输入。检测类输入就多了:送料检测光电1个、到位检测光电1个、夹紧气缸磁性开关2个(夹紧和松开到位各1个)、封切气缸磁性开关2个、膜长检测接近开关1个、成品排出检测1个、安全门开关1个。再加上备用和报警复位之类的点,数字量输入算下来是14个左右。输出侧:输送带电机接触器1个、夹紧电磁阀1个、封切电磁阀1个、伺服或变频器运行信号1个(如果不需要调速可以简化)、三个颜色指示灯(红黄绿)各1个、蜂鸣器1个,再加上备用输出和预留,数字量输出大约是10个左右。
前面提到了,我选的是1214C,本体自带14DI和10DQ。也就是说,如果不考虑模块扩展,本体点数刚刚好卡线。但工程上绝对不能这么干——现场多加一个检测点或者多一个声光报警,就完全没有余量了。所以我加了一块数字量扩展模块,把总输入点数扩到32左右,输出扩到24左右,实际利用率控制在七成上下。这就像买电脑电源一样,你算出来额定功率300W,就买个450W的,别图便宜正好卡数值,留出来的余量在后续维护和功能升级里会帮你省下大麻烦。
温度控制部分我加了一个模拟量输入信号板,接热电偶。封切温度是包装机的一个关键工艺参数,膜厚不同、走带速度不同,封切温度都得跟着变。用模拟量输入直接采集温度传感器的真实值,然后在程序里做控制和报警,比老式温控表直观得多,参数也能存到配方里。
2.2 传感器、气缸和PLC输入输出接口的匹配经验
硬件选型里最容易出问题的,不是PLC本体,而是传感器和PLC输入端的电平匹配。S7-1200的普通数字量输入,默认是漏型输入接法,也就是公共端接M,传感器输出低电平有效。但很多现场选用的国产NPN型光电传感器,输出的是低电平信号,这正好匹配。怕就怕有人不小心买成PNP输出——输出高电平,接到漏型输入上,信号要么一直不变化,要么直接烧坏输入端。我在现场就遇到过这种情况,换传感器之前先确认了型号输出类型,才避免了一次返工。
气缸磁性开关是另一个容易踩坑的地方。磁性开关分两线和三线制,两线制常见的是NPN常开,三线制有NPN和PNP两种。如果PLC输入端是漏型接法,磁性开关选NPN常开就相对安全。这个项目的夹紧气缸和封切气缸,我都用的是带磁性开关的型号,直接检测气缸活塞到位状态,而不是靠时间估算是到位了没有。为什么这么选?因为包装机的封切动作精度要求较高,活塞有没有真正到位,直接影响封口质量。你靠延时等待,温度不够或者膜没对齐照样动作,次品率就上来了。等到位信号再执行下一步,这是气动控制里最基本也最实用的逻辑。
电磁阀方面,夹紧和封切用的都是单电控二位五通阀,线圈电压DC24V。选单电控的原因很简单:这两个气缸理论上都有弹簧复位,断电自动回到初始位,不需要双电控保持状态。单电控的好处是省一个输出点,而且断电状态是明确的安全位。这里有一个重要提醒——电磁阀线圈是感性负载,在PLC输出断开瞬间会产生反向电动势,如果输出模块不是继电器型且没有续流保护,长此以往输出点容易烧坏。1214C的晶体管输出模块本身有保护,但为了保险,给电磁阀线圈并联了续流二极管,几毛钱的成本,换来的却是输出点寿命的大幅提升。
3. 程序架构才是项目的灵魂
3.1 程序分块:OB、FC、FB和DB的划分方式
硬件确定以后,剩下的重头戏就是程序了。我一直觉得,PLC程序写到后面,拼的不是你会多少条指令,而是你怎么组织这些指令。写在一个OB1里全部串成一坨,那叫堆代码;按功能拆成模块,每个模块负责一件事,这才叫编程。
这个项目的程序结构,我分成了四层。第一层是组织块OB1,负责调用各个功能模块,相当于人的大脑中枢,它不干具体活,只负责调度。第二层是几个功能块FC,每个FC对应一个独立功能:手动操作、自动运行、配方管理、报警处理。第三层是函数块FB,用于那些需要长期记忆的、有状态的功能,比如状态机逻辑本身我放在了一个FB里,参数和运行状态保存在对应的背景数据块DB中。第四层是全局数据块,存放配方参数、计数器、系统配置等信息。
有人可能会问,FC和FB到底有什么区别?一句话说清楚:FC没有自己独立的数据存储区,临时变量用完就没了;FB有自己的背景DB,调用一次就对应一块独立的内存,里面的数值可以跨周期保持。包装机的自动流程需要记录当前跑到哪个工序了,还要记住每一步的定时时间、到位标志,这些状态在OB1每扫描一次之后不能被清除,所以用FB配合背景DB是最合适的。
程序分块的另外一个好处是查问题快。如果自动流程出了毛病,我先打开状态机那个FB,看当前状态停在哪个值,立刻就能缩小范围。要是全部写在一个块里,你只能一行一行对着看,现场调试的时候脾气再好也要崩溃。
3.2 状态机设计:包装流程是怎么被逻辑化的
包装机的自动流程,天然就是一个顺序控制问题。送料、夹紧、封切、计数、排出,每一步都有触发条件和完成信号,这正是状态机最擅长处理的场景。简单来说,我定义了几个核心状态:待机、送料中、夹紧中、封切中、退回复位、计数完成、报警停机。
状态切换的核心原则是:每个状态的退出必须满足两个条件——下一步的触发信号有效,并且当前状态的输出动作已经完成。比如"夹紧中"这个状态,进入时输出夹紧电磁阀,然后程序等待夹紧气缸的磁性开关到位信号。收到到位信号后,才允许切换为"封切中"。这里绝对不能光靠计时器——气缸动作慢了一点或者到位开关没触发,计时器到了照样往下走,气缸还没到位就开始封切,后果就是切坏产品或者损坏机械结构。
状态机程序如果用梯形图写,会觉得特别啰嗦,因为每一个转移条件都要写一大段触点串联。所以我用SCL语言来实现状态机主体,代码结构清晰得多,大概的思路如下:
IF currentState = 'STANDBY' AND startButton THEN currentState := 'FEEDING'; END_IF; IF currentState = 'FEEDING' AND productAtSensor THEN currentState := 'CLAMPING'; clampValve := TRUE; END_IF; IF currentState = 'CLAMPING' AND clampCylinderInPos THEN currentState := 'SEALING'; sealValve := TRUE; END_IF;当然,实际程序比这个要长得多,每个状态还包含输出赋值、定时器启动、超时报警等辅助逻辑。但核心思路是一目了然的:当前状态决定下一步动作,条件满足才允许跳转,条件不满足就原地等待,配合超时故障检测,整个流程就不会乱跳。
3.3 安全联锁:不能只靠PLC程序保命
程序里还有一部分非常重要,但很多人容易偷懒——安全联锁逻辑。包装机有加热部件、有气缸、有运转中的输送带,如果没有任何保护,操作工伸手清理卡料的时候设备突然动作,后果不堪设想。
第一层保护是硬件回路:急停按钮串在接触器控制回路里,按下急停直接切掉主回路电源,不经过PLC。同时急停的辅助触点接一路给PLC输入,让程序知道急停发生过。这里有一个关键点:硬件安全回路和程序逻辑必须独立,不能依赖程序去断电,因为程序可能跑飞、CPU可能死机,硬件断电才是最后一道防线。
第二层是安全门联锁:安全门打开时,程序强制进入停止状态,所有气缸电磁阀断电、输送带电机停止。门开关信号是常闭型的,门没关好时为断开状态,一旦断线也能暴露出来,不至于出现"线断了反而以为门关好了"的隐患。第三层是动作互锁:封切温度没有达到设定值之前,禁止启动自动流程;输送带没有停止之前,禁止夹紧气缸动作。这些逻辑虽然简单,但每一条都是实际生产中的血泪教训换来的,绝对不能省。
4. HMI和参数管理:让操作工不再头疼
4.1 触摸屏画面布局的逻辑
系统选用了西门子精简系列触摸屏,与S7-1200之间走以太网连接。画面不多,但每一屏的布局我都琢磨过,因为现场用的是操作工,不是我这种工程师,他们每天点来点去的就那几个按钮,界面搞复杂了反而惹骂。
主画面我放的是自动运行的集中监控区域:当前产量、目标产量、运行状态、当前袋数,外加一个超大的启动和停止按钮。按钮为什么做这么大?因为现场戴手套操作很常见,按钮做小了,戴着手套点不准,操作工烦了就直接跳过触摸屏去按物理按钮,监控就形同虚设了。
第二屏是手动操作画面,每个气缸对应一个点动按钮和到位指示灯。手动画面是调试和维护时用的,维修人员可以单独动作某一个气缸,排查机械卡滞还是电磁阀故障。第三屏是参数设置画面,封切温度、走带延时、计数预值、气缸动作延时就放在这一屏。最后一屏是报警画面,报警代码、发生时间和解除状态都在这里。
连接方面,触摸屏变量的地址直接映射到PLC的全局数据块。我习惯的做法是:在PLC里建好一个专门的DB,字段名全部用有工程含义的名字,比如封切温度设定、当前产量、运行状态。然后在触摸屏里通过绝对寻址的方式引用这些变量。用DB集中管理参数的好处是,后续如果想改成配方管理,或者往上位机传数据,只需要访问这一个DB就够了,不用东找西找。
4.2 配方、用户权限和那些在触摸屏上容易被忽略的事
配方功能是这个项目的痛点所在。前面说过,客户换包装规格时要调一堆电位器,非常麻烦。用触摸屏之后,我在参数画面里直接做了三组配方,对应常见的三种包装规格,每组配方里包含封切温度、输送带速度系数、计数预值等六项参数。操作工换规格时,按一下配方加载按钮,PLC就把对应数据块的参数一次性覆盖到当前运行参数中,比原来拧电位器的效率高得不止一个量级。
配方加载在程序里要处理一个问题:参数的生效时机。不能在封切动作进行到一半的时候突然改温度设定,那会导致温度控制系统剧烈波动。我的做法是,配方加载只允许在待机状态下进行,自动运行中收到加载命令则先挂起并提示,等到停机后再执行。这个小细节如果不注意,很容易出现在设备运行时改变参数然后封切质量突然变差,操作工还找不出原因。
权限管理我也是做的。触摸屏支持用户分级,操作员只能看主画面和参数准备画面,不能修改配方;工程师级别的账号才能进入参数设置和手动调试画面。倒不是说防着操作工搞破坏,而是因为误操作改错参数后,排查起来的时间成本比什么都贵。密码保护的成本很低,收益却很直接。
另外推荐一个S7-1200的好功能:板载Web服务器。在博途里启用后,同一网段内任何电脑浏览器都可以直接访问PLC,查看变量和诊断信息。现场调试时我带笔记本连到同一网络,打开网页就能看到关键变量的实时值,不用专门连博途在线,方便很多。后面做远程运维的时候,这个Web入口还可以作为初步排查通道。
5. 现场调试实录:那些让人挠头的坑
5.1 计数不准:看似简单的问题,水很深
调试过程中第一个暴露出来的问题是计数异常。空机测试的时候计数器走得很准,一跑正式产品就开始多计、漏计,有时候一次出好几个,有时候半天不加一个。这种间歇性问题最讨厌——它不是百分之百地错,而是时好时坏,你盯着它的时候它是好的,你一转身它就错了。
我先从传感器下手。成品排出检测用的是光电传感器,检测产品从封切位落到后续输送带的瞬间。问题在于产品下落的速度很快,光电传感器的响应时间如果跟不上,就会漏掉一次。我查了选型手册,普通漫反射光电的响应时间是几十毫秒到几百毫秒不等,而现场产品落下的过程可能只有几十毫秒。解决方案是换一个高速响应类型的光电传感器,响应时间压到1毫秒级别,这样物理响应就跟得上了。
但换了传感器之后,计数还是有偶发多计。再查下去发现,问题出在信号抖动上——传感器信号线路径经过变频器附近,变频器运行时产生的电磁干扰耦合到信号线上,导致PLC输入端出现高频脉冲。PLC实际扫描周期大约是10毫秒左右,如果干扰脉冲刚好落在IO更新检测的窗口内,就会被当成有效信号。解决手段分两步:第一步,信号线全部换成屏蔽双绞线,屏蔽层单端接地;第二步,PLC程序里加防抖判断,要求信号持续至少两个扫描周期才认定为有效脉冲。两层防护叠加后,计数终于稳定了。
5.2 封切温度波动导致的密封不合格
封切质量是包装机最核心的工艺指标之一,而温度是影响它最大的因素。我用的热电偶信号进入模拟量输入模块后,在PLC里做PID控制,通过固态继电器控制加热棒通断。程序还没跑几天,现场反馈封口强度忽好忽坏,有的袋子一扯就开。
我先查了模拟量读数,发现温度信号在设定值附近做周期性波动,波动幅度大概有十度左右。进一步排查,问题是PID循环的扫描周期和加热器特性不匹配。加热棒的升温和降温有时间常数,如果PID运算周期过快,输出量老是振荡,温度就跟着振荡;如果周期过慢,温度又会大范围漂移。我在博途里把PID的采样时间从默认值改成了和加热系统的热惯性相匹配的数值,再把输出上下限做了限制,温度波动从十度压到了两三度以内。
顺便说一句,封切温度不能只看设定值,还要看膜的种类。不同的薄膜材料,封切温度的窗口不同,有的是130度左右,有的是160度。这个参数我是做成配方项目了,每组规格不一样,避免操作工手动改错。
5.3 气缸动作时序与机械配合的反复调参
气缸时序也是调试的重点。夹紧气缸和封切气缸是先后动作的,如果夹紧没到位就开始封切,封切刀下去会把物料顶歪。我在程序里严格要求等夹紧到位信号,再触发封切电磁阀,逻辑上没问题。但实际机械上有个陷阱——磁性开关的安装位置如果偏了,活塞还没走完就提前触发,照样会出现夹不紧的情况。
我让机械师傅配合检查了磁性开关的安装位置,确保触发点在活塞真正压紧物料之后。另外还调整了电磁阀的进气和排气节流阀,调节气缸的动作速度。这里的经验是:气缸不是越快越好,太快了惯性大,到位冲击也大,封切容易把料切偏;太慢了节拍跟不上,产量上不去。最后是边调边测,把夹紧时间调到一个稳定的窗口范围内,前后动作顺畅,才算是定下来。
在程序里,我还给每一个动作设置了超时报警:比如夹紧信号触发后,如果在3秒内没收到到位信号,就判定为气缸故障,程序自动停止流程并弹出报警。这一条在关键时刻救命——有一次现场出现了气压不足,气缸动作迟缓,如果没有超时报警,机器会一直等下去,操作工还以为在正常走流程,实际上早就停在那了。
6. 常见问题速查与排查思路总结
6.1 现场问题排查速查表
项目交付后,我把调试阶段碰到的问题整理成了一张速查表,留给客户的维修人员。表格的形式在车间里很实用,贴一张到电柜门上,遇到问题先按表对一遍:
| 故障现象 | 可能原因 | 排查顺序 |
|---|---|---|
| 整机无反应,触摸屏黑屏 | 24V开关电源故障、PLC未上电 | 先测电源输出,再看PLC指示灯 |
| 按启动按钮不运行 | 安全门未关、急停未复位、前工序未就绪 | 先看报警画面提示,再查安全回路 |
| 计数不准 | 传感器响应慢、信号干扰、程序防抖不足 | 先看传感器指示灯,再接万用表量信号 |
| 某个气缸不动 | 电磁阀不吸合、气压不足、PLC输出点损坏 | 手动模式直接点动,排除法定位 |
| 封切质量差 | 温度波动、封切时间不对、刀片磨损 | 先看温度趋势,再查时序参数 |
| 触摸屏通讯中断 | 网线松动、PLC IP被改、CPU停机 | 先Ping IP地址,再查CPU运行状态 |
| 输入信号偶发丢失 | 接线端子松动、传感器老化、线缆破损 | 一边晃线一边看监控表 |
这张表的价值在于,它把排查的思路固化下来了。维修人员不需要完全弄懂程序,按顺序查下来,大部分问题能自己处理;实在处理不了,也能带着明确的信息来找我,少了很多来回沟通的成本。
6.2 排查方法论:先硬件后程序,先在线后离线
再说说排查方法。我在项目里踩过不少坑之后,总结了一套自己的排查顺序:先硬件后程序,先在线后离线。硬件方面,先确认电源电压正常、传感器有电、接线端子没有松动;再确认传感器本身有没有信号输出,这个可以用万用表量输出端电压来判断,或者直接看传感器指示灯。硬件确认没问题之后,才打开博途在线监控看程序变量状态。
在线排查程序时,我习惯同时打开两个窗口:一个是监控表,盯关键变量的实时值;另一个是状态机的当前状态。举个例子,如果夹紧动作没有发生,先看PLC输出点对应的线圈有没有置1。如果程序输出为1但气缸没动,问题在输出模块到电磁阀这一段;如果程序输出是0,就往上游查,看看是不是到位信号没满足,或者前一步状态还没跳过去。这种方式本质上就是二分法定位,你不需要从头到尾读一遍程序,只需要跟着信号链往前或者往后追,问题范围会快速缩小。
还有一个习惯我觉得极其重要:每改一次程序之前,先把当前能正常运行的版本备份一次。博途支持项目版本管理,我每次去现场之前都导出一次整个项目存档,标注好日期和修改内容。有一次我在客户现场调参数,越调越乱,最后用一个小时之前的备份恢复回去,十分钟就回到正常状态了。这种工作习惯在现场特别值钱,看似多花了备份的时间,实际上省的是排查的失控风险。
7. 项目收尾的一些体会和扩展思考
7.1 交付的不只是程序,还有使用习惯
项目调试完成后,我做了一次完整的操作培训。培训对象是车间里的操作工和维修师傅,内容不涉及任何编程,只讲三件事:怎么开机和切换产品规格、怎么看报警和复位报警、怎么更换传感器和磁性开关。培训结束时我还特意打印了几页图文并茂的操作卡,贴在设备旁边。后来客户反馈说,以前新来的操作工要跟老师傅学半个月才能独立换规格,现在对着操作卡几分钟就能搞定,这个结果比验收单上的签名让我更有成就感。
文档交接方面,我花了一个晚上整理电气原理图、IO分配表、程序注释说明和备份存档。很多人觉得这些文档是多余的,但其实这是整个项目最有长期价值的部分。三个月后如果控制逻辑出问题,翻文档的人会感谢你当时的认真态度。
7.2 后续可以往哪些方向扩展
这个项目做完之后,我自己也复盘过几次。从当前的技术架构来看,后续扩展很顺。一个方向是往上位机方向发展:S7-1200的以太网口可以作为PROFINET或普通TCP服务器,接一个上位机软件做生产数据采集,实现产量报表、不良率分析、设备OEE统计这些功能。另一个方向是机器视觉检测:现在封切质量是人工抽检的,后续可以在封切位加装视觉系统,通过IO或网络把检测结果送回PLC,实现不合格品自动剔除。还有远程运维的方向:S7-1200支持多种物联网网关接入,把PLC的数据安全地传到云平台,在手机上就能看到设备运行状态和报警通知,对于中小型非标设备来说,这个需求越来越真实了。
最后分享一个小心得。做PLC项目,技术本身只是基础,真正的难点在于把模糊的生产需求翻译成确定的控制逻辑。你在现场多问一句"平时最难操作的是什么",可能比多写一百行代码更有价值。这是我在这个项目里最深的体会,也是在后续所有项目里一直坚持的做事方式。