1. 压装工艺场景拆解:先搞清楚程序要解决什么问题
1.1 压装的核心是力-位移关系
做汽车零部件压装设备的朋友应该都有同感:压装机从机械结构上看往往并不复杂,一个机架、一套压装动力头、几个定位工装,但真正能稳定量产、曲线合格率稳定达到99%以上,功夫全在PLC程序里。这几年我陆续做了几套基于西门子 S7-1200 的压装程序,涉及的零件包括传动轴主销、控制臂衬套、转向节球销等,都是典型的过盈配合压装场景。
汽车零部件里大量用到过盈配合:衬套压入臂体、球销压入转向节、油封压入壳体,核心目的就是让两个零件的配合面产生一个可控的过盈量,既要保证连接强度,又不能把零件压裂。工艺卡上写的往往就几个值:压入力多少千牛、最终压装位置多少毫米、保压时间多少秒。但实际上真正决定产品合格与否的,是压装过程中那条“力-位移曲线”。压装曲线在每个阶段的斜率变化,能反映出零件是否涂油、孔径是否合格、有没有漏装垫片、工件是否放正,甚至能看出压装头是否磨损。只看最终力值和最终位置,很多质量问题是发现不了的。
比如衬套压入控制臂,如果孔径偏小,压入力会迅速爬升,最终力值可能超上限;如果孔径偏大,压入力上不去,最终位置还没到,力值就到下限了;如果漏装了一个垫片,曲线中间会出现一个明显的“台阶”。这些都要求程序不能只是“到了设定力就停”,而必须实时监控力和位置的变化关系,在压装过程中动态判定。
1.2 S7-1200 在压装场景中的优势与定位
直接说结论:在压装这种“逻辑不算特别复杂,但对时序和实时性有要求”的场景,1200是性价比非常平衡的选择。
拿它和更便宜的平台比,比如一些小型国产PLC或者西门子200 SMART:200 SMART做普通动作控制没问题,但压装程序的核心数据采集——高速计数、模拟量快速采样、曲线特征点识别——在200 SMART上实现起来非常吃力,程序结构会显得很绕,处理速度也不够。多品种配方管理、PROFINET通信、与MES交互这些需求,200 SMART几乎都要通过扩展模块或第三方网关去绕,工程成本和后期维护成本反而上去了。
再拿它和更高端的平台比,比如S7-1500或者更高级的运动控制器:1500当然更强,如果一条线有十几个压装工位,并且所有曲线都要集中上抛到服务器做大数据分析,那确实该上1500。但单机设备或者两三个工位的小工作站,1500的成本让设备报价完全没有竞争力。1200恰好卡在中间:CPU本体自带高速计数通道,支持200kHz的计数频率,模拟量模块可选到16位,支持PROFINET,DB块做配方和追溯数据足够灵活。对于绝大多数单工位、双工位压装设备,1200的性能完全够用。
选型上我建议起步选 CPU 1214C DC/DC/DC,如果点位和通信需求多,直接上1215C。1214C自带14点数字量输入、10点数字量输出,加上2路模拟量输入,配一个模拟量扩展模块和一个通信模块,基本能覆盖一个压装站的所有I/O需求。CPU的运算速度在压装场景下不是瓶颈,因为压装判定涉及的浮点运算量并不大,真正要注意的是数据采样节奏和程序结构的合理性。
2. 硬件选型和信号采集:数据采得到、采得准,程序才有意义
2.1 位移采集:高速计数器HSC的配置要点
压装位移通常用旋转编码器或光栅尺来测量。1200本体的HSC高速计数器是采集位移最核心的资源,这一块配置得好不好,直接决定后面曲线数据质量。
组态HSC时,我习惯根据现场传感器类型选择计数模式。增量式编码器输出A/B两路正交信号,用“运动/旋转”模式里的A/B正交计数,能同时得到方向和位置;单相脉冲输出的话就选单相计数。有一个细节必须注意:计数频率一定要留余量。1200的HSC单相最大200kHz,A/B正交会有降额。压装机一般压装速度不快,几十kHz足够,但如果设备是伺服电缸直压的高速机,得先算一下脉冲频率再选择编码器线数或分频倍数,避免超频丢脉冲。
举个例子:编码器每转输出1000个脉冲,丝杠导程5mm,那么每毫米对应200个脉冲。压装速度设定为5mm/s,每秒脉冲数就是1000个,距离HSC上限还很远。但如果是伺服电机尾部编码器直接反馈,电机转速3000rpm,每转2500个脉冲,每秒就是125000个脉冲,接近200kHz的极限了,这种场景就要换成电机编码器信号经过驱动器倍频后输出,或者用伺服驱动器的位置反馈值走PROFINET读取,而不是直接接HSC。
HSC的清零时机也要规划好。压装设备通常有工件定位、夹紧动作,如果压头在快进过程中碰到一个硬限位,或者设备上有一个专门用于零位校准的挡块,可以在该信号触发的瞬间对HSC清零。我在程序里习惯在进入“工件检测”状态时做一次HSC清零,而不是等到快进才开始,因为工件定位过程可能已经发生了微小位移,早清零能让基准点更稳定。程序里读HSC当前值,我用的是直接读ID地址的方式,例如ID1000,注意计数值是双字,换算成毫米时计算公式为:位移(mm) = 计数值 / 每毫米脉冲数,用REAL类型运算,并且把除法放在最后做,尽量减少中间过程的精度损失。
2.2 压力采集:模拟量通道选择与滤波的坑
压力传感器多数输出0-10V或4-20mA信号。如果是4-20mA,我在现场强烈建议使用带配电功能的隔离器,或者采用传感器专用隔离电源,避免地环路干扰。压装现场的伺服驱动器、变频器都是强干扰源,压力信号又是模拟量,本来信噪比就比数字量差,再不做隔离,后面排查干扰会非常痛苦。
模拟量模块的选择,我推荐SM1231系列的16位版本,4AI或8AI都可以,看工位数量定。不要图便宜选13位的模块。13位在100kN满量程时分辨率约12N,表面上看够用了,但对曲线平滑度和斜率计算的影响很明显;16位在同样量程下分辨率约1.5N,曲线就漂亮很多,程序做特征点判定也会稳定不少。
这中间最大的坑是“滤波时间”。博途里AI模块默认启用数字滤波,滤波时间设得越大,信号越平滑,但延迟也越大。压装过程中压力是典型的突变信号——压头刚接触到工件的那一瞬间,力值可能从0跳到几十千牛,这个过程往往只有几十毫秒。如果模拟量滤波太强,压力峰值会被“抹平”,程序判到超差时,压头实际上已经多走了零点几毫米。零件报废事小,模具损坏就麻烦了。
我实测下来的做法是:压装程序用的AI通道,滤波设置选“无”或者最小档,宁可程序里自己做滑动平均,也要保证实时性。程序里做一个长度为5的循环数组,每次采样存最新值,取平均值作为当前压力值,平滑效果足够,延迟只有几个扫描周期,完全可控。另外一定要在博途的模块组态里勾选“启用通道诊断”,断线时模块会报错,程序中配合使用“测量范围上限/下限”判断,能快速发现传感器断线或信号超限。
2.3 执行机构选型:伺服直压与液压方案对比
压装动力头的主流方案有三种:气液增压缸、伺服电缸、液压站。气液增压缸成本低,但力控精度差,位置控制基本靠硬限位,只能用在精度要求不高的粗压装。现在新项目越来越多用伺服电缸,力控和位控都方便。1200做伺服定位控制,需要支持PROFINET的伺服驱动器,组态工艺对象“位置轴”,使用标准报文3或报文5。伺服电缸的力值可以直接读驱动器的电流/扭矩值换算,但精度一般不如外部压力传感器,我会建议设备还是保留外部力传感器做质量判定。
液压站方案在老设备上很常见。液压站本身响应慢,压力和位移的采样更依赖外部传感器,程序时序上要更小心。不管是哪种动力方案,控制逻辑上都要保留“速度切换”能力:快进用高速,压装段用低速。我一般压装段速度控制在3~5mm/s。这不是随便拍的——考虑到压力模拟量的转换周期和PLC循环中断的采样周期,速度太快会导致采样点太稀。后面章节我会具体算这个账。
有一个细节很多程序容易忽略:压装接触工件之前的“快进转工进”切换点。如果切换点离工件太远,会浪费节拍;如果太近,速度还没来得及降下来,压头就撞上工件,会产生一个巨大的冲击力峰值,既影响零件质量,也让曲线变得难判。我通常的做法是:快进过程中,当位移到达“接触预判位置”前5mm时,切换到低速工进,然后让程序根据压力阈值来判断实际接触点。
3. 压装程序整体架构:状态机、曲线判定、配方与追溯
3.1 状态机主流程怎么搭才清晰
压装程序最忌讳写成一长串线圈逻辑或者一堆互相耦合的M点。我习惯用状态机的方式来组织主流程,每个状态做明确的一件事,使用一个INT变量保存当前步号,配合CASE指令执行。状态划分大致是这样:
空闲、工件检测、定位夹紧、快进、工进压装、保压、泄压回程、完成或NG标记。
每个状态内部分两段:进入时执行的动作,和满足条件后切换到下一个状态的转移条件。动作写在当前状态内,转移条件也写在本状态的最后,逻辑一眼能看懂。调试的时候,监控一个当前步号变量,就清楚设备走到哪一步了,比查一堆中间继电器的状态高效得多。
状态机必须考虑异常分支。压装过程中如果压力超过上限,或者位移超出行程,程序必须立刻进入报警停止状态。压装机超压继续往下走,轻则零件报废,重则模具和设备损坏。报警停止之后,我习惯让压头先向后退一小段距离(比如5mm),释放残余压力,然后才回到原点,避免在零件卡死状态下强行回程损伤设备。急停信号要直接进PLC的硬件中断或者最快扫描周期里处理,不能放到状态机流转里慢慢判断,这点我在多个项目上都反复验证过。
多工位设备的话,状态机可以扩展成每个工位独立的状态机,工位之间通过共享数据区做互锁。转台式设备还要考虑转台旋转分度与工位动作的配合,互锁条件要非常严格,防止转台还没到位就开始压装。这些逻辑放在状态机框架里,比普通逻辑梯形图好维护很多。
3.2 压力-位移曲线的特征点判定算法
这是压装程序里技术含量最高的部分。光靠“压力到了没有”“位置到了没有”这种单点判断,远远不够,真正的质量判定要做特征点识别。
我在项目里用的是一套工程化的特征点判定方案,不是大数据量的包络线对比,而是提取曲线上的关键特征值,与配方设定值比较。核心特征点包括接触点、平均斜率、峰值力、保压力衰减率。
接触点识别:在工进压装过程中,压力首次连续超过某个小阈值(例如满量程的1%)时,记录当前位置,记为接触点。如果接触点位置与理论值偏差超过公差,说明工件没放到位,或者压头空行程长度不对。这个特征能有效防错,特别是防止漏放工件就开始压装——漏放工件时,压头直接压到工装底板上,接触点位置和压力曲线都会明显异常。
平均斜率检查:在压装中段取一段稳定区域,通常取压装总行程的20%到30%作为计算窗口,计算该窗口内的平均压力/位移斜率,判断落在配方设定的上下限内。斜率过小,多半是过盈量不够或者漏装零件;斜率过大,可能是孔小了、没涂油、材料不对。窗口宽度的选择有讲究:窗口太窄,压力信号的抖动会让斜率值波动很大,容易误报警;窗口太宽,又区分不出局部的质量异常。我一般先根据工艺工程师给出的合格曲线特征来定,再在首件调试时微调。
峰值压力检查:在接近压装终点的窗口内,取最大压力值,判断是否在上下限之间。这个峰值往往出现在压装到位的瞬间,是判定零件是否合格的关键指标。
保压衰减率:保压阶段压力不允许掉太多,一般设一个允许衰减百分比,比如保压起始压力的5%。超过说明弹性回弹过大,或者压装到位后零件还在继续蠕动,尺寸可能不稳定。
这套判定逻辑放在PLC里实现,运算量不大,但要注意采样数据的组织方式。我会在后面实操章节详细说明采样循环怎么搭。对于要求最高的场合,还有包络线判定法:预先从合格件采集一条标准曲线,上下偏移生成包络区间,实际曲线每一点都要落在包络内。这种方案对PLC存储和数据处理能力要求高,在1200上做起来很吃力,我建议放到上位机或HMI脚本里去处理,PLC只负责采集原始曲线数据和发送特征值结果。
3.3 配方管理:多品种换型的数组实现
汽车零部件压装设备几乎都是多品种共线,经常一天换好几次型。1200上做配方最方便的思路就是“一个数组搞定所有配方”。
具体做法如下:先建一个UDT(用户数据类型),包含配方号、产品名、压装目标力、压装目标位置、压力上下限、位移上下限、保压时间、采样窗口数、斜率上下限、接触点位置等字段。然后在数据块里声明一个数组,数组元素类型就是刚才的UDT,一个元素对应一个配方。例如命名“RecipeDB”,声明“ARRAY[0..19] OF RecipeType”,就能存储20个配方,不够就继续扩。
程序运行前,在HMI上选择配方号,PLC里用一个INT变量作为数组下标,把对应数组元素的所有字段搬运到一个“当前配方”结构体里。后续的压装判定、保压时间、报警限值全部从当前配方结构体读取。这样做的好处是:程序逻辑只面对一个“当前配方”,不需要到处判断当前是几号配方,代码简洁很多。
配方切换有个安全细节:不能在设备自动运行过程中切换配方。我通常在HMI配方画面加一个联锁,只有设备处于手动模式和安全门打开状态时,才允许选择配方并写入PLC。另外,调试模式我习惯做一个“微调配方”功能:一边试压,一边在HMI上对当前配方的力限、位限、斜率窗口做小幅调整,调好后一键复制回对应的数组元素。这个功能现场调试时太好用了,不用反复改程序再下载。
配方数据默认存储在PLC的装载存储区,掉电不丢。但如果现场经常改配方,建议定期把配方数据“保存到存储卡”,防止存储区异常导致配方丢失。存储卡还能用来做数据追溯,下一节说。
3.4 压装数据追溯:存储卡CSV与MES上抛
汽车行业客户审核时,对压装参数的可追溯性要求非常高。每次压装的压力峰值、位移、是否合格、产品条码、时间戳,都要有记录。没有上位机的情况下,S7-1200插一张存储卡就能搞定基础追溯。
我的做法是:每次压装完成后,PLC把本次的关键数据拼接成一行CSV格式的文本,例如“配方号,条码,峰值力,最终位移,接触点,判定结果,时间”,通过文件操作指令写入存储卡上的CSV文件。文件名按日期生成,比如“20250608.csv”,一天一个文件。这样即使设备没有连接MES,也能满足基本的追溯审核要求。
要提醒的是,S7-1200的文件操作指令在程序里用起来有点繁琐,要先判断文件是否存在,不存在就创建,存在就追加写入。生产节奏快的设备,要防止写卡操作占用扫描时间过长。我把写卡逻辑放在压装结束之后的独立状态里执行,并且做一个FIFO环形缓冲:先缓存到DB,写卡只在缓存非空且上一次写卡完成时触发,避免阻塞主流程。写卡失败时在HMI上报警,提醒操作员检查存储卡空间。
如果车间有MES系统,可以通过S7-1200的开放式通信(OUC)功能,用TCP或ISO-on-TCP协议把压装结果上抛给上位机。更简单的方式是用S7通信中的PUT/GET,由上位机主动读取PLC数据块里的压装结果。我一般建议PLC只存最近N条记录的环形缓冲,上位机定期来取,既简单又不会占用太多PLC资源。这里有个经验:上抛数据的关键字段和PLC内部使用的字段最好分开,单独建一个“对外接口”DB,避免上位机频繁读写正在运算的数据块导致程序逻辑出现难以排查的偶发问题。
4. 实操记录:从接线到首件试压的完整过程
4.1 上电初检:先确认传感器和执行机构可靠
程序写之前,先把硬件信号确认清楚,这里省时间,后面调试才能顺利。上电后我按固定顺序检查:先看编码器。编码器接到HSC通道后,手动转动压装机构,在博途监控表里观察计数值方向是否正确,如果方向反了,把A/B两相对调,或者在HSC组态里改计数方向。还要检查零点和限位信号:压装机构手动移动,确认上下限位开关、原点挡块信号都能正常翻转,这些是程序运行的安全前提。
然后是压力传感器。接好模拟量后,用标准校验仪给传感器一个已知力值,在博途里组态量程上限,用缩放指令把原始值转成工程单位千牛。转好后在监控表里比对读数,偏差必须在传感器精度范围内。压力传感器的零点也要看:压头不接触任何工件时,程序里读到的力值应该接近0。如果有一个固定偏移,需要在程序中做零点补偿,或者在传感器变送器上做调零。我遇到过传感器安装后本身有预紧力的情况,这时零点补偿必须在程序里做,不能让它影响压装判定。
最后是执行机构。伺服驱动器或变频器先设到本地手动模式,点动压头慢速上下,确认方向、限位、急停都有效,再接回PLC自动控制。这个环节千万别急,手动模式直接验证机械、电气、驱动的联动状态,比在自动程序里排查故障快多了。
4.2 手动单步与空跑联调
程序写好后,从手动单步开始调。HMI上做一个调试画面,每个状态可以单独触发。压头第一次下降时,我习惯把速度设到10%,甚至在HMI上临时改一个很低的工进速度,防止程序逻辑有错误导致压头直接撞模具。先手动验证气缸夹紧、定位销动作、压头升降,再逐步切换到自动模式。
空跑时重点观察“当前压力值”和“当前位移值”的稳定性。如果压头静止时压力数值不停上下飘,多半是屏蔽或接地问题。先把信号线从变频器动力线分离,再检查屏蔽层是否单端接地,最后看传感器供电是否稳定。如果位移值静止时偶尔跳几个数,可能是HSC接线接触不良,或者编码器联轴器松动。这些基础信号不稳定,后面所有曲线判定都是在处理垃圾数据。
空跑过程中还要验证HSC清零时机。我在“工件检测”状态做的清零,要确认每次循环都正常执行,并且没有其他地方也在清HSC导致计数混乱。方法是在HMI趋势画面里观察位移值,手动走一个完整循环,位移曲线应从0开始,回程后再次清零。
4.3 首件试压与参数整定
没有正式工件的时候,先拿废品样块或标准件试压,记录完整的压力位移曲线。这时候要紧盯HMI的趋势画面,观察接触点位置、峰值力、保压衰减是否符合预期。
第一件试压往往问题最多。我遇到过的典型情况:接触点位置比理论值偏了2mm,查下来是工装定位基准和程序里设定的接触预判位置不一致;力值还没到就报警,查下来是模拟量滤波设得太强,压力上升被延迟了;斜率窗口算出来波动大,查下来是窗口取值太窄,压力抖动被放大。这些问题一个一个调,调完第一件,第二件开始就稳定很多。
参数整定的具体顺序:先调接触点触发阈值,再调峰值判定窗口,最后调斜率计算区间。注意每次只改一个参数,观察它对曲线的影响,不要同时动好几个参数,否则出了问题不知道是谁引起的。第二件开始,把整定好的参数固化进配方,连续压三件,确认曲线稳定,再让工艺工程师确认阈值设置与产品合格判定标准一致。
首件试压这个环节,建议一定要请现场工艺工程师到场。程序里的阈值本质上只是工艺要求的映射,只有他们最清楚合格曲线应该长什么样。我有一次遇到一个零件连续试压三件都判定NG,程序看起来判定逻辑没错,后来工艺工程师看了一眼曲线,说这个零件的特征就是压装末端有一段非线性上升,是我把峰值窗口取得太靠前了,窗口往后挪10mm就好了。这种事,闷头调程序是调不出来的。
5. 现场常见问题与排查技巧实录
5.1 压力信号异常的排查
压力信号问题在压装现场排第一。常见现象是压力值在压装过程中瞬间跳变,甚至突然归零。我按这个顺序排查:先确认传感器量程余量,压装机选型时最好留1.5到2倍余量,动态冲击力很容易超过理论值,一旦超量程,传感器输出会被削顶,程序读到的力值反而变小甚至归零,这种情况是最迷惑人的。再查信号线屏蔽和接地,压装现场伺服电机、变频器都是干扰源,信号线必须远离动力线,屏蔽层单端接地。最后查AI模块滤波设置,如果博途里设了大滤波时间,压力突变信号会被严重平滑,判定结果就会迟钝。
压力零漂是另一个高频问题。传感器长时间使用后零位会偏移,设备每天开机第一件事,我建议程序在手动模式做一个“零点校准”功能:压头停在原点、不接触工件时,采集100个压力值取平均,作为当天的零点补偿值存到DB里。这个功能成本低,但能明显减少每天的误报警。
5.2 位移丢脉冲的排查
压装曲线的横坐标是位移,只要丢脉冲,曲线就会出现台阶,所有特征点判定都会失真。排查步骤:先看机械连接,编码器联轴器松动是最常见的原因,压装设备震动大,联轴器螺丝松了会出现偶发丢脉冲;再看接线,HSC信号线接触不良时,计数会时断时续,用手轻拉线缆看监控表数值有没有跳变,能快速定位;最后看频率余量,如果实际脉冲频率接近HSC上限,会偶发计数丢失,这种很难查,需要算一下频率再决定是否降速或换编码器。
程序里可以做一个简单的丢脉冲自检:在压头回程到位后,把实际计数值和理论行程对应的脉冲数比较,偏差超过一定范围就报警提示“编码器信号异常”。这个自检虽然不能定位问题,但能提前发现,避免带着故障生产大量不合格品。
5.3 曲线判定超差误报的排查
曲线合格率很高,但偶尔有一件超差,找不到原因——这种情况最常见的原因不在程序里,而在来料一致性、涂油一致性、定位防错上。程序能做的优化有几个方向:把判定窗口适当放宽,但要在工艺允许范围内;把异常件数据单独存储,配合产品条码,方便工艺回溯;检查接触点判断逻辑,如果接触点误判,后面所有特征点都会偏移。
还有一类误报是采样不同步造成的。压装速度较快时,压力模拟量转换周期和循环中断采样周期如果刚好形成相位差,曲线会呈现规律性波动。这类问题排查时,可以先降低工进速度,如果误报消失,说明是采样密度不足;如果还在,才去检查传感器和机械原因。
5.4 采样周期、速度与曲线质量的匹配经验
最后单独说一下采样周期的问题。S7-1200的OB1扫描周期有几毫秒到十几毫秒,直接在里面做采样,间隔不均匀,曲线上的点会稀疏不均。我的做法是使用循环中断组织块OB30,设置固定10ms周期,在里面读HSC位移值和模拟量压力值,存成一个环形数组。这样采集间隔稳定,数据质量比在OB1里读好不少。
为什么压装速度要控制在3到5mm/s,这里可以算一笔账:循环中断10ms采样一次,5mm/s的速度下,每个采样点的位移间隔是0.05mm,50mm的压装行程能采集1000个点,画出来的曲线非常平滑。如果速度30mm/s,每个采样点间隔0.3mm,30mm的行程只有100个点,曲线就很糙了,斜率窗口和峰值判断都会变得不稳定。做高速压装的同行,要么把采样周期缩短到1ms级别(这对PLC和模拟量模块要求高),要么就得接受曲线点数少的现实,在算法上降低对曲线平滑度的依赖。
还有一个技巧:循环中断里只做采集和缓存,特征点判定放在普通扫描周期里做。因为循环中断里如果做太多浮点运算,可能会影响PLC的实时响应,甚至导致OB超时报警。我最初把曲线判定逻辑直接写在循环中断里,调试时偶尔出现OB30调用超时。后来改成“循环中断采集 + 普通周期计算”的结构,稳定多了。采样数组用环形缓冲,生产节拍快时,把最老的曲线数据覆盖掉,确保实时数据永远是最新的一批。
数据追溯也一样,不要在循环中断里直接写存储卡,PLC写卡的时间不可控,容易卡住中断。我都是把结果缓存在DB里,在压装状态机结束之后统一组织数据、拼接字符串,再执行写卡动作。这样既保证追溯完整,又不影响采样的实时性。
最后分享一个实际感触:压装程序最难的不是把逻辑写出来,而是让它在现场长期稳定运行。刚调试完那几天曲线都很漂亮,真正量产一个月后,机械磨损、传感器漂移、来料波动会一点点冒出来。所以程序里一定要留足够的诊断手段,状态机当前步号、实时曲线、最近异常记录,这些都是现场维护人员救命的工具。我给自己定的标准是:任何一个压装异常发生,操作员不用打电话问电气工程师,看HMI屏幕就能知道设备卡在哪一步、是什么原因导致的。做到这一点,程序才算真正“搞好”了。