ARTICLE DETAIL

资讯详情

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

S7-1200建材自动化实战:FB封装、顺控与称重调试

S7-1200建材自动化实战:FB封装、顺控与称重调试 整理车间自动化项目的时候翻出两个去年给建材厂做的S7-1200程序案例越看越觉得有必要写出来。这两个项目一个是加气混凝土砌块生产线的配料称量系统另一个是砌块切割工位的自动摆渡与顺序控制。都是建材厂里很常见的中小规模设备但现场环境相当不客气粉尘大、振动强、温度高工人三班倒半夜报警是常态。程序就是在这样的环境里磨出来的编程套路也全是现场逼出来的。两个项目有一个共同点功能不复杂但逻辑关系特别碎。配料称量要处理多路给料机的粗细喂、称重仪表的通讯、飞料补偿、配方切换切割摆渡要处理摆渡车、切割小车、升降台之间无数个“谁先谁后”的条件。这种项目最怕的不是不会写某条指令而是程序越改越乱、越改越坏。所以这篇文章不打算讲具体工艺怎么设计讲解过了重点放在我怎么用一套组织方式把这种“碎逻辑”写得不乱、好调试、敢让别人接手。这篇文章适合谁看正准备接S7-1200项目的新手在建材设备或类似离散控制行业做电气设计的同行以及想提升程序结构化程度、让同事能顺利接手你程序的工程师。内容都是我实际落地过程中总结出来的套路能直接抄作业的尽量给到位。1. 两套建材厂设备的工艺链路与硬件基础1.1 加气砌块配料称量系统的工艺要求加气混凝土砌块这个行业核心工艺路线大体是粉煤灰、砂、水泥、石灰等原料进仓通过螺旋给料机往计量斗里加料计量斗下方压着称重传感器配料完成后卸料进搅拌机加水搅拌最后浇注成型。真正要命的地方在“计量”每一盘的配方比例直接决定成品强度精度不够整批砌块都可能报废。这套系统的控制点主要有三类一是多路螺旋给料机每路配一台变频器实现“粗喂快、精喂慢”二是气动阀门和卸料门控制物料流向三是称重仪表实时把计量斗的重量数据传送给PLC。做程序的时候我习惯把工艺要求整理成一句大白话在尽量短的时间内把几种物料按配方重量加进计量斗精度达到±1公斤以内并且不能超调。看起来简单实际上牵扯的问题很多。比如粉煤灰这种物料流动性差给料机容易结拱重量信号会有跳跃性波动螺旋给料机停止以后管道里还有一截余料在下落这部分的“飞料”重量如果不做补偿精度就是一句空话。这些细节都是程序里需要专门处理的。1.2 切割摆渡顺序控制系统的工艺链路另一套是砌块成型后的切割工段。坯体成型出来以后要先由摆渡车送到切割位置切割台升降、水平切割钢丝动作、垂直切割动作全部完成后坯体再送走。这中间每个动作之间有严格的时序关系而且切割小车和摆渡车在空间上是交叉的谁先动谁后动错一点都不行——轻则挂坏钢丝重则两车相撞。这套系统的逻辑难点在于“顺序的编排”。十几个动作每个动作有自己的起始条件、结束反馈、超时报警和互锁条件。一开始我也想过把所有条件堆在一起判断写到后来自己都绕晕了。后来改成顺控表的思路把每一步当成一个状态用“当前步号 转移条件”推动流程往前走程序一下清晰了很多。这块内容我在后面专门用一整章来讲。1.3 为什么选S7-1200而不是更小的200 SMART或更大的300硬件选型的时候甲方问过我一次这种系统用西门子S7-1200是不是有点“杀鸡用牛刀”我当时的回答是恰恰是因为项目不大才更要选一个扩展性够、调试方便、模块化的平台。S7-1200在性价比上比S7-300有明显优势CPU本体自带以太网口下载程序、连HMI、做Web诊断都很方便。相比200 SMARTS7-1200的程序块结构更完整支持SCL、支持多重背景数据块做设备封装的时候非常顺手。对于配料称量这类需要Modbus通讯和配方管理的项目S7-1200的串口模块和块访问概念都比200 SMART高出不少。硬件配置上两个系统我都用了1214C DC/DC/DC的CPU。配料系统加了模拟量输入模块接变频器和称重仪表的备用信号切割系统多挂了一个远程IO从站省了从控制柜往设备现场拉大量电缆。通讯方面配料系统用CM1241 RS485模块连接称重仪表切割系统通过PN口和HMI通讯整体拓扑非常干净。2. 编程套路第一层把设备控制封装成标准FB调试省一半时间2.1 不封装的程序为什么会越改越乱很多同行写S7-1200程序习惯把所有逻辑放在OB1里或者按功能拆几个FC就完事。项目规模小的时候看不出问题一旦设备数量上来了比如配料系统有8路给料机、8台变频器、十几把气动阀门每台设备的启停、故障、状态处理都写一遍程序就成了一盘散沙。我记得有一次在现场改一个阀门的延时时间翻了三页梯形图才找到那一段逻辑改完还担心会不会碰到相邻的定时器。这种程序不是说不能干活而是后期维护成本太高换个工程师绝对不敢碰。设备封装的思路就是把这个痛点解决掉把“一台电机”所有相关的逻辑放进一个FB管脚暴露出来程序里其他地方只需要“调用这个块给它相应的变量”就行了。2.2 电机控制FB的具体写法这里先说一下我常用的电机控制FB结构。管脚分四组命令类启动命令、停止命令、正反转切换、自动手动切换反馈类运行反馈、故障反馈、过载信号、变频器 readiness输出类启停输出、正反转输出、复位输出、频率给定值参数类启动延时、故障后自动复位次数、最小运行时间内部逻辑上我会强制默认“手动优先”——自动指令来了先看手动状态防止现场调试的时候误动作。启动条件全部满足并且没有故障输出才置位运行反馈在设定时间内没回来马上报“运行超时”故障故障信号复位必须是沿触发不能让人一直摁着复位按钮就能反复启动。SCL的大致骨架我贴在下面方便对照FUNCTION_BLOCK FB_Motor VAR_INPUT iManualOn : BOOL; iAutoOn : BOOL; iStartCmd : BOOL; iStopCmd : BOOL; iFaultSig : BOOL; iRunFb : BOOL; END_VAR VAR_OUTPUT qRun : BOOL; qFault : BOOL; qActive : BOOL; END_VAR IF iManualOn THEN qRun : TRUE; // 手动强制运行调试用 ELSEIF iAutoOn THEN IF iFaultSig THEN qRun : FALSE; qFault : TRUE; ELSE qRun : iStartCmd AND NOT iStopCmd; END_IF; END_IF;实际使用时在OB1里给每台电机建立一个背景数据块比如“MOTOR_BLOWER”“MOTOR_FEED1”然后在程序里反复调用这个FB。好处非常直观调试电机逻辑只需要在监控表里修改一个背景数据块哪里不对查哪里根本不用满程序翻。2.3 阀门和模拟量设备的封装套路阀门控制比电机简单但同样值得封装。我把阀门分为两类开关阀和调节阀。开关阀的控制就一个原则——先确认动作方向再判断开/关到位反馈到位反馈超时一律报警。调节阀则在FB里额外增加了模拟量给定值的处理支持手动给定和自动PID调节两种模式切换并且做了输出限幅。设备封装做完以后配料系统和切割系统的程序结构一下子从“几百行堆叠的散点逻辑”变成了“二十来个标准块的实例化组合”。后期做程序交接的时候我把FB的管脚表打印出来给同事人家半天就把程序逻辑顺清楚了。这套东西看着简单但确实是我被现场教育过之后才总结出来的。早期程序我也写过一坨到底后来连续两次因为改一个延时翻遍整个程序才下决心把所有设备逻辑全部封装。3. 配料称量系统的核心Modbus通讯与称重数据处理实战3.1 modbus_comm_load指令的参数匹配逻辑配料系统的称重仪表输出的是RS485信号通讯协议是Modbus RTU。S7-1200这边用CM1241 RS485模块程序里通过MODBUS_COMM_LOAD这个指令完成串口参数配置再用MODBUS_MASTER指令轮询读写从站数据。很多新手在这里首次接触modbus_comm_load容易卡在“什么波特率、校验位、超时时间到底怎么填”。这块我的建议是先别着急填跑去把称重仪表的说明书翻出来看看厂家出厂默认的串口参数。仪表厂商一般默认9600波特率、8数据位、1停止位、偶校验PLC这边必须和从站完全一致否则通讯直接起不来。参数配好以后指令块上有几个关键输入REQ通讯请求、MB_MODE0表示读1表示写、MB_DATA_ADDR从站寄存器地址、MB_DATA_LEN数据长度、DATA_PTR数据存放区。调度逻辑上不要每周期都发请求我一般做一个5Hz的脉冲发生器每200毫秒触发一次读写这样既保证了称重数值的实时性又不会把串口带宽占死。3.2 称重数据的稳定性处理称重仪表读回来的重量数据理论上是一条直线到了现场就完全不是那么回事。螺旋给料机一启动整个计量斗都在跟着振动重量信号会上下跳粉煤灰下落过程中还会产生冲量读数更是频繁跳动。程序里我做了两级处理。第一级是递推平均滤波把最近5个采样周期的重量值做移动平均把高频抖动平滑掉。第二级是变化率限制如果两秒内的重量变化超过了一个预设值比如3公斤就判定为异常跳跃用上一次的有效值代替。这两个措施加在一起称重数据基本稳下来了。滤波明显会带来一个副作用重量变化的响应变慢了。喂料到了目标值附近需要快速停止给料机这时候滤波产生的滞后就成了影响精度的罪魁祸首。所以我的逻辑是“滤波用于显示和稳定判断停止判断用原始采样值”两个数据分别走不同路径各取所需。3.3 飞料补偿的前馈逻辑螺旋给料机停下来的那一瞬间计量斗里的重量并不是最终值——从螺旋管道里还在往下落的物料会继续进入计量斗这部分叫“飞料”。要命的是飞料量不是固定的不同物料、不同含水率、不同给料频率飞料能差出两三公斤。解决思路是“提前停机动态补偿”。程序里设一个提前量参数比如配方目标是50公斤当重量到达48.5公斤时就停止精喂让剩下的1.5公斤由飞料补齐。这个提前量不能拍脑袋设我做成一个可调参数现场调试时先观察几次实际停机后的净重偏差再反向修正提前量。更进阶一点的做法是“学习补偿”每次停机后计算实际值与目标值的偏差把这批偏差加进下一次停机提前量的修正里形成一个简单的闭环学习。实测下来磨机磨合一段时间后每批配料精度能稳定在±0.5公斤以内。3.4 配方管理和批次切换的处理细节配料系统一定要做配方管理就算甲方一开始说“不需要”我们也要做进去。因为建材厂的配方是随时可能调整的水泥标号换了、砂子的含水率变了都要改配方。我用一个数据块把配方做成结构体数组每种配方包含所有给料路的目标重量、粗喂量、精喂量、飞料补偿系数HMI上直接可以修改和保存。配方切换时要特别注意“清零逻辑”。换配方必须在一次配料流程完全结束之后进行不能在计量过程中切配方否则会导致累计值混乱。程序里我在“批次完成”这个步骤上加了配方切换允许标志没到这一步HMI上的切换按钮一律置灰。3.5 S7-1200 G2在通讯上的新变化如果这台PLC是S7-1200 G2系列也就是带G2后缀的新款CPU固件和指令集有些细节和经典款不一样比如Web服务器功能更强、访问保护策略更严格MODBUS_COMM_LOAD在部分固件版本的接口显示会有些许差异。我遇到过一次固件版本和博途版本不匹配导致通讯指令报文报错的情况解决办法是把CPU固件更新到与TIA Portal版本兼容的版本并且重新下载硬件配置。4. 切割摆渡系统用顺控表思路理顺机械动作4.1 为什么顺序逻辑需要专门的写法切割摆渡系统最大的坑在于“动作之间互相影响”。摆渡车没到位切割台不能升切割台没升到位水平切割不能走水平切割没退到位垂直切割不能下。这种一层叠一层的条件关系如果全部用“无条件条件”粗暴堆叠程序会变得极其难看。更麻烦的是现场机械信号经常不稳定比如到位开关偶尔闪断一下如果程序只认瞬时信号整个顺控就会误动作甚至卡死。这个时候就需要一套专门应对“顺序逻辑”的写法让每一步都有明确的进入条件和退出条件不受干扰信号的影响。4.2 步进顺控的核心实现方式我的做法是用一个整型变量作为“步号”从0开始逐步递增。每个步号对应一个工艺动作步号在哪个值程序就只执行那个动作的控制逻辑。每一步的基本结构是检测“进入条件”是否满足满足则执行动作动作完成的反馈信号到位后延时一个确认时间再产生“转移脉冲”切换到下一步。在SCL里可以写成这样CASE stepNumber OF 0: // 初始步等待启动 IF startBtn AND readySignal THEN stepNumber : 10; END_IF; 10: // 摆渡车前进 trolleyForward : TRUE; IF trolleyInPosition THEN stepNumber : 20; END_IF; 20: // 切割台上升 cutTableUp : TRUE; IF cutTableUpFb THEN stepNumber : 30; END_IF; // 继续后续步骤 END_CASE;每个步号都必须有超时保护。我在程序里为每一步配了一个超时定时器动作超过设定时间没有反馈立即报警并保持当前状态禁止继续向下走防止机械卡死以后程序还在向下循环导致二次事故。4.3 凸轮追剪思路在切割位的移植切割工位的小车切割动作如果用伺服驱动行业里常见的设计是“凸轮追剪”也就是主从轴同步控制从轴跟随主轴位置走一条预设的凸轮曲线实现运动中同步切割。我虽然没有在S7-1200里直接做电子凸轮那是高端运动控制器的活但凸轮追剪的核心思想我移植进了变频器版本的程序把主轴的实时位置通过编码器读进PLC计算当前位置对应的切割动作窗口在这个窗口内同步控制切割小车跟随运动。这个思路的好处是不需要依赖固定的机械挡块位置算出来是多少就是多少偏差大了还能在下一盘自动修正。后来有同行跟汇川的伺服配合做类似项目也是参考的这套位置同步框架只不过把脉冲输出换成了汇川伺服的总线给定。4.4 多工位互锁必须做成矩阵切割摆渡系统里摆渡车和切割小车的运动范围有交叉区域机械设计上虽然加了物理限位但程序层面的互锁必须更严格。我的做法是列一张互锁矩阵表横向是所有运动部件纵向是所有区域传感器交叉点填“谁在哪个区域时谁不能动”。这张表直接翻译成程序里的互锁条件并且在每个运动命令输出前做一次强制检查。为什么说“强制”因为我在现场见过电工手动短接信号把互锁绕过导致两台车怼在一起。程序里无论如何不能给绕过留后门。5. 现场调试踩过的坑通讯掉线、称重漂移和半夜报警5.1 Modbus通讯偶尔断线的根治设备运行一段时间后客户反馈称重数值偶尔卡住不动重启PLC就好。我到现场一看发现程序里是一路MODBUS_MASTER在主循环里不停发请求一旦一个轮询周期因为程序循环超时被拖延从站那边就认为通讯超时整条链路进入半死状态。修这个问题的关键在于“通讯请求要有节奏”。我把Modbus轮询过程拆成了独立状态机每个从站按固定的200毫秒时间片轮询不在这个时间窗内绝不多发请求同时增加断线检测逻辑连续三次没有回复就置通讯故障位并在HMI上大字报警。处理完以后这个系统运行了半年再没出现掉线问题。5.2 称重信号的干扰来源与处理手段现场还有一个经典问题夜间电压波动大的时候配料精度明显变差。查了一圈发现变频器的动力电缆和称重传感器的信号线有一段走在同一个桥架里变频器一启动感应的干扰直接耦合到称重信号上。处理办法分三步一是把信号线单独穿管远离动力线二是给称重仪表供电加隔离变压器三是在程序里把采样窗口调整到变频器输出稳定的时间段。这个案例充分说明做建材厂项目如果前期布线不规范后面程序做到天上去也救不回来。5.3 到位开关闪断引发的顺控误动作切割摆渡项目调试时遇到一个诡异问题程序在正常运行时偶尔会跳过某一步直接进入下一步。最开始我怀疑程序逻辑写错了反复查CASE语句都没发现毛病。后来通过在程序里记录每一步的到来时间点才发现是接近开关在上电瞬间有短暂抖动被程序误判成了到位信号。解决办法也很简单所有开关量输入全部加上延迟滤波信号持续20毫秒以上才认为有效同时把关键到位信号改为“沿保持”需要两个扫描周期连续为真才触发转移。这里提醒各位现场PLC程序的输入滤波参数不要随手用默认值要根据现场信号实际情况去调。5.4 急停和复位逻辑必须单独考虑建材厂的设备安全要求高急停按钮基本上每台设备旁边都有。急停按下之后如果程序不把当前状态清掉复位后设备可能直接接着后半段流程跑非常危险。我的做法是所有设备的动作状态都受“安全继电器程序急停标志”双重控制。急停触发时程序跳转到独立的停止状态清空所有运行标志并且把步号清零必须现场手动按复位按钮并重新走一遍启动流程才会恢复。这个逻辑看起来简单但很多项目恰恰在这里偷懒导致后期验收被安全评审打回来。5.5 归档之前注释和版本记录也是程序的一部分项目交付的时候甲方工程师会把程序拷走自行维护跟你远程要参数调整的权限。这时候如果程序注释写得稀烂人家连哪台电机对应哪个块都找不到后续沟通成本会非常高。我现在习惯在每一个FB前面用中文注释写明设备位号、工艺用途、所在区域、互锁条件、最近一次修改日期和修改人。全局数据块里的每个配方参数也都挂中文注释。这样做我自己的收益是什么半年以后客户回访翻到老程序我能在十分钟内恢复记忆不用重新看一遍图纸再结合逻辑慢慢猜。写在最后如果能重来一次我会先做这三件事两个项目做下来我最大的体会是S7-1200的编程本身不难难的是把项目从工艺需求一步步拆成清晰可控的程序结构。如果能回到动笔写代码之前的日子我一定要先做三件事。第一把设备清单和IO映射表填得一丝不苟。前期IO规划错了后面改起来牵一发动全身。第二先把设备的FB封装框架搭好再写具体逻辑不要等程序写了一半才想起来封装那时候重构的代价很大。第三进现场调试时随身带一个本子把每一个现场故障的根因和临时处理措施记录下来。现在项目的程序目录下还留着一个“现场调试记录.txt”客户再问起来翻出来就能答省了大量重复沟通的时间。最后再分享一个小技巧S7-1200项目完成后导出一份程序块的PDF文档放在项目文件夹里连注释带逻辑一起打印出来比单纯甩给客户一个源文件专业得多也能避免客户在看不懂的情况下频繁打电话来问。这招在最后验收阶段帮我省了很多事。
返回列表