干过自动化产线的兄弟都知道,滚珠分拣是个看似简单实则暗藏玄机的活。去年我在东莞某轴承厂搞的S7-300分拣系统,上线第一天就遇到了光电传感器误触发导致良品率暴跌40%的惨案。今天咱们就掰开揉碎讲讲,怎么用PLC把这套系统玩出花来。
核心需求就三点:第一要准,直径公差±0.1mm的滚珠必须精确分类;第二要快,从检测到分拣动作必须在200ms内完成;第三要稳,在车间各种电磁干扰、机械振动环境下还得保证99.9%的可靠率。听起来简单?等你遇到气缸卡死、信号干扰、热胀冷缩这些妖魔鬼怪时就明白了。
光电传感器必须选背景抑制型的,普通漫反射型在金属滚珠场景下就是个笑话。我们对比过OMRON E3Z和SICK GT系列,最终选了SICK GTB6-N1111,这玩意儿有三个致命优势:
警告:千万别图便宜用杂牌传感器,我们吃过亏——某国产传感器在电机启动时误触发率高达15%,后来发现是电源滤波电容偷工减料。
分拣气缸的选型讲究三个参数:
气路设计有个骚操作:在气缸进出口加装快速排气阀。这样既提高动作速度,又能防止气压波动导致的位置漂移。气管要用PU材质,尼龙管在振动环境下容易接头松动。
原始代码里的TON定时器虽然能用,但在高速场景下有更优解。这是我们优化后的中断处理方案:
stl复制// OB35组织块(10ms周期执行)
L "光电信号" // I0.0
JC Detect // 跳转检测程序
BEU // 中断返回
Detect: L "直径信号" // I0.1
= "传送带A" // Q4.0
L "直径信号"
NOT
S "分拣气缸" // Q4.1
L S5T#50MS // 比TON更精确
SD "气缸定时"
这个方案有三处改进:
现场干扰处理不能只靠硬件,软件滤波必须双管齐下。这是我们验证有效的复合滤波算法:
stl复制// 在FB功能块中实现的移动平均+阈值滤波
#Sample_Array : ARRAY[0..4] OF BOOL // 5次采样窗口
#Valid_Count : INT // 有效信号计数
// 每次OB35执行时更新
IF "光电信号" THEN
#Sample_Array[#Pointer] := 1
#Valid_Count += 1
ELSE
#Sample_Array[#Pointer] := 0
END_IF
// 判断逻辑(3/5表决)
IF #Valid_Count >= 3 THEN
"有效触发" := TRUE
ELSE
"有效触发" := FALSE
END_IF
分拣系统最怕信号干扰,我们的接地方案经过三次迭代:
具体实施要点:
24V电源配置有讲究:
我们吃过亏:曾经把光电传感器和气缸电磁阀接同一路电源,结果气缸动作时传感器电压跌到18V导致误检测。后来改用西门子SITOP PSU8600分路供电,问题迎刃而解。
好的HMI不是界面多炫,而是能让操作工一眼看出问题。我们的报警分级策略:
关键技巧:每个报警点都关联帮助文档,按F1直接弹出故障处理流程图。这招让我们的平均故障处理时间从45分钟降到8分钟。
别学那些花里胡哨的数据分析,产线要的是实用功能:
用WinCC的全局脚本实现一个简易SPC统计:
vbs复制Sub Archive_Data()
Dim badCount, totalCount
badCount = HMIRuntime.Tags("Bad_Parts").Read
totalCount = HMIRuntime.Tags("Total_Parts").Read
If totalCount > 0 Then
HMIRuntime.Tags("Yield_Rate").Write (totalCount - badCount)/totalCount*100
End If
End Sub
那个热胀冷缩的坑我们是这么填的:
stl复制L "温度值" // PIW256
ITD // 整数转双整
DTR // 转浮点数
L 25.0
-R // T-25
L 0.000023
*R // 23ppm/℃
L 1.0
+R // 1+αΔT
L "测量直径"
/R // D_actual = D_measured/(1+αΔT)
T "补偿后直径" // MD100
产线振动会导致两个致命问题:
我们在控制柜加了加速度传感器监测振动,当振幅超过0.5g时触发预警。这个值是用手机APP测了三天振动频谱后确定的阈值。