ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

基于西门子S7-1200 PLC的立式包装机控制系统改造实战

基于西门子S7-1200 PLC的立式包装机控制系统改造实战 接到这台立式包装机的改造任务时老板只交代了一句话“继电器那边太乱了你看着办。”等我掀开配电柜门里面密密麻麻的中间继电器、温控表和时间继电器确实让人头皮发麻。换一次包装袋规格要拧电位器、对刻度、调温控表光折腾就要半小时客户早就提过意见说机器越用越难调故障率还高。我在现场转了一圈回来就定了方案上西门子 S7-1200配合触摸屏和变频器把这台设备彻底重做一遍控制系统。这篇文章就围绕这套“基于西门子 S7-1200 PLC 的包装机控制系统”展开从工艺拆解、硬件选型、软件编程到现场调试把整个搭建过程完整记录下来。内容包括我做的硬件选型、TIA Portal 里的程序架构、触摸屏画面组态、变频器 Modbus RTU 通讯还有踩过的一系列坑。适合正在做设备改造或准备入门工业自动化的电气工程师、售后调试人员参考也适合想了解 PLC 项目完整流程的朋友当案例来看。1. 项目开始前先把工艺掰开揉碎1.1 这台包装机到底要干什么这台设备是一台典型的立式包装机主要用于颗粒和粉料的小袋包装工艺流程其实不算复杂按动作顺序拆下来大概是这样放膜机构连续或间歇送膜包装膜从卷膜上被牵引下来。成型器把平膜折合成筒状纵封机构对膜筒的搭接处进行热封形成袋子的背缝。充填机构在袋子底部封口完成后把定量的物料灌进去常见的有量杯计量和螺杆计量两种。横封机构对袋子的上端和下端同时热封同时完成切断一片成品包装袋就出来了。问题是动作不复杂但控制细节非常碎。送膜要跟横封动作严格配合否则切出来的袋子长短不一纵封和横封的温度必须稳定在设定值温度高了包装膜烫穿温度低了封不牢充填机构又要跟包装节拍联动不能早也不能晚。这些细节如果用传统继电器控制逻辑固化而且改动困难尤其是换产品规格时必须重新调整。1.2 把控制需求整理成清单做自动化项目的第一步不是翻选型手册而是把需求一条一条写清楚。我当时整理的控制需求大概有这几项支持自动和手动两种运行模式手动主要用于调试和换模。送膜轴能根据设定的袋长自动定长配合色标传感器进行追标修正保证切点在包装膜的指定位置。纵封、横封温度独立控制设定范围一般在 80℃ 到 180℃ 之间需要恒温控制。横封切刀的动作节拍要能跟随送膜速度自动匹配。产量计数、运行时间、故障报警记录这些基本功能必须有。现场需要触摸屏能调整袋长、温度、速度、计数等参数并能存储多种产品配方。考虑到后续生产线联网最好预留以太网通讯接口方便上位机采集数据。把需求列出来之后方案选型就清晰了。这里有个体会很多初学者做项目容易一上来就买硬件最后发现点位不够、通讯口不对返工成本很高。先做需求清单再定硬件这是省钱的捷径。1.3 为什么最终选了 S7-1200 而不是单片机或继电器有人可能会问这套东西用单片机加触摸屏不也能做吗确实能做但有几个现实问题。包装机的工作环境里有变频器、伺服驱动器和加热装置电磁干扰比较严重单片机系统在这种环境下要做好抗干扰设计并不容易而且电气工程师后续维护、改程序都困难。继电器方案就更不用说了逻辑复杂一点的送膜追标控制根本做不出来。S7-1200 属于西门子的小型 PLC定位正好卡在微型 PLC 和中大型 PLC 之间。它自带以太网口支持 PROFINET 和 Modbus TCP同时又可以扩展 RS485/RS232 通讯模块来做 Modbus RTU硬件配置非常灵活。软件用 TIA Portal梯形图、SCL、STL 都能写还集成了 PID、运动控制、高速计数器等功能块。整套开发下来从编程到触摸屏组态再到调试都在一个工程环境里完成比跨多个软件要顺畅得多。2. 硬件选型与电气柜设计别在这步省时间2.1 CPU 和扩展模块怎么配S7-1200 的 CPU 型号从 1211C 到 1217C 都有区别在于本机 IO 点数、程序存储容量和扩展能力。我这次选的型号是 CPU 1214C DC/DC/DC也就是 24V 直流供电、24V 输入、晶体管输出。之所以没选继电器输出版本是因为后面要接伺服驱动器的脉冲信号晶体管输出的响应速度快频率高继电器输出根本跟不上。点位上1214C 自带 14 个数字量输入和 10 个数字量输出这套设备如果全部用数字量控制勉强够但余量不大。考虑到后续可能增加报警灯、蜂鸣器之类的附件我加了一块 SM 1223 数字量输入输出扩展模块补了 8 点输入和 8 点输出。温度控制方面我没有选专用的热电偶模块而是直接用的 S7-1200 自带的 PID 功能加模拟量输入模块读取温度变送器的 4-20mA 信号。这里提醒一下如果现场温度测点很多建议直接用 SM 1231 热电偶模块比外配温度变送器再进 PLC 更省事精度也更高。通讯方面我加了一块 CM 1241 RS485 通讯模块用来跟 G120XA 变频器做 Modbus RTU 通讯。有同行问为什么不直接用 PROFINET 或者 Modbus TCP理由是 G120XA 本身支持更多协议选型的时候为了控制成本配的是 RS485 接口的基本型所以走 Modbus RTU 更实际。如果预算充足选带 PROFINET 接口的变频器通讯会更快更稳定但在小型包装机上 Modbus RTU 够用了。2.2 IO 点表做电气设计的第一步很多半路出家的朋友容易忽略 IO 点表直接凭感觉画原理图结果现场接线时才发现点数不够或者地址冲突。实际上一个正规项目的第一步是列出完整的 IO 分配表每个输入输出信号都要有名字、地址、线色和端子号。以下是我这次项目的 IO 点表节选作为参考地址信号名称类型说明I0.0急停按钮常闭输入全机急停必须用常闭点I0.1启动按钮常开输入自动启动I0.2停止按钮常开输入自动停止I0.3色标传感器常开输入检测包装膜色标I0.4纵封气缸到位常开输入确认气缸行程到位I0.5横封气缸到位常开输入确认切刀位置I0.6编码器 A 相高速计数输入送膜轴旋转检测I0.7编码器 B 相高速计数输入送膜方向检测Q0.0送膜伺服脉冲晶体管输出高速脉冲输出控制送膜轴Q0.1送膜伺服方向晶体管输出方向控制Q0.2纵封加热继电器晶体管输出控制固态继电器通断Q0.3横封加热继电器晶体管输出控制固态继电器通断Q0.4横封切刀电磁阀晶体管输出控制横封气缸Q0.5纵封电磁阀晶体管输出控制纵封气缸看到这里你会发现我不止是把输入输出列出来还把编程思路也理了一遍比如高速计数器输入必须接在 PLC 本体支持高速计数的通道上普通的输入点不行。IO 点表的另一个作用是方便后续排查问题现场一出故障对照点表查线能省一半时间。2.3 柜内布线、屏蔽与安全回路的经验电气柜的布局和布线直接影响设备后期的稳定性。这套包装机里有变频器变频器输出侧的载波频率会产生很强的电磁干扰如果动力线跟信号线走同一个线槽S7-1200 的高速计数和模拟量信号很容易丢脉冲或者波动到时候查问题会查到怀疑人生。我的做法是柜内分成三个区域电源和主接触器在左上方变频器在左下方独立区域PLC 和信号端子全部放在右侧动力线和信号线分别走不同的线槽。模拟量信号线统一用屏蔽双绞线屏蔽层在 PLC 侧单端接地不要两端都接否则会形成地环流反而引入更大的干扰。安全回路方面急停按钮不是接到 PLC 的普通输入点上而是串接在主接触器的控制回路里按下去直接切断整机电源。这样即使 PLC 程序跑飞急停也能真正停下来这是设备安全的基本要求。另外PLC 的程序里也要用急停信号做逻辑互锁双保险。温度控制回路上我用了固态继电器而不是普通中间继电器因为普通继电器在反复通断加热电流时触点寿命短换起来很麻烦。固态继电器没有机械触点寿命长、响应快唯一的缺点是过载能力弱所以选型时电流余量要留足。3. 博途里的程序架构从零开始写控制逻辑3.1 TIA Portal 组态与地址规划打开 TIA Portal 以后第一步是创建项目并添加 S7-1200 CPU。这里有一个版本兼容性问题需要提醒如果你用的是 V15 或者 V16 版本的博途而固件版本选得太高下载程序时可能会报错。建议创建项目时把 CPU 固件版本跟设备实际版本对应或者选一个比实际版本低一点的固件下载时会自动提示升级。硬件组态搞定之后就是地址规划。很多程序出问题不是因为逻辑写错而是地址规划混乱子程序之间数据互相覆盖。我习惯把所有输入输出信号改成有意义的符号名比如急停按钮叫 E_Stop色标传感器叫 Color_Mark在符号表里统一维护。这样写程序时看着符号比盯着 I0.3、Q0.4 这种裸地址直观得多后期不管谁接手都能快速读懂。数据块方面我建了几个全局数据块一个叫 Recipe_DB用来存配方参数比如袋长、纵封温度、横封温度、运行速度一个叫 Alarm_DB用来存报警信息还有一个叫 Count_DB用来存产量计数、运行时间等生产数据。这样分类的好处是触摸屏访问数据时非常方便直接按数据块映射变量不用到处找地址。3.2 程序结构怎么分层OB、FC、FB 和 DBS7-1200 的编程可以用梯形图也可以用 SCL。梯形图直观适合逻辑简单、维护人员习惯看图的情况SCL 适合算法复杂、数据处理多的场景。我这套程序属于逻辑和数据混合所以采用了分层结构OB1主组织块负责整个扫描周期的主流程调度。FB1 是自动运行功能块封装送膜、追标、封口、切断等核心逻辑。FB2 是温度控制功能块内部调用 PID 指令。FC1 是手动操作功能块供调试时单步动作使用。FC2 是报警处理功能块汇总所有故障条件写入 Alarm_DB。中断组织块 OB40 处理高速计数器输入捕捉色标信号和编码器计数。这里说明一下为什么要把自动运行逻辑封装成 FB 而不是全部写在主程序里。FB 有独立的背景数据块每次调用时数据独立存储程序模块化程度高调试的时候可以单独禁用某个功能块不影响其他部分。而且 FB 可以被触摸屏直接通过接口参数访问做调试面板很方便。3.3 核心程序段袋长定位与色标追标袋长定位是这台包装机最核心的控制逻辑写不好就切出来的袋子长短不一。我这里用了两种方式配合正常运行时靠编码器计算送膜长度每次到达设定袋长时触发横封动作同时用色标传感器检测包装膜上的印刷色标如果实际切点跟色标有偏差自动进行修正。编码器接在送膜从动轮上从动轮的周长是固定的比如直径 80mm周长就是 251.2mm。编码器是 1000 线接 PLC 高速计数器如果采用 4 倍频模式每个脉冲代表的长度就是 251.2 除以 4000约等于 0.0628mm。这个精度对于袋长控制来说足够了。程序里我用了一个循环计数思路高速计数器每累计到“袋长对应的脉冲数”就触发一次横封然后把计数器清零重新计数。这里容易犯的错误是直接在中断程序里做除法运算影响中断响应速度。正确做法是提前把袋长转换成脉冲数存在变量里在中断里只做一个比较和清零操作效率高很多。色标追标逻辑稍微复杂一点。色标信号在前编码器计数在后当色标信号到来瞬间记录当前计数值跟理论值比较偏差就是需要修正的量。这个修正值不能一次性全加回去否则送膜会突然抖动一般按比例修正比如每次最多修正 10%让系统平滑收敛。这套逻辑我写了大概 60 行 SCL过程有些繁琐但跑起来很稳。3.4 温度 PID 控制的实现纵封和横封的温度控制我用了 S7-1200 自带的 PID_Compact 指令。PID 参数不是一拍脑袋定的我先在博途里启用 PID 调试面板手动输出加热功率观察温度上升曲线然后根据曲线的滞后情况设置 P、I、D 参数。这里有个实际经验加热系统的滞后很大温度传感器检测到温度变化需要时间加热器从断电到温度停止上升也有惯性所以 P 不能设太大否则会超调。我最终用的参数大概是P 为 3.5I 为 0.02D 为 0其实用 PI 就足够了微分项在温度控制里用不好反而容易引起震荡。PID_Compact 的输出是 0 到 100 的百分比我把它映射成固态继电器的通断占空比。周期设为 500ms输出 30% 就意味着每 500ms 周期内加热 150ms。这种时间比例控制方式比直接开关控制稳定得多。要注意的是固态继电器的最小导通时间不要设置得太小否则频繁通断会损坏器件实际测试下来 50ms 以上比较安全。3.5 G120XA 变频器 Modbus RTU 通讯实现G120XA 是西门子通用型变频器带 RS485 接口支持 Modbus RTU 协议。与 S7-1200 通讯时我用 CM 1241 RS485 通讯模块把变频器的运行频率、电流、故障状态读上来同时在触摸屏上可以设置目标频率远程启停。通讯参数设置要两边对上否则通讯根本建立不起来。PLC 侧设置波特率 9600、8 个数据位、偶校验、1 个停止位从站地址 1。变频器侧对应设置 P0300 选择 Modbus RTUP0301 设置从站地址为 1通讯参数 P0302 到 P0305 跟 PLC 侧保持一致P0306 选择通讯控制字和设定值来源。写控制字的时候要注意 Modbus RTU 的寄存器地址映射。G120XA 启动命令一般是通过写控制字来触发控制字 16 位里 bit0 是启动bit1 是使能bit2 是快速停车bit3 是运行使能。我在程序里做了一个状态机先写控制字将 bit1 和 bit3 置位把变频器准备好然后再将 bit0 置位变频器才开始运行。这样分步操作是为了避免一次写控制字时变频器认为指令非法。频率设定则通过写入速度设定值寄存器由通讯报文直接给定频率。4. 触摸屏与上位机的那些事4.1 KTP1200 画面设计与通讯操作界面用的是西门子 KTP1200 触摸屏7 英寸宽屏支持 PROFINET通过以太网直接跟 S7-1200 通讯。组态画面时我在博途里直接添加触摸屏设备然后把 PLC 的变量拖拽到画面上绑定不需要手动填地址这个集成度确实省事。画面设计我按功能分了几个页面主画面显示当前运行状态、袋长、速度、产量计数设置启动、停止、急停按钮。参数设置画面袋长、纵封温度、横封温度、加速时间、减速时间等。配方画面选择不同产品配方一键下发到 PLC。报警画面显示当前报警和报警历史支持确认报警操作。手动调试画面每个气缸、每台电机单独点动方便维修调试。这里要提醒一点触摸屏的按钮做“自动启动”时最好用“上升沿置位”功能而不是简单的“按下置位、松开复位”。因为现场操作工习惯点一下就松开如果用按下松开这种逻辑很容易出现启动信号丢失的情况。我都是把按钮做成启动置位、停止按钮复位外加一个“运行中”指示灯反馈这样状态非常明确。还有一个操作细节KTP1200 触摸屏本身有系统时间但如果不上电同步时间会越走越偏。建议在触摸屏的“区域指针”里启用时间同步功能让触摸屏的时钟跟 PLC 实时同步。我之前遇到过客户反馈触摸屏报警记录时间不对查了半天发现是触摸屏和 PLC 的时间没同步后来在组态里设置了时间同步就解决了。4.2 配方管理换产品不要调参数包装机最常遇到的场景是换产品规格比如从装 100g 的袋子换成装 250g 的袋子袋长、温度、速度都要变。如果每次都手动改十几个参数既慢又容易出错。我实现了配方功能每种产品规格对应一个配方里面有袋长、纵封温度、横封温度、充填量对应的伺服速度等一系列参数。在触摸屏上选了配方后点击“下发配方”数据块里的参数就会一次性更新到 PLC 的当前运行参数里。配方数据存在触摸屏里还是 PLC 里我建议存在 PLC 的保持性数据块里这样即使触摸屏坏了换一块屏也能正常工作不需要重新传数据。配方数我设置了 12 组覆盖常见产品规格足够了。配方下发时有个小的陷阱如果设备正在运行下发配方后袋长参数变了横封触发位置直接跳变会导致包装袋瞬间切坏。我做了逻辑保护设备运行过程中禁止配方下发或者提醒操作工先停机再切换配方这样虽然多一个操作步骤但避免了很多废品。4.3 用 C# 给 PLC 写一个数据采集页面这台包装机后续有联网需求要用上位机采集产量、设备状态、报警记录等数据所以我没有用传统的数据网关而是直接用 C# 写的上位机程序通过 S7 协议读取 S7-1200 的数据。整个上位机通过以太网交换机连接 PLC 和触摸屏组成一个小型控制网络。C# 读取 S7-1200常用的是 Sharp7 或者 S7.Net 库。S7.Net 用起来更简单示例代码比较多适合快速开发。读取数据时我封装了一个数据采集类每隔 500ms 读取一次 PLC 的保持性数据块把产量、运行状态、当前温度等数据刷新到界面。using System; using S7.Net; class PlcReader { private Plc plc; public bool Connect(string ip) { plc new Plc(CpuType.S71500, ip, 0, 1); plc.Open(); return plc.IsConnected; } public int ReadCount() { return plc.Read(DB4.DBD0); } }这里有个重要提醒S7-1200 默认开启了 PUT/GET 通讯吗答案是不一定。你必须在 CPU 组态的“防护与安全”里勾选“允许从远程对象进行 PUT/GET 通讯访问”否则上位机是连不上的。这是很多初学者最容易卡住的地方现场调试好了 PLC上位机却显示通讯失败检查组态才发现这个选项没勾。上位机除了数据采集我还做了简单报表每个班次结束时自动生成产量报表方便生产管理。配套的报警监控窗口直接绑定 PLC 的 Alarm_DB故障发生后上位机能记录时间戳方便事后分析。5. 现场调试的坑与排查手法5.1 联机调试的正确顺序现场调试最忌上来就全自动运行我一般按这个顺序来先断电检查接线核对万用表量电压、查短路然后 PLC 上电检查硬件组态是否与实际硬件一致接着用强制功能逐个测试输入输出确认接线无误再测手动模式验证每个执行机构动作手动稳定之后才转入自动模式从小节拍开始逐步提速。调试时博途的在线监控功能非常好用可以直接看梯形图里每个触点的通断状态。我通常同时开两个窗口一个窗口监控程序逻辑另一个窗口看变量表出现异常时先看输入信号是否到位再看程序里的中间变量最后看输出是否执行。这样逐层排查比瞎猜快得多。还有一个习惯值得推荐调完一段逻辑就做一次“整体保存”并把程序块归档到版本管理目录里命名带日期和说明。比如“frm_pack_v1.1_baglength_fix_0520”。现场设备生产不能停出现问题要回退版本时这个习惯能救命。5.2 常见异常一览速查表调试过程中遇到的问题是常态我整理了一份常见的异常排查表都是实际踩过的坑现象可能原因排查方法触摸屏显示“不信任 PLC”或时间不对触摸屏与 PLC 未做时间同步或同步被禁用在触摸屏组态中启用区域指针时间同步重新下载高速计数器数值跳变编码器屏蔽层没单端接地或者信号线与动力线同槽检查屏蔽接地重新分开走线变频器连不上 ModbusPLC 通讯参数与变频器不一致或未配置终端电阻对比两侧波特率、校验位、从站地址检查 485 终端电阻横封切袋位置偏移色标传感器响应太慢或反光干扰调整传感器灵敏度改用 PNP 或 NPN 型与 PLC 输入匹配温度一直震荡PID 参数不匹配或采样周期太长缩短采样周期适当减小 P 值必要时取消 D上位机连不上 PLCCPU 未开启 PUT/GET 访问在 CPU 组态中勾选允许远程 PUT/GET 通讯输出点不动作晶体管输出电流不够驱动负载检查负载线圈电流增加中间继电器或固态继电器PLC 一上电就报故障模块丢失或硬件组态不一致在博途中“恢复出厂设置”并重新下载完整组态5.3 我建议收藏的几个操作习惯一些操作习惯是程序开发之外的但极大影响现场体验。第一给 PLC 程序留一个“手动旁路”功能。设备调试或者传感器坏了临时应急时可以把某个气缸或者电机切到手动强制运行保证设备在带故障状态下也能短时间转起来。注意要加明显的指示灯和限制条件防止误操作伤人。第二程序里多写“互锁”。例如横封切刀动作时送膜必须停止纵封温度没到设定值禁止自动启动电机运行中禁止切换正反转。这些互锁逻辑在编程时看起来多余但现场操作工容易误操作互锁一少设备就出事故。第三保留一个诊断界面。我把 PLC 内部的关键状态字、核心计数器的当前值都映射到触摸屏上做了一页“系统诊断”。设备出故障时操作工只需要看这一页甚至拍照发给我我远程就能判断问题所在。这个诊断页面每次帮我在售后环节省了大量时间。结尾一点点个人的体会整套系统从方案确定到稳定运行前后大概用了三周时间。回头再看这套基于 S7-1200 的包装机控制系统并不是什么高精尖技术但正是这种看似常规的项目把 PLC 编程、电气设计、通讯组态、现场调试各个环节都串了起来。我个人的体会是做项目不能只盯着写程序硬件选型、IO 规划、抗干扰、人机交互这些细节决定设备能否长期稳定运行。S7-1200 在这类中小型设备上确实是一个很均衡的选择性能够用、扩展灵活、调试工具顺手配上博途的集成环境整个开发链路非常顺。如果你正准备用 S7-1200 做类似的设备控制希望这篇记录能帮你少走几步弯路。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进