1. 项目背景与核心挑战
在工业自动化领域,机械手与CNC机床的协同作业已经成为现代智能工厂的标配。这次我们面对的是一条包含ABB机械手、两台CNC加工中心和一条自动输送线的典型产线布局。这种配置在汽车零部件、3C产品外壳加工等场景中非常常见,但真正实施起来会遇到几个关键挑战:
首先是空间约束问题。机械手需要在两台CNC和输送线之间穿梭作业,工作空间非常紧凑。就像在拥挤的厨房里同时操作两个灶台和一个洗碗机,稍有不慎就会发生碰撞。我们实测发现,两台CNC之间的安全间距只有1.2米,而机械手完全展开时臂展达到1.8米。
其次是时序协调难题。CNC加工周期不稳定(±15%波动),输送线节拍又要与机械手动作同步。这就像指挥一个节奏不固定的乐队,每个乐器的节拍器走得都不太一样。
最棘手的是坐标系的动态校准。由于CNC夹具磨损、温度变形等因素,工件坐标系每月会产生0.3-0.5mm的漂移。传统做法是定期停机手动校准,但这会严重影响OEE(设备综合效率)。
2. 工件坐标系的重构方案
2.1 三点标定法的优化实现
常规的工件坐标系标定采用三点法,即定义原点、X方向点和XY平面点。但在实际产线中,我们发现直接使用CNC夹具上的机械基准面存在两个问题:
- 基准面反光率低,激光传感器识别不稳定
- 夹具磨损会导致基准面位置失真
我们的解决方案是:
rapid复制MODULE WorkObject
! 使用特制反光片位置作为标定点
VAR robtarget p10 := [[500, 200, 300], [1, 0, 0, 0], [0,0,0,0], [9E9,9E9,9E9,9E9,9E9,9E9]]; ! 原点
VAR robtarget p20 := [[600, 250, 290], [1, 0, 0, 0], [0,0,0,0], [9E9,9E9,9E9,9E9,9E9,9E9]]; ! X方向
VAR robtarget p30 := [[550, 300, 310], [1, 0, 0, 0], [0,0,0,0], [9E9,9E9,9E9,9E9,9E9,9E9]]; ! XY平面
PROC CreateWObj()
! 定义工件坐标系时保留原始夹具基准
WObjdata wobj_CNC1 := [FALSE, TRUE, "", [[0,0,0],[1,0,0,0]], [[500,200,300],[1,0,0,0]]];
! 三点法计算时使用反光片位置
CalcJointT wobj_CNC1, p10, p20, p30;
! 验证旋转矩阵正交性
IF ABS(VectorDot(wobj_CNC1.u_frame.rot.q1,wobj_CNC1.u_frame.rot.q2)) > 0.01 THEN
ErrWrite "坐标系不正交,请手动校准",1;
ENDIF
ENDPROC
关键技巧:在CNC夹具上粘贴3M Scotchlite™反光片(型号7610),其反射率是金属表面的8倍。标定时使用激光传感器定位,精度可达±0.02mm。
2.2 动态补偿机制
为解决坐标系漂移问题,我们开发了基于均值算法的自动补偿方案:
- 每次上下料时记录实际抓取位置与理论位置的偏差
- 计算最近20次操作的移动平均值
- 当连续3次均值超过阈值(0.1mm)时自动更新坐标系
rapid复制VAR num offsetX{20};
VAR num offsetY{20};
VAR num idx := 1;
FUNC bool UpdateWObj()
! 计算均值
meanX := ArraySum(offsetX)/ArrayLen(offsetX);
meanY := ArraySum(offsetY)/ArrayLen(offsetY);
! 判断是否需要更新
IF ABS(meanX) > 0.1 OR ABS(meanY) > 0.1 THEN
wobj_CNC1.oframe.trans.x := wobj_CNC1.oframe.trans.x + meanX;
wobj_CNC1.oframe.trans.y := wobj_CNC1.oframe.trans.y + meanY;
RETURN TRUE;
ENDIF
RETURN FALSE;
ENDFUNC
3. 安全避让系统的实现细节
3.1 空间分区管理
将工作空间划分为三个区域:
- 绿色区域:机械手自由运动区
- 黄色区域:需减速通过的缓冲区
- 红色区域:绝对禁止进入的危险区
rapid复制VAR zonesata safeZone := [
[100,500,200,600,300,700], ! CNC1工作区
[700,1100,200,600,300,700], ! CNC2工作区
[0,1200,0,800,0,500] ! 全局边界
];
FUNC bool CheckCollision(robtarget pos)
! 检查是否进入红色区域
FOR i FROM 1 TO 3 DO
IF pos.trans.x > safeZone{i}.x_min AND pos.trans.x < safeZone{i}.x_max AND
pos.trans.y > safeZone{i}.y_min AND pos.trans.y < safeZone{i}.y_max AND
pos.trans.z > safeZone{i}.z_min AND pos.trans.z < safeZone{i}.z_max THEN
RETURN TRUE;
ENDIF
ENDFOR
RETURN FALSE;
ENDFUNC
3.2 实时避障策略
当CNC门开启时触发二级防护策略:
- 立即停止当前直线运动(MoveL)
- 切换为关节运动模式(MoveJ)退回安全位置
- 等待门关闭信号后重新规划路径
rapid复制PROC SafeRetract()
! 紧急停止当前直线运动
StopMove;
! 获取当前关节角度
VAR jointtarget currJoints;
currJoints := CJointT();
! 计算安全退回位置
VAR jointtarget safeJoints := [[0,0,0,0,0,0],[0,0,0,0,0,0]];
safeJoints.robax.rax_1 := currJoints.robax.rax_1 - 10;
safeJoints.robax.rax_2 := currJoints.robax.rax_2 + 15;
! 关节空间避让
MoveJ safeJoints, v1000, z50, tool1;
! 等待安全信号
WaitDI di_CNC_DoorClosed, 1;
ENDPROC
血泪教训:曾经因为没加StopMove直接执行MoveJ,导致机械臂在直线运动末段突然变向,引发剧烈震动。现在一定会先停止当前运动再切换模式。
4. 标准化编程实践
4.1 模块化动作封装
将常见操作封装成可复用的函数模块:
rapid复制FUNC bool GripperOperation(bool bClose)
! 气动夹具控制
IF bClose THEN
SetGO go_GripClose, 1;
WaitTime 0.5;
RETURN CheckGripPressure() > 50; ! 压力检测
ELSE
SetGO go_GripOpen, 1;
WaitTime 0.3;
RETURN TRUE;
ENDIF
ENDFUNC
FUNC bool LoadCNC(num nStation)
! 标准上料流程
MoveJ pApproach{nStation}, v2000, fine, tool1;
IF NOT GripperOperation(FALSE) THEN RETRY;
MoveL pPick{nStation}, v500, fine, tool1;
IF NOT GripperOperation(TRUE) THEN RETRY;
MoveL pLift{nStation}, v300, fine, tool1;
MoveJ pApproach{nStation}, v2000, fine, tool1;
RETURN TRUE;
ENDFUNC
4.2 状态监控框架
建立统一的状态管理机制:
rapid复制VAR errdata errLog{50};
VAR num errIdx := 1;
PROC MonitorThread()
WHILE TRUE DO
! 检查各子系统状态
IF DIRead(di_EmergencyStop) = 1 THEN
errLog{errIdx} := ["急停触发",1,CLKRead()];
errIdx := errIdx MOD 50 + 1;
StopAll;
ENDIF
! 检查气路压力
IF AINRead(ai_Pressure) < 0.4 THEN
errLog{errIdx} := ["气压不足",2,CLKRead()];
errIdx := errIdx MOD 50 + 1;
ENDIF
WaitTime 0.1;
ENDWHILE
ENDPROC
5. 性能优化技巧
5.1 运动轨迹平滑处理
通过优化过渡区参数减少停顿时间:
rapid复制! 传统写法 - 每个点都精确停止
MoveL p1, v500, fine, tool1;
MoveL p2, v500, fine, tool1;
! 优化写法 - 使用区域过渡
MoveL p1, v500, z10, tool1; ! z10表示10mm过渡区
MoveL p2, v500, z20, tool1;
实测表明,在连续10个点的路径中,优化写法可节省约0.8秒周期时间。
5.2 双CNC并行处理
利用后台任务实现并行操作:
rapid复制TASK PERS tasks all_tasks{2} := [["T_ROB1"], ["T_BG"]];
PROC Main()
! 主任务处理CNC1
ActTask all_tasks{1};
Path_CNC1;
! 后台任务处理输送线
ActTask all_tasks{2};
Path_Conveyor;
! 同步点
WaitSyncTask all_tasks;
ENDPROC
6. 故障诊断手册
6.1 常见问题排查表
| 故障现象 | 可能原因 | 排查步骤 |
|---|---|---|
| 抓取位置偏移 | 1. 工件坐标系漂移 2. 夹具定位销磨损 |
1. 执行三点法校准 2. 检查夹具磨损量 |
| 避让动作异常 | 1. 区域参数错误 2. 信号延迟 |
1. 验证safeZone数据 2. 检查DI信号响应时间 |
| 周期时间波动 | 1. 过渡区设置不当 2. 气路响应慢 |
1. 优化zone参数 2. 检查电磁阀响应 |
6.2 诊断工具推荐
- RobotStudio中的PathAnalyzer:可视化分析运动轨迹
- 示教器的IO Monitor:实时监控信号状态
- FlexLogger数据记录:采集压力、位置等模拟量
这套系统实施后,设备综合效率(OEE)从78%提升到92%,故障停机时间减少60%。最大的收获是认识到:在工业自动化领域,可靠性永远比炫技更重要。下一步计划引入数字孪生技术,在虚拟环境中预演各种异常工况,进一步优化安全策略。
