十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

包膜机自动化项目实战:西门子1200PLC与威纶通HMI的完整实施要点

包膜机自动化项目实战:西门子1200PLC与威纶通HMI的完整实施要点 做包装自动化这些年包膜机算是门槛不高但事特别多的机型。整套系统用西门子1200PLC做逻辑控制威纶通触摸屏做人机交互是中小型设备最常见的黄金组合。最近才交付的一套包膜机项目正好把1200PLC程序、Modbus通讯和威纶通组态这些点都踩了个遍我把整个思路和坑整理出来给后面做同类设备的朋友做个参照。包膜机项目看起来简单真正跑起来之后你会发现它既有伺服定位、气缸时序、温度PID又有HMI配方、报警、弹窗交互还经常要和变频器、温控表做Modbus通讯。所以这一篇文章不只是讲一个机型更是一套典型的1200PLCHMI项目实施流程。1. 项目整体设计与思路拆解1.1 包膜机的工艺流程与控制需求包膜机全称是热收缩包装机核心作用是把产品用塑料膜包裹好再经过热收缩让膜紧贴在产品表面。听起来简单但工序一点不少。标准流程大概分五个工位产品从上一道工序进入进料输送带光电传感器检测到位后推料气缸把产品推进成型区卷膜经过成型器包住产品拉膜机构开始送膜纵封机构先把膜的搭接缝烫合横封机构再把前后产品的膜压合、切断包好膜的产品进入收缩炉热风循环让膜收缩最后出料输送带输出必要时用风扇冷却定型。这五个工位对应的控制点很杂。进料区要有传感器、推料气缸、压膜气缸气缸需要磁性开关反馈到位状态送膜区要有伺服电机或变频电机需要精确控制拉膜长度横封区要有加热管、热电偶、横封气缸和切刀气缸温度和动作时序都要管收缩炉里还有风机、加热管、炉温控制和输送带变频调速。除此之外产量计数、每班产量统计、运行时间、故障记录、设备联动联锁这些也都得考虑进去。所以别把包膜机当个小设备来看。它的I/O点虽然不算多但类型非常全数字量输入输出、模拟量输入输出、高速计数、运动控制、通讯指令全都用得上。程序如果一上来就堆在一个OB1里后面调试和改配方的时候会非常痛苦。我这次的做法是先按设备工位划分程序块每个工位单独一个FB主流程只做调度和联锁这样无论是单步调试还是整机联动都能很快定位问题。1.2 硬件选型为什么是1200PLC威纶通先说结论这套方案不是性能最顶的但一定是中小型包装设备里性价比最稳的组合。西门子S7-1200自带以太网口支持S7协议、Modbus TCP和Profinet扩展模块丰富价格在西门子产品线里属于很亲民的位置。威纶通触摸屏在国产HMI里市场占有率很高EBpro组态软件免费驱动库维护得勤和S7-1200走以太网通信非常成熟项目上线后维护的人也好找。这次项目里我用的硬件配置大概是下面这样。部件选型说明PLCCPU 1214C DC/DC/DC自带14DI/10DO扩展一块SM1231 AI模块HMI威纶通MT8071iP7寸屏带以太网口和PLC走S7协议送膜伺服台达ASD-B2系列脉冲控制配750W伺服电机传送带与风机台达VFD-M变频器通过Modbus RTU读写频率和状态温控横封温控表热电偶温度信号进PLC模拟量模块气动元件SMC电磁阀气缸进料、压膜、横封、切刀等电源24V/10A开关电源PLC、IO、传感器分开供电选型的时候有个原则所有需要和PLC交互数据的设备尽量选择带标准通讯接口的型号。比如变频器选Modbus RTU温控表选模拟量输出或通讯型伺服则用脉冲控制因为包膜机的伺服动作不算复杂脉冲方式的实时性和稳定性足够调试起来也最直观。整体控制方案就是PLC管逻辑HMI管监控变频器、温控表这些从站设备通过Modbus统一进PLC不额外增加复杂的总线管理。2. PLC程序架构与核心功能实现2.1 程序块规划1200PLC的程序架构我习惯按照“初始化、主循环、中断处理、设备控制、数据处理”来分层。OB100用来做初始化上电后把默认参数写入保持DB复位所有输出OB1是主循环按顺序调用设备控制FB和数据管理FCOB30是循环中断块用来跑温度PID或者高速计数器采样的任务扫描周期固定为100ms。设备控制部分按工位拆成几个FBFB_Feed控制送膜伺服FB_SealCut控制横封和切刀FB_Push控制进料和推料FB_Furnace控制收缩炉温度和风机。每个FB都有自己的背景DB变量不交叉调试一个工位的时候不会影响其他工位。程序块功能备注OB100初始化装载参数、复位动作输出OB1主循环调度各工位FB和通讯FCOB30循环中断温控PID、高速计数采样FB_Feed送膜伺服控制定长计算、脉冲输出FB_SealCut横封切刀控制压封、加热、切断、抬起FB_AutoRun自动流程调度按步骤执行整机动作FC_ModbusModbus通讯采集轮询变频器、温控表数据FC_Alarm报警管理集中报警、触发HMI这种分层的好处是现场如果出现“送膜长度不对”的问题直接在FB_Feed里找如果是“收缩炉温度起不来”去FB_Furnace和OB30里查如果是“HMI上数据乱跳”多半在FC_Modbus的轮询逻辑里。思路清楚排查速度就快。2.2 动作控制难点送膜定长、横封时序包膜机最难的两段动作我个人觉得是送膜定长和横封时序。送膜定长直接影响包装尺寸做短了膜包不住产品做长了浪费膜还容易在收缩炉里堆积。先算脉冲当量。比如减速比是1:10拉膜辊筒直径63.66mm周长就是约200mm伺服电机每转需要10000个脉冲。那么脉冲当量 200 ÷ (10000 × 10) 0.002mm/脉冲。如果目标送膜长度是250mmPLC要发的脉冲数就是250 ÷ 0.002 125000个脉冲。这个计算方式我会做成HMI参数操作员在触摸屏里直接填产品需要的包装长度PLC内部自动换算成脉冲数给伺服。送膜不能光给脉冲数就算了加减速特别关键。启动太猛会把膜拉长停止太猛膜会松掉。我一般会把伺服驱动器的加减速时间设到0.3秒左右同时在PLC里做速度斜坡先低速起步到中段给高速接近目标长度时再降速这样既能保证效率又不容易拉伤膜。这个细节是在实际调试中踩过坑才补上的最初是直接给脉冲数一步到位结果膜总是皱。横封时序比送膜更讲究。横封动作包含“压紧、加热、切断、抬起”四个阶段每个阶段都需要独立的时间参数。比如压紧后保持0.3s让膜贴合加热1.2s让封口达到强度切刀动作0.2s切断抬起0.5s离开产品。这些时间必须在触摸屏上可调因为不同膜材质需要的封口时间完全不同。另外连续包装模式下的横封触发不能只靠定时器。我见过很多程序是产品到位就启动横封结果送膜速度一变封口位置就跑偏了。我的做法是用伺服电机的编码器反馈或高速计数器的累计值来做相位计算送膜长度到了设定值就触发横封保证每一次封切落在膜上的位置一致和具体速度没关系。2.3 1200PLC做Modbus轮询的坑读取频率会覆盖其他数据这个点必须单独拿出来写因为很多人在1200PLC上做Modbus轮询都栽过。项目里需要读取变频器的频率、电流、运行状态可能还要读温控表的当前温度。1200PLC的MB_MASTER指令一次只能请求一段连续的保持寄存器所以必须写一个轮询状态机按顺序把每段数据读回来。最容易出问题的就是把所有MB_MASTER请求指向同一个接收DB而且轮询切换不是靠DONE位而是靠一个固定的定时器。结果就是这一站的请求还没处理完下一站的请求已经把接收区的数据覆盖了画面上变频器频率和温控表温度串来串去数值一会对一会错。严重的时候在触摸屏上看到1号变频器频率突然变成3号变频器的电流值特别吓人。我后来总结出一套可靠的做法。每个MB_MASTER请求的数据接收区尽量独立如果地址不够用至少要保证同一个时刻只有一个请求在写接收区。轮询状态机每一步必须用DONE或NERROR触发下一步不能用定时器简单翻转。最重要的是每次读回来的数据要立刻搬到一个“数据快照DB”里后续所有逻辑只读取快照DB不直接读取MB_MASTER的接收区。这样即使通讯偶尔抖动应用逻辑拿到数据也始终是一致的。轮询频率也要算清楚。以9600bps波特率为例一个完整的读请求和响应报文大约16个字节加上起始停止位一次事务需要的时间大约18ms再考虑从站响应延时和PLC扫描周期轮询间隔最少给到50ms以上。如果挂8个从站整轮下来至少400ms。很多人把轮询周期设成10ms看起来频率很快实际上比从站响应还快数据不覆盖才怪。我写了个简单的轮询状态机示意你可以参考这个结构。CASE pollStep OF 0: // 读取1号变频器频率 ModbusMst.REQ : TRUE; ModbusMst.ADDR : 16#3001; IF ModbusMst.DONE THEN FreqSnap.Freq1 : ModbusMst.DATA[1]; ModbusMst.REQ : FALSE; pollStep : 1; END_IF; 1: // 读取2号变频器频率 ModbusMst.REQ : TRUE; ModbusMst.ADDR : 16#3001; IF ModbusMst.DONE THEN FreqSnap.Freq2 : ModbusMst.DATA[1]; ModbusMst.REQ : FALSE; pollStep : 0; END_IF; END_CASE;这个结构只是示意实际项目里还要加通信超时判断和错误计数。但核心思想和代码一致每读完一站立刻保存然后再切下一站。这个思路对Modbus RTU和Modbus TCP都适用。3. 威纶通HMI组态从建工程到报警联动3.1 变量规划与变量替换技巧威纶通EBpro组态的第一步不是画画面而是先把变量地址规划清楚。很多人一上来就在画面上拖按钮、放表针等到写变量的时候发现地址对不上再回头改就特别痛苦。我习惯先在EBpro的“系统寄存器”里把设备树建立好添加S7-1200驱动填上PLC的IP地址然后把所有要显示的PLC地址列出来。这里特别提醒一下S7-1200的DB块默认是“优化的块访问”如果不在博图里取消优化威纶通是没法直接通过地址读取的。我这次在博图里专门建了接口DB比如DB100和DB200在DB属性里取消勾选“优化的块访问”编译后能看到每个变量都有实际偏移地址了。然后再到威纶通里填写类似DB100.DBD0、DB100.DBX0.0的地址这样HMI才能稳定读写。这个问题是很多新手第一次项目连不上的最大原因。变量替换是威纶通非常实用的功能。包膜机常常有多个相同工位比如两条送膜路径、多个加热温区。我先做一个工位的标准画面复制成第二工位再用“查找/替换”功能把变量地址里的DB100改成DB200一套画面秒变两套。替换的时候要注意选择范围是在当前窗口还是整个项目。如果只改当前工位别勾选全局替换否则把其他工位的变量一起改了调试时会出现互相干扰的怪问题。宏脚本里如果也引用了变量替换后一定要重新检查。比如某个按钮宏里写的是SetData(0, DB100.DBD0)替换不会自动改宏脚本里的字符串需要手动修改不然按下按钮你都不知道写到哪去了。3.2 博图数据块报警标签导入威纶通的方法包膜机的报警点不少气压不足、横封温度过高、切刀不到位、膜用完、伺服报警、变频器故障加起来几十个。如果一个一个在威纶通里手工敲不仅浪费时间还容易漏。我这次的做法是先整理出一套统一的报警DB每个报警位占一个BOOL注释写得清清楚楚然后批量导进威纶通。具体操作是这样的。在博图的DB200里建立报警位比如DB200.DBX0.0对应“气压不足”DB200.DBX0.1对应“横封温度过高”把每一条报警文本都写在变量注释里。然后全选变量复制到Excel整理成“地址、报警文本”两列。打开EBpro新建“报警”对象在报警地址列表里选择从文件导入选好CSV文件并映射字段。导入后检查一遍特别是中文注释如果出现乱码用记事本把CSV另存为ANSI编码再试一次。报警方式我用“位报警”也就是DB里某个位变成ON时就触发。PLC端由FC_Alarm统一采集设备故障信息置位对应的报警位。HMI端做两个动作一是报警条实时显示当前最新报警二是报警历史记录方便现场人员事后查看。还要加一个“报警确认”按钮对应PLC里的报警确认变量按下后蜂鸣器停止报警状态变成已确认。要是没有这个确认按钮现场蜂鸣器会一直响操作员会被折腾得够呛。报警标签和注释在博图里维护的好处是以后想改某条报警文本只需在博图里改注释重新整理Excel再导入不用在HMI上挨个找。虽然步骤上多了一次导入但维护成本比直接在威纶通里敲低得多。3.3 弹窗索引设计与通用模板复用威纶通的弹窗功能我做成了“索引化”管理核心思想是用一个PLC寄存器控制当前弹出窗口。比如我用LW0作为窗口索引寄存器PLC或HMI宏指令往LW0里写入不同的窗口编号威纶通就切换对应的弹出窗口。这样主画面永远保持简洁想看详细数据、手动操作、配方参数时通过索引弹窗打开对应页面。弹窗索引的编号规则我在项目一开始就定好100到199是报警信息窗200到299是手动操作窗300到399是配方参数窗400到499是调试专用窗。这样无论是自己写宏还是后期维护看到编号就知道这个窗口是干嘛的不会混乱。实现方式也不复杂。在EBpro的宏指令里写一段判断读取LW0的值然后调用OpenWindow或设置当前窗口。如果不想写宏也可以用“切换窗口”元件配合寄存器控制。重点在于编号约定这个约定会让弹窗乱飞的问题直接消失。关于威纶通触摸屏通用模板下载很多工程师喜欢到处找现成模板其实最有用的模板是自己从老项目里攒的。EBpro安装目录里通常带了一些示例工程可以作为起点。但真正顺手的是你把自己的按钮风格、报警窗口布局、配方页面结构沉淀下来形成一个标准模板。我现在的项目框架主画面放Logo区、运行状态、报警按钮、日期时间报警窗口统一带确认和复位按钮配方窗口统一有上传下载键。新项目拿来直接改地址就能用组态时间至少节省一半。4. 联机调试、版本兼容与故障排查4.1 通信调试与IP规划1200PLC和威纶通触摸屏都走以太网IP规划一定不要偷懒。我用的是最经典的地址段PLC做192.168.0.1触摸屏做192.168.0.10电脑调试时设成192.168.0.100子网掩码统一255.255.255.0。这样维护的人一看就知道哪个设备是哪个地址。如果现场有多台包膜机每台设备的PLC和HMI都按这个规则分配第二台PLC改成192.168.1.1HMI改成192.168.1.10规则一直不变。在线模拟调试时先用电脑ping PLC地址能通再去找威纶通的问题。EBpro里在线模拟是通过电脑连接PLC的需要在系统设置里把设备IP改成PLC的地址驱动类型选择正确的S7-1200系列。如果ping不通先查网线和交换机再查Windows防火墙很多时候不是PLC的问题而是电脑自带的防火墙把S7协议拦截了。4.2 威纶通软件v6.08.02.702的版本经验这次项目里用的威纶通软件版本是v6.08.02.702 s整体用下来功能上比旧版顺滑不少尤其报警批量导入和在线模拟的稳定性有了明显提升。但我还是建议你注意几个版本相关的细节。老工程用新版本打开时会提示升级工程文件。升级前一定先备份一份因为升级后项目格式变了旧版软件可能打不开。如果你的现场工程师电脑还是旧版EBpro升级完的工程在他那边没法编辑只能下载那就尴尬了。下载到触摸屏时要注意HMI固件版本和EBpro编译版本是否匹配。老一代HMI如果固件太旧新版本编译的程序下载后可能花屏或者直接不启动。解决方法是先在EBpro系统设置里勾选“更新HMI固件”下载时让软件把固件一起烧录进去前提是确认这个固件版本支持当前硬件型号。这个步骤不做最典型的表现就是下载过程报错提示“firmware version mismatch”。另外v6.08.02.702 s版本里变量替换功能的位置和样式发生了一点变化替换前可以先在变量列表里筛选一遍确认没有把系统内部变量带入替换。报警文本导入的字符集处理也有调整CSV文件里的中文注释如果出现乱码优先检查文件编码用ANSI保存后基本都能解决。4.3 典型问题速查表整理一份常见问题速查表现场直接照着查能省不少时间。现象可能原因处理方法HMI显示PLC no responseIP不在同一网段驱动类型不对网线故障ping PLC地址检查驱动型号换网线/交换机画面上的数据一直是0变量地址没对应数据类型不匹配DB优化访问未关闭核对DB地址偏移确认INT/REAL类型取消DB优化访问Modbus读回来的频率偶发突变接收区被覆盖轮询步骤没有锁存检查MB_MASTER接收DB是否跨请求共用用DONE切换加快照DB报警一直不触发报警位地址不一致HMI报警类型配置错在线监控PLC的DBX位变化核对HMI报警地址格式配方参数写入后PLC里不变HMI写地址不是配方实际地址偏移量算错用HMI在线监视实际写入值和PLC地址逐字比对下载后HMI花屏固件版本和编译版本不匹配先升级HMI固件再下载工程这些坑我基本都踩过尤其是Modbus覆盖和DB优化访问这两个前期不处理好后期调试整机联动时会非常折腾。做项目时养成统一的地址规划习惯比临时救火重要得多。说实话包膜机这个项目并不算多高端但自动化项目的通病是细节决定交付速度。我习惯在PLC里把所有要显示的变量统一集中到接口DBHMI只管映射这个DB不要东一个地址西一个地址后期改功能的时候才不会被逼疯。最后分享一个小技巧在威纶通画面上留一个隐藏的调试页把M区的强制位做成按钮现场调试伺服和气缸的时候特别方便不用总抱着电脑插网线。隐藏页用一个不常用的索引号比如999现场操作员正常不会点进去调试完也不会影响正常生产。这个习惯我保持了很多年每次都能救急。
返回列表