去年年底我陪客户调试一条汽车零部件压装自动线设备刚通上电的那几天12个压装工位的压力曲线在触摸屏上像心电图一样一条一条蹦出来。逻辑上设备不复杂每个工位负责把衬套、销轴或密封圈压进壳体压入力从2kN到30kN不等有些位置额外要求监控压入深度。真正让人头疼的是怎么把每个工位的压力和位移数据抓稳、判准、存明白再在2秒多一个循环的节拍里给出合格结论。这套程序基于西门子1200系列PLC完成从硬件选型到最终量产稳定运行前后开发加调试大概一个半月。中间踩了不少坑也积累了一些从手册里翻不到的经验。这篇分享就围绕这套“12个压装位置的压力、位移数据采集与判定系统”来写适合正在做压装设备、装配线或类似单机自动化项目的工程师参考无论你是自己写PLC程序还是想把设备的数据采集逻辑理顺应该都能找到有用的一段。1. 为什么是压力与位移双通道12个压装工位背后的工艺逻辑1.1 压装工艺本身在“装”什么汽车上很多零部件并不是纯螺栓连接而是靠过盈配合压进去的比如变速箱里的轴承、转向节里的销轴、制动系统里的密封圈。所谓过盈配合就是孔的尺寸略小于轴或者衬套的外径靠压装设备施加一个轴向力把零件强行压入到指定位置。这个过程中压力能不能平稳建立、位移能不能准确到位直接决定了连接强度和使用寿命。压力太小零件可能根本没压到位运行中松动压力太大壳体孔口可能拉伤甚至零件本身发生变形。更隐蔽的问题是过程异常——比如孔径内有毛刺、杂质或者零件表面出现磕碰压力曲线会在某个位置突然跳一下但最终压力峰值可能还是落在合格范围内。只看结果不看过程这种偶发不良很难被拦截。1.2 双通道监控到底解决了什么这也是为什么要在每个压装工位同时采集压力和位移而不是只看一个量。单纯看压力峰值抓不住压入中途的波动单纯看位移终点零件本身如果有弹性变形或者夹具松动位移也可能骗人。真正的判据是压力-位移曲线的整体形状以及它落在什么区域内。在这条设备上12个工位对应12种不同的压装任务量程差异很大。最轻的工位压入力只有3kN最重的工位需要35kN每个工位的行程也各不相同。这意味着每个工位都必须有独立的参数定义不能一套上下限到处套。后面我们会在配方管理上专门处理这件事。1.3 为什么选西门子1200系列PLC也有人问过我为什么不上1500或者用小型专用控制器。我的判断标准只有一条够用、可控、成本合理。这套系统的I/O总量并不大压力位移加起来24路模拟量输入另外就是十几路数字量输入输出用来控制气缸、夹具和输出信号。CPU做逻辑控制、模拟量采集、数据记录和外发响应速度完全赶得上节拍。1200系列PLC支持扩展信号模块CPU自带的Profinet接口可以直接连接HMI和上位机调试和后期维护都很顺手。更重要的是1200系列的编程方式对做设备单机非常友好。无论是梯形图还是SCL都能在一个项目里混用数据块、配方、数据日志这些功能也都有现成指令不需要额外搭一整套复杂架构。下面的内容我会围绕这套方案的实际落地过程展开。2. 硬件选型与24路模拟量接入方案不是多插几块卡就行2.1 模拟量模块怎么选、怎么算通道数12个工位每个工位一路压力加一路位移就是24路模拟量。选择SIMATIC S7-1200系列的SM1231 AI 8x13位模拟量输入模块一块模块8通道三块模块刚好24路。CPU选择1214C DC/DC/DC最多可以扩展8个信号模块三块模拟量模块之外还能留出余量以后想加温度或者调试用的通道也不慌。如果你把同型号的三个模块插在不同的扩展槽位实际使用中还有一个隐藏好处每个模块都有自己的模数转换电路它们可以并行工作互不等待。这一点对后面的采样率规划非常重要等到了数据采集部分细说。通道分配建议把压力信号和位移信号分开接在不同的模块段位上避免压力信号和位移信号完全混插在一块模块上。真遇到通道间干扰至少排查起来思路清楚。我习惯按工位顺序循环分配比如1工位压力接模块1的0通道位移接模块3的0通道2工位压力接模块1的1通道位移接模块3的1通道这样每个模块的数据可以按序号整齐排列。2.2 传感器选型与量程搭配的细节压装力测量用的是应变式压力传感器或压装机专用测力传感器输出4-20mA电流信号。量程选择上有讲究不要刚好贴着最大工艺力选那样传感器长期处于过载边缘寿命会打折扣也不要把量程选得太大比如最大只能压5kN你配个100kN的传感器有效信号分辨率会被白白浪费。经验值是让最大工艺力占传感器量程的60%到70%这样既有安全裕度分辨率也够用。位移测量我建议优先考虑磁致伸缩位移传感器或拉线式位移传感器视成本和精度要求而定。磁致伸缩的好处是绝对值输出、没有累积误差精度能做到0.01mm级别缺点是对安装位置要求高传感器自带回波延迟采样频率太高时会遇到台阶问题这一点我在最后的踩坑记录里会专门提。拉线式便宜但对线绳回弹和磨损敏感适合1mm以上精度的粗监控场合。电压输出型位移传感器0-10V响应更快但电压信号在长线传输时更容易受干扰所以我这条线上统一采用了4-20mA信号压力位移都是电流环从接口层面就少了一层麻烦。反正模拟量模块支持电流输入。2.3 接线与接地干扰多半是接出来的模拟量接线看着简单实际上很多现场干扰都是接出来的。24路信号全部采用屏蔽双绞电缆屏蔽层在PLC侧的EMC接地排做单端接地设备本体侧不再重复接地避免形成地环路。如果传感器外壳已经和机械设备大面积接触那更要留意机械振动、电机变频器对地的噪声都可能通过屏蔽层窜进来。传感器供电也不能随手从开关电源上拉一根线就完事。24路变送器同时工作时电流加起来不小控制器模块端子未必受得了。我在设备里单独配了一路隔离稳压电源给所有传感器供电和电磁阀、接触器、变频器使用的电源完全分开并且电源的负端在PLC侧单点汇总接到接地系统。这样做之后压力信号在电机启动瞬间的毛刺明显少了很多。2.4 组态量程与量程卡设置SM1231模拟量模块的组态比较直接按模块型号软件会自动带出通道属性。把每个通道的量程设置为4-20mA数据类型用整数INT滤波强度根据现场情况调整一般默认就可以。实际工程量值比如kN和mm不需要在硬件组态里标定我会在PLC程序里用线性换算统一处理这样以后更换传感器只需要改换算因子和零值偏移不用动硬件配置。程序中的量程换算公式为[ 工程量 (原始量程上限 - 原始量程下限) \times \frac{当前值 - 量程上限对应整数}{量程上限对应整数 - 量程下限对应整数} 量程下限 ]换算之后还需要根据每个工位的实际情况做偏移修正应对安装零点不完全一致的问题整个过程我放在下一部分讲。3. 数据采集架构让12个工位不丢点、不串扰的采样处理框架3.1 采样实时性从哪里来循环中断与状态机压装过程的压力变化一般发生在几十毫秒到几百毫秒之间如果只在主程序OB1里扫描采集扫描周期不稳定读出来的数据就忽稀忽密后面做包络线判定会很不舒服。我的做法是把采样放到循环中断组织块里去执行例如OB30循环周期设置成10ms或者5ms根据实际压装节拍来定。主程序只管逻辑判断和结果输出采样任务由循环中断稳定驱动。但这里马上会遇到一个现实问题模拟量模块是分时复用的同一时刻只能转换一路通道。如果在每次中断里把所有24个通道全部读一遍模块根本来不及读回来的数据可能是某些通道上一次转换的旧值甚至会出现同一工位的压力点和位移点时间不对齐的情况曲线看起来就很奇怪。解决办法不是硬读而是做一个轮询状态机。以10ms中断为例每次中断只读取部分通道循环往复。我以前在调试笔记里画过一张通道轮询表大致思路是这样中断周期序号模块1读取模块2读取模块3读取第1个周期1工位压力1工位位移5工位压力第2个周期2工位压力2工位位移6工位压力第3个周期3工位压力3工位位移7工位压力…………因为三个模块并行转换每个周期能读3个通道24路跑完一圈需要8个周期也就是80ms。对每个工位来说压力点和位移点的实际采样间隔就是80ms换算下来每个位置大约12Hz左右的采样率。这里有个取舍这个采样率对画“趋势曲线”够用但对短时间毛刺的捕捉略偏慢需要在滤波和判据上做补偿。如果客户对采样率要求更高可以把扫描周期改到5ms代价是CPU占用率上升同时模块转换时间可能成为瓶颈程序里必须有“数据未更新”标志防止把旧值当新值。3.2 用多模块并行换采样率一组容易被忽视的思路如果一味的轮询每路采样率不可能高到哪里去。这块要从系统结构上想办法。前面提到的“三个模块并行工作”就是关键每次中断三个模块各读一路你实际拿到了三个通道的最新数据而不是一个模块三个通道的旧数据。换算下来采样率直接乘以模块数量。如果你只有一块8通道模块那就只能老老实实一路一路读采样率提不上去。我后来在另一个项目里试过用SM1231 8路AI模块做4个工位效果也够但数据密度明显稀不少。所以说通道分散到多个模块本身也是一种提速手段这在工程上经常被忽略很多人只记得“模块多少看通道数够不够”忘了它同时影响采样节奏。3.3 软件滤波与断线检测模拟量原始值不可避免带噪声完全不管直接拿去判定会出现压力和位移曲线抖动得没法看。但压装信号本身是瞬态变化的滤波窗口不能太大否则把尖峰也抹掉了。我用的方案是三重组合中值滤波去除单点毛刺、轻量滑动平均平滑曲线、判定前再做一次差分判断防止异常跳变直接触发报警。中值滤波取当前值、上一周期值、再上一周期值三个数取中间值这个算法几乎不增加延迟专门对付偶发干扰。滑动平均窗口我控制在4个点以内压装力曲线本来就该陡升陡降平均太多反而失真。代码用SCL写的话很简单无非就是一个数组移位加求和。断线检测也要放在采集层处理。4-20mA电流环的好处是自带断线特征信号低于约3.6mA或者高于20.5mA基本可以断定线路断了、传感器故障或量程超限。我每个通道读完原始值后会先做一次“合理范围检查”一旦发现异常就置位故障标志并在HMI上提示具体工位而不是等到最后判定NG才发现那样浪费好几个节拍。4. 压装过程判定逻辑人眼盯不住曲线程序必须直接给结论4.1 把压装过程拆成五个阶段压装过程远不是“压到底看一下压力”那么简单。同一个工位在一个完整循环里压力、位移的变化规律可以分成快进、接触、压入、保压、返回五个阶段。每个阶段里压力和位移的关系特征完全不同。快进阶段压头快速靠近零件压力基本为零位移快速增加接触阶段压头刚刚碰到零件表面压力开始爬升位移变化放缓压入阶段是最核心的阶段压力持续上升位移稳定推进中间如果出现毛刺、卡滞曲线会突然跳变这也是判定最容易出问题的地方保压阶段压头停住位移不再增加压力保持一段时间用来消除弹性回弹最后是返回准备下一个循环。程序需要根据位移变化率和压力数值综合判断当前处于哪个阶段再决定用哪套判据。4.2 包络线、窗口判据和斜率异常三种判断怎么组合单靠“终点压力在上下限之间、终点位移在上下限之间”这种窗口判据远远不够。就像前面说的中途尖峰可能在终点被平均掉。所以在压入阶段我给每个工位建立了一条压力-位移包络线以工艺工程师提供或试压样本得到的标准曲线为基准按百分比上下扩展出一个合格带。每个采样点的实测值必须落在这个合格带里任何超出都会被记录为过程异常。这段程序的逻辑核心可以抽象成一个功能块FUNCTION_BLOCK FB_PressMonitor VAR_INPUT bEnable : BOOL; // 采集使能 rForce : REAL; // 当前压力 rPos : REAL; // 当前位移 iStage : INT; // 当前阶段 END_VAR VAR_OUTPUT bOK : BOOL; // 综合判定结果 bOutOfEnvelope : BOOL; // 包络线越界 END_VAR实际使用时包络线数组按照位移坐标存储上下限压力值。每个采样周期程序先用位移值做线性插值找出当前位移对应的压力上界和下界再比较实际压力值。包络线只监控压入阶段快进和保压阶段用不同的简单判据这样可以避免在不同区间误报。包络越界不立即停机而是先记录一次“过程异常事件”连续三次异常或者单次超界超过设定值才判定NG。窗口判据作为最终“一锤定音”的标准在保压结束时检查终点压力和终点位移是否同时落在矩形窗口内。这两个窗口参数对应每个工位的工艺合格范围通常来自工艺文件。斜率异常主要看压入阶段的力-位移关系是否突然改变如果在一个很小的位移增量内压力大幅跳升说明零件内部可能有异物、孔壁刮伤这时即使包络线没有超也建议标记预警。4.3 12个工位同时压装时的调度与互锁最开始时我把12个工位的压装启动信号都放开结果试运行当天就发现电源电压在启动瞬间明显波动传感器读数也跟着抖。后来在程序里加了一个压装队列调度每个工位收到允许启动信号后不能立即动作要先向调度功能块申请调度块根据当前正在压装的工位数量决定是否放行。同一时间最多允许4个工位同时处于压入阶段其余工位最多等待几百毫秒对整个节拍几乎没有影响。这个调度还带来了额外的好处压力尖峰被分散后模拟量通道之间的串扰明显减弱。等待状态下的工位压头停在零件上方不再前进等轮到它时再快速建立压力不会对正在判定的工位造成过多电气干扰。互锁逻辑放在主程序里用SCL写一个简单的计数器和触发数组就行不需要太复杂。4.4 判定结果的落地报警、记录与HMI提示每一轮压装结束后功能块会把综合结果写入一个结果DB内容包括工位号、日期时间、最大压力、终点压力、终点位移、最大位移、判据越界次数、最终OK/NG结果等。NG件在设备层面会触发对应工位气缸复位同时禁止下一个零件进入防止不良品流到下道工序。HMI上按工位显示状态灯NG时弹出对应工位的实时曲线画面方便操作工直接查看是哪个阶段出了问题。还有一个细节我把它放在这里顺便说了所有异常事件都带一个自增的故障序号上位机和HMI查询时用序号区分事件而不是只靠时间。时间可能重复但序号唯一追溯起来更可靠。5. 数据记录与上位机对接把单条曲线变成可追溯的批次报表5.1 到底存什么特征值入库、波形挑着存每个工位一个压装周期如果按80ms采样间隔大约能采到30~50组压力位移点。如果每个OK件都把全部曲线存到PLC里数据量很快就把存储空间吃光了而且查询时一大片全是曲线文件真正的特征数据反而难找。我的做法是分层存储每个工件都存特征值记录包括终点压力、终点位移、峰值压力、判定结果等关键字段这些数据写入1200的数据日志以CSV形式保存在存储卡里每天一个文件。原始压力位移波形只保留两类判定NG的曲线以及随机抽样的几条正常曲线。NG曲线作为质量追溯的证据正常曲线用来日常抽查设备状态防止传感器漂移导致“假OK”。这样存储空间和查询效率都平衡得多。5.2 上位机读取策略别把一个短周期拆成几百次小读设备需要把数据实时传到车间上位机系统方便做批次追溯和SPC统计。1200系列PLC带Profinet接口上位机通过S7协议或Modbus TCP都能访问。这里我踩过一个明显的坑最初上位机为了显示实时曲线每100ms读一次PLC里的当前压力位移值结果CPU通信负载居高不下扫描周期被拉长反而影响采集。后来改成“整段搬运”的方式。PLC在压装过程中先采集到内部的FIFO缓存区压装结束后把整段曲线一次打包到通信接口区上位机每完成一个工件读一次读走之后PLC清空缓存准备下一轮。这样通信次数从几百次降到一个工件一两次现场曲线显示反而更流畅了。如果你的上位机用Modbus TCP注意把多个寄存器一次读完而不是逐字读取效果类似。5.3 参数下发与时间同步容易被忽略的两件小事配方参数管理上我在DB块里建了一个数组以工位号为索引每个元素包含压力上下限、位移上下限、包络线序号等参数。HMI上可以做参数修改但修改前必须先退出自动模式防止运行中参数被误改导致一批零件误判。程序里还要做范围校验比如压力上限不允许小于压力下限、位移行程不允许超过传感器物理量程非法输入直接拒绝不写入DB。时间同步这件事看着小但真出问题会很麻烦。PLC内部时钟如果和上位机时间差几十分钟追溯记录的时间戳就完全错乱了。我在程序中加了时间同步逻辑每天生产启动前由上位机主动向PLC写入当前系统时间PLC再把它写到日期时间变量里供日志记录使用。1200的时钟保持功能在断电时也能维持一段时间日常同步一次基本够用。6. 现场调试踩坑记录从试运行到稳定生产的那几周6.1 地环路干扰压力数据跳变的第一个嫌疑人设备刚开始试运行最明显的现象是某几个工位的压力曲线在压入阶段会出现无规律的尖峰有时候瞬间跳到几十kN然后又落回来。刚开始怀疑传感器坏了换传感器也没用后来用示波器看了信号波形发现是电机启动和电磁阀切换瞬间的噪声叠加到了模拟量信号上。排查到最后问题出在屏蔽层的接地方式上。设备端和PLC端两端都接了地地电位差形成环路反而把设备侧变频器产生的噪声引入了信号线。把传感器屏蔽层改成只在PLC侧单端接地之后尖峰基本消失。后来我形成了一条自己的工作习惯现场布线时所有模拟量屏蔽线都标上“只允许一端接地”并且和动力线分槽走这是压装设备调试里成本最低、收益最高的改进。6.2 磁致伸缩位移传感器的延迟台阶第二个坑出现在位移数据上。磁致伸缩传感器原理不错但它的回波信号本身需要一个响应过程我一开始把采样周期压得太快结果位移曲线在快速移动段表现出一格一格的台阶感明明机械上很顺畅数据读出来却像断断续续。特别是压入速度较快的工位位移值滞后于实际位置导致压力-位移曲线向右偏移包络判定偶尔报警。解决方法是把该工位的传感器更新频率上限纳入选型考虑同时适当降低这些工位的采样期望值让采集周期和传感器最慢刷新周期保持同步。简单说就是不要用5ms的中断去读一个20ms才能刷新一次的传感器。这一条提醒我在选位移传感器时不能只看分辨率和量程响应时间参数才是关键。6.3 包络线被批量报警推翻之后设备进入小批量试生产后客户反映某一批零件的压入力整体比标准曲线低了一截但都在上下限范围内包络线却频频报警。最初我不理解为什么查数据才发现这批零件表面涂了润滑油摩擦力下降压入力确实变小了曲线整体漂移。工艺上这是正常现象但包络线设置得太窄没有考虑到润滑状态的影响。后面和工艺人员重新确认了包络线的公差带宽把试验件分成干态、轻润滑、重润滑三组分别采集曲线再统一定出一个既能覆盖正常工艺波动、又能抓住异常毛刺的包络区域。包络线这个东西不是越紧越好它代表的是“工艺允许的波动范围”必须结合生产实际来定义。从这次之后我在所有压装项目的参数表里都会明确标注“包络线版本号”方便追溯是哪一批次的基准。6.4 掉电丢日志与HMI卡顿最后两个小问题也顺手记录一下。数据日志写入存储卡时如果现场突然断电最后几百条记录可能会丢失。解决办法是把日志分成主日志和备份日志两块区域主日志用于查询备份日志用于断电恢复检查同时建议客户在生产线上加一个UPS只给PLC和HMI供电不接动力设备成本不高但能避免很多数据完整性纠纷。HMI实时曲线卡顿的问题前面提过一部分原因是通信载荷过高。另外还有一个特别容易被忽略的点HMI页面里曲线控件如果同时绑定了12个工位的实时数据区一刷新就是一大片区域全量重绘不管数据到没到齐性能就很差。改成只有“当前选中工位”的数据区参与刷新其余工位显示历史缓存问题就解决了。看起来是HMI的“显示”问题实际上背后还是数据通信和刷新机制的设计问题。压装曲线的监控虽然只是整套设备里的一小块功能但它的数据链路恰好贯穿了传感器选型、PLC程序架构、上位机通信和质量追溯整个流程。如果让我再做一次这个项目我会在方案设计阶段就把响应时间、接地方式、包络线基准这些事提前和工艺方对齐而不是等调试阶段再来补课。西门子1200系列PLC在这个场景里完全撑得住真正考验工程师的往往是背后的工艺理解和现场细节处理能力。希望这些踩坑记录能帮你少走几段弯路。
阅读完成 · 觉得有帮助?