☰
西门子1200 PLC在压装设备中的压力位移数据采集与判定系统实践
2026/10/21 10:18:03 网站建设 项目流程

去年年底,我陪客户调试一条汽车零部件压装自动线,设备刚通上电的那几天,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在这个场景里完全撑得住,真正考验工程师的,往往是背后的工艺理解和现场细节处理能力。希望这些踩坑记录,能帮你少走几段弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询