
1. 这不只是一台包膜机先搞清楚控制需求做设备电气这几年我收拾得最多的一类机器就是包膜机。很多人一听这个名字以为就是把货裹一圈膜没什么技术含量。真到现场看了才知道一台大型自动包膜机尤其是给建材、家电、物流行业做整托包装的那种转台、膜架、送膜、压膜、切膜、输送、安全门几十个执行机构要在一条节拍下面联动稍有配合不及时轻则膜跑偏、膜面起皱重则把整托货物带翻。这台设备的主控我用的是西门子S7-200 SMART配合ABB和森兰的变频器走Modbus RTU通讯整个程序按状态机架构来写再加上报警分级、时间锁授权和一套完整的调试文档才算真正顺利交付。这篇文章就是基于这个项目做的完整复盘也是一份能直接落地的参考学习指南。你适合读这篇内容的场景大概是这三类一是设备厂电气工程师正在做或者准备做缠膜、包装、输送类设备想找一套成熟的控制框架二是工厂里的售后维护电工需要快速理解这类设备的程序结构和报警逻辑三是刚入行的工控学习者想知道一台“看起来没什么技术含量”的设备到底藏了多少编程细节。读完你会发现这套思路不只适用于包膜机像贴标机、开箱机、码垛机甚至基于西门子PLC的大棚灌溉这类顺序控制项目结构上都能平移复用。1.1 工艺流程与控制对象这台设备是标准的自动托盘缠膜机配合叉车上下料完成整托货物的拉伸膜缠绕包装。工作流程写成一句话就是货到、定位、旋转缠膜、断膜、复位、完成。拆细一点是下面几个工位。进料与定位环节货物由叉车放到转台光电开关和限位开关确认到位夹紧装置动作把货物固定住。缠膜环节转台旋转带着货物转膜架沿立柱上升或下降送膜辊在预拉伸机构带动下匀速放膜。断膜收尾环节缠够设定圈数后压膜气缸压住膜尾切膜机构把膜切断抚平辊把膜尾贴在货物表面。输出环节转台停稳膜架复位三色灯提示完成货物由叉车取走。控制对象跟着流程走转台旋转电机、膜架升降电机、送膜辊电机各配一台变频器加上压膜、切膜、夹紧几组气缸以及安全门、急停、限位开关这些输入信号。整机I/O大概有三十个输入、十几个输出规模不算大但逻辑彼此嵌套环环相扣处理不好设备就跑不顺。1.2 大型设备的三个控制难点第一个难点是节拍。缠膜圈数、膜架上升速度、送膜速度和断膜时机是绑在一起的。单轴随便怎么跑都没问题一旦联动起来任何一路慢了半拍膜就会松或者堆褶。程序里不能靠一堆定时器硬凑必须有一套清晰的时序模型让每个动作都知道“上一步完成没有下一步能不能开始”。第二个难点是通讯。三台变频器全部通过RS485走Modbus RTU和PLC通讯这不光是写启动停止命令那么简单。现场变频器一启动电缆上的干扰就起来通讯偶尔掉线、CRC报错都是家常便饭。后面我会把调试时踩过的坑一条一条列出来这些都是真金白银换来的经验。第三个难点是程序的可维护性。设备交付客户之后现场电工不一定懂你当初的思路。程序里没有注释、没有分层、没有明确的报警文本后面维护就是灾难。所以这个项目从一开始我就定了规矩主程序只做调度每个工位单独一个子程序所有报警集中处理。这也是为什么这篇文章敢叫参考学习指南因为这套结构可以直接抄去用。2. 硬件选型与通信架构S7-200 SMART怎么扛起大设备2.1 主控选型为什么选S7-200 SMART SR40选型的时候其实纠结过S7-1200。说实话如果这台设备将来要连MES、要上OPC UA、要做数字孪生我肯定直接上S7-1200甚至S7-1500。但当时项目要求很明确单机设备逻辑控制为主客户电工熟悉西门子的使用习惯预算也要控制住。S7-200 SMART在这类设备上有天然优势CPU本体自带以太网口程序下载、触摸屏通讯都很方便扩展模块便宜且现货充足指令集对继电器逻辑非常友好维修配件遍地都是客户那边的电工也愿意接受。具体型号选了SR40也就是24个输入、16个继电器输出那款。为什么不用晶体管输出的ST40因为这台设备的输出对象是接触器、电磁阀、三色灯全是交流负载继电器输出直接带不用再挂中间继电器接线省一圈。如果后面要加伺服脉冲控制再换ST40也不迟底座和程序基本可以平移。另外配了一块EM DT08扩展输出模块把输出点扩到24个留足余量防止现场临时加东西。顺便说一下什么时候该选S7-1200。如果你这台机器要跟MES交互、要做配方管理、程序要跑结构化文本和OPC UA那S7-200 SMART就别硬扛了直接上S7-1200。特别是“Process Simulate虚拟调试加OPC UA通讯”这种新玩法是建立在S7-1200/1500平台上的S7-200 SMART没有原生的OPC UA服务端。这里分享一条个人经验选PLC不是选最贵的是选“这个项目最稳的”。单机逻辑型的包装设备S7-200 SMART就是最稳的那一类。2.2 三台变频器协同ABB与森兰的Modbus RTU接入转台旋转电机是7.5kW用ABB ACS355看重的是启动转矩和低频特性好转台带着几吨货物启动不能抖膜架升降1.5kW和送膜辊2.2kW用的是森兰SB200系列高性能通用型变频器性价比高SB200本身自带RS485口和Modbus RTU协议不需要额外加通讯板。这里要先说一个很实际的点很多人一听到“ABB变频器和西门子PLC通讯”第一反应是加DP网关、加PROFINET通讯模块其实完全不必。ACS355内置的RS485口就支持Modbus RTU西门子PLC这边也不需要任何通讯模块CPU串口直接当Modbus主站就行。Modbus RTU这个协议虽然老但在现场抗干扰、调试方便程度上对中小型设备依然是最实用的通讯方式三台变频器挂一条总线成本几乎为零。西门子S7-200 SMART系列PLC与森兰变频器SB200的通讯也是同理。这台设备的三个变频器全部挂在一条RS485总线上PLC是主站变频器是从站。这里要特别提醒一句变频器侧的“运行命令来源”和“频率设定来源”如果不在通讯模式下你上位机怎么发启动、怎么给频率变频器都置若罔闻。森兰SB200这块尤其明显出厂默认是面板控制必须在参数里把命令源和频率源切到MODBUS新手十有八九卡在这一步。2.3 通讯参数、接线与地址分配Modbus RTU接线看着简单实际最容易出幺蛾子。我的习惯是三台变频器的RS485的A和B分别并联全部接到PLC串口0的3、8两个端子通讯线用屏蔽双绞线屏蔽层单端接地总线两端各并一个120欧终端电阻。请注意端子千万不要接反A/B接反的典型症状是“偶尔能通通讯极不稳定”查起来非常费时间。参数上以森兰SB200为例需要设置的核心参数就是这几项从站地址、波特率、数据格式。我现场统一设置为地址1号、2号、3号波特率96008位数据、无校验、1位停止位。ABB ACS355走Modbus RTU时要特别注意把它的现场总线协议从默认的ABB协议切换成Modbus RTU然后同样设置站地址、波特率和校验。ABB有些型号默认波特率跟常规的9600不一样第一次通讯不上时先查这个。地址分配方面1号变频器是转台旋转2号是膜架升降3号是送膜辊三台全部按Modbus从站方式映射PLC作为主站轮询。这样后面写程序时哪个站控制哪个轴一目了然调程序不用翻图纸。变频器编号驱动机构电机功率Modbus站地址品牌型号1号转台旋转7.5kW1ABB ACS3552号膜架升降1.5kW2森兰SB2003号送膜辊2.2kW3森兰SB2003. 程序控制核心状态机、EN/ENO与变频器驱动3.1 用状态机把连续工艺变成有序步骤包膜机的工艺是典型的“顺序加条件”结构我建议用状态机而不是一堆“置位复位加定时器”硬拼。这个项目里我在主程序里用一个整数变量VB100表示当前步号0是待机10是定位20是缠膜30是断膜40是复位。每个子程序只负责处理当前步号对应的动作以及“满足什么条件就切换到下一步”。这样有几个好处节拍逻辑全集中在一张表里调试时看VB100的数值就知道设备卡在哪一步新增工艺步骤不用打乱原有程序插一个步号就行手动、自动可以共用同一套状态机只是手动模式下步号由按钮触发自动模式下步号由条件触发。步进切换是最容易写坏的地方。我自己的规矩是同一个扫描周期里一步只能向后切换一步不允许一次跳两级切换条件必须用沿触发防止变量在多个步之间被重复使用进入下一步之前先复位上一步的输出。举个例子缠膜步进入条件是“缠膜圈数计数器达到设定值”这个条件一旦成立先置位压膜气缸再清圈数计数器然后才把步号从20改成30。顺序一旦写反计数器和气缸动作就会打架设备就会出现莫名其妙的偶发故障。3.2 EN/ENO到底是什么实战中怎么用西门子PLC里的EN是“允许执行”ENO是“执行结果”。很多人把它当成普通逻辑线圈其实ENO解决的是“这条指令到底执行成功没有”的问题。典型场景除法指令DIV遇到除数为0ENO变成0通讯指令MBUS_MSG在总线忙时不执行ENO也变成0指针操作指向非法地址ENO同样会断开。判断指令是否正常最直接的用法是把ENO串到下一个指令的EN上形成链条上一条失败了下一条自动不执行。还有一种更实用的用法是把ENO接到一个置位线圈上一旦关键指令执行异常立刻置出报警标志。比如我这里有一条“读变频器当前频率”的MBUS_MSG如果通讯返回异常ENO断开我就把通讯报警位M0.1置位触摸屏上马上提示而不是等变频器真的停了才发现问题。还有一个细节上升沿P指令和下降沿N指令它们的ENO和输出位是同一个意思上升沿来了ENO就通一个扫描周期。配合MBUS_MSG时必须用这种沿触发来发起读写请求否则每个扫描周期都发一次总线直接堵死。这个点下面还会再讲因为它直接关系到通讯能不能稳定跑起来。3.3 变频器的启停、调速与反馈读取变频器通讯这块程序里用的是S7-200 SMART的MBUS_CTRL和MBUS_MSG两条指令。MBUS_CTRL每个扫描周期都要调用一次负责初始化串口、设置波特率和校验方式MBUS_MSG负责具体的读写请求必须用沿触发而且同一时刻整个PLC只能有一条MBUS_MSG在执行所以多台变频器要用轮询方式排队。我个人的写法是把变频器读写封装成一个独立的子程序用一个整数变量做站号索引依次读取1号、2号、3号的数据。每个站的读写内容包括三个部分写控制字启动、停止、正反转、故障复位写频率给定值读当前运行频率和输出电流。频率给定有个重要细节西门子PLC传给变频器的频率值一般要按比例换算。比如你用的满量程是0到2000对应0到50Hz那要给定10Hz实际写入的寄存器值就是400。这个换算系数不是拍脑袋定的是根据变频器手册里的频率给定标定参数来的最好在调试早期拿一个固定值实测确认。读回来的运行频率也建议做换算后再给到触摸屏显示而不是直接显示寄存器原始值。用户看到转速、频率对不上第一反应就是程序有问题其实往往就是换算系数不对。设备交付之后这种问题解释起来非常费口舌不如一开始就把换算做对。4. 关键工艺环节的实现细节4.1 缠膜动作的时序配合缠膜是一个典型的多轴联动过程。我把它拆成几个动作窗口来设计时序转台启动并达到设定转速后膜架才开始上升膜架运动过程中送膜辊保持同步送膜缠膜圈数够了一定层数膜架开始下降下降到设定位置后转台减速准备断膜。这里最忌讳的是“动作都启动了就算完事”。我的方案是用一组状态标志位来描述当前缠膜阶段比如转台稳定标志、膜架到位标志、送膜启动标志每个标志都由各自的条件触发所有后续动作都以这些标志的“与”条件作为启动前提。这样做的好处是任何时候程序都知道“转台还没稳膜架先别动”不会出现机械上打架。断膜时序更要小心。膜架回到原位转台还在低速运行此时压膜气缸先动作把膜压在货体表面紧接着切膜机构动作切断后膜尾自然贴在货物侧面。这个窗口时间非常短程序里不能简单用延时而是用“压膜到位传感器加切膜到位传感器”作为完成条件。经验是断膜这个动作宁慢勿快一旦膜没切断还缠着轻则膜卷报废重则把膜架拉变形。4.2 张力匹配与送膜速度的标定缠膜质量的好坏很大程度取决于送膜辊的预拉伸速度和转台速度之间的匹配。说白了转台转得快膜就得给得快不然膜被拉变形甚至拉断膜给得快了转台跟不上膜的张力就松缠绕效果不好。现场调试时我的做法是先固定转台运行频率然后把送膜辊变频器的频率从低往高一点点加观察膜面的张力变化直到膜的拉伸度合适、不起皱、不断膜。这个过程中圈数计数对膜架升降的切换点也要同步调整。测量的时候别只肉眼看要用张力仪或者手感而且是连续观察一整圈因为货物四个面的包膜效果不一样要取最差的那个面来定参数。标定完成后把这几组速度写入触摸屏的自定义配方下次换不同尺寸货物时直接调配方不用重新接线或者改程序。这也是客户最认可的一个功能换规格产品从原来的一两个小时改成五分钟搞定。4.3 报警分级与安全联锁电气设计里安全永远是第一位的程序只是最后一道防线。这台设备的急停回路我用的是硬接线直接切断主接触器和变频器的使能信号不进PLC做软处理。原因很简单PLC扫描周期再短也是有周期的而急停必须毫秒级动作。然后程序里把报警分成了三级。1级是提示性报警比如通讯偶发掉线只亮黄灯设备继续跑同时记录触发次数。2级是暂停报警比如膜架上升超时设备自动暂停当前动作清理完故障后按复位键继续。3级是严重报警比如安全门打开、变频器过流设备立即停机并锁住主接触器必须把故障原因排查清楚才能复位。报警级别名称动作方式典型示例1级提示报警亮黄灯记录触发次数通讯偶发超时2级暂停报警暂停当前动作复位后继续膜架上升超时3级严重报警立即停机并锁主接触器安全门打开、变频器过流分级的好处是客户现场不会因为一个小报警就整线停摆也不会因为严重故障还在那硬跑。触摸屏上每一级报警都配了中文文本、触发时间和恢复条件维护电工翻屏幕就能知道该看哪里不需要打电话找厂家远程猜。5. 参考学习指南时间锁、通讯踩坑与调试经验5.1 时间锁程序案例基于RTC的授权时限实现与解锁思路时间锁这个需求设备厂商大概率都会遇到设备或程序按合同分期交付或者只授权客户使用到某个日期逾期要联系厂家续费解锁。这是一个合法的商业行为我在这里讲实现思路但绝不是为了让程序变成恶意工具。实现方式有两种。第一种是基于实时时钟的日期锁。S7-200 SMART有READ_RTC指令可以读出当前的年、月、日、时、分、秒存放到指定的VB地址。我把“授权截止日期”以年、月、日三个整数存放在数据区里程序每次开机时做一个比较如果当前年大于授权年或者年相同且当前月大于授权月或者年月相同且当前日大于授权日那么就把运行允许标志清掉触摸屏显示“请联系厂家解锁”。解锁方式是厂家输入一个由固定算法算出来的授权码程序比对通过后把新的截止日期写回数据区。第二种是累计运行时间锁。用SM0.4这个1分钟脉冲在设备运行状态下累加一个长整数变量当累计值超过授权小时数后设备每运行10分钟就会自动停机一次要求输入解锁密码。这里要注意累计时间要单独放在一个不会因为程序升级被覆盖的数据区。为了防止客户直接改PLC时钟绕过日期锁正规做法是日期锁和运行时间锁同时用互相兜底。写这类程序时我给自己定的原则是锁的是程序授权不是设备硬件界面一定写清楚“联系厂商解锁”而不是搞一堆隐藏口令绝不配合任何非法用途。设备厂家用它来完成尾款回收、维保到期提醒是能让行业健康发展的正常商业行为。5.2 变频器通讯现场踩坑记录通讯在实验室里永远是干净的一到现场就原形毕露。我把这个项目里踩过的坑整理一下全是真金白银换来的教训。第一是波特率不一致。PLC设了9600ABB ACS355那边还是默认值结果就是握手失败。排查方法很简单用电脑接USB转RS485先扫一遍总线上实际能通的变频器地址和波特率再回头改PLC参数。第二是A/B接反症状是时通时不通尤其在转台启动后更明显。接线前先用万用表量出每台变频器RS485端子的A/B定义不同厂家标注可能完全反过来别想当然。第三是共地问题。三台变频器和PLC不共地时RS485的差分电压会被地电位差彻底破坏。我们的做法是所有通讯设备的GND端子全部连在一起再单点接大地屏蔽层只在PLC侧接地。第四是MBUS_MSG的first必须用沿。如果用SM0.0直接给first等于1等于每个扫描周期都发一遍请求总线立刻被占死其他站全部超时。轮询时要加忙判断上一条MBUS_MSG执行完才允许发下一条。第五是变频器报CRC错误这个通常是布线问题通讯线跟动力线走了同一根桥架或者屏蔽层没接地。现场解决办法是给通讯线套屏蔽管单独走线远离变频器输出电缆和主电源线。第六是变频器面板参数被改导致程序失效。客户电工觉得频率给定不对直接在面板上改了个参数结果通讯给定和面板给定冲突设备不动了。所以我把变频器参数做成一张出厂表每次交付都打印一份贴到电柜门内侧维修时必须先核对参数表。5.3 现场调试经验与程序参考建议最后讲几条调试经验对做同类设备的人应该最有用。第一条先用手动模式把每个单轴跑顺再上自动。手动模式下把转台、膜架、送膜、气缸全部单独点动一遍确认方向、限位、传感器都正确再切自动能省掉大量联调时的排查时间。第二条触摸屏上一定要做“当前步号”和“关键状态位”的监视页。我见过太多设备调试时出了问题电工只能拿着螺丝刀看PLC指示灯效率极低。把VB100和几个核心标志位做成十六个指示灯显示在屏上遇到故障一眼就能定位卡在哪一步。第三条程序上传前必须做完整注释和版本号。很多程序员嫌注释麻烦三个月后自己都看不懂自己写的程序。这个项目里每个子程序头都写了功能说明、作者、日期每个网络标题都写清楚逻辑用途交付时把程序和参数表一起刻盘存档。第四条尽可能用命名好的符号表而不是直接写VB200、VW300这种裸地址。符号表能让人一眼看懂M0.3其实是“缠膜启动中”维护效率完全不一样。最后再说一点个人体会。如果你想往更高级的方向走可以了解一下虚拟调试。新项目用S7-1200或S7-1500做控制配合Process Simulate这类软件通过OPC UA和PLC通讯把整个缠膜节拍在电脑上先仿真跑一遍干涉、卡滞、时序问题在虚拟环境里就能暴露出来设备到场后的调试时间能压缩一大半。这也是我今年明显感受到的行业变化单机设备工程师掌握这条技术栈含金量会高很多。做完整台设备回头再看最值钱的其实不是那几页PLC程序而是把机械动作、变频器通讯和现场维护这三拨人的视角拧到了一起。程序写得再花哨不如让一个不懂程序的人在触摸屏上三分钟看懂报警来得实在这才是设备能长期稳定运行的根本。