ABB机器人码垛程序 下载本文

MODULE MainModule

PROC Main() TPErase;

TPReadNum nCount1, \

TPReadNum nJob, \ InitAll; WHILE TRUE DO ReadType; clock2re; PickIF; clock2re; PlaceOF; ENDWHILE ENDPROC

PROC clock2re()

!tempint:=movstat;

IF DI10_1Product0K = 0 or DI10_2TuoPanOK = 0 Then IF tempint<0.25 then ClkStart CLK2; ELSE

ClkStop CLK2; ENDIF Else

ClkStop CLK2; EndIF Endproc

PROC InitAll() MoveHome;

Reset DO10_1JiaZhua; Reset DO10_2YaBan; Reset DO10_3ZhuaOK; Reset DO10_4MaDuoOK;

Waittime 0.5;

bPickPart:=FALSE; ClkReset CLK1; ClkStart CLK1;

ClkReset CLK2;

MoveL Offs(pPick,0,0,400), vFast, z10, tGripper\\WObj:=wobj0; ENDPROC

PROC PickIF()

IF bPickPart = FALSE AND nJob <> 0 AND DI10_1Product0K = 1 THEN

!CalculatePick;

MoveJ Offs(pPick,0,0,400), vFast, z200, tGripper\\WObj:=wobj0;

!MoveLDO Offs(pPick,0,0,100), vFast, z20, tool0\\WObj:=wobj0, DO10_1JiaZhua, 1;

MoveL pPick, vFast, fine, tGripper\\WObj:=wobj0; Close1;

GripLoad LoadFull; Accset 50,50;

HandshakeIF; bPickPart:=TRUE; ConfL\\Off;

MoveJ pAfterPick, vFast, z60, tGripper\\WObj:=wobj0; ENDIF ENDPROC

PROC PlaceOF()

IF DI10_2TuoPanOK = 1 AND bPickPart = TRUE THEN CalculatePlace; ConfL\\Off;

!MoveL Offs(pOver,0,0,nOffsZ2), vFast, z200, tGripper; IF bTag=true then Accset 70, 70;

MoveJ pAbovePlace, vFast, z10, tGripper\\WObj:=wobj0;

else

Accset 90, 90;

MoveJ pAbovePlace, vFast, z10, tGripper\\WObj:=wobj0; Endif

Accset 100,100; ! place first box ConfL\\Off;

!MoveL

Offs(pPlace1,nOffsX1,nOffsY1,nOffsZ1),vTurn,z10,tGripper\\WObj:=wobj0; MoveL pPlace1, vMiddle, fine, tGripper\\WObj:=wobj0; Open1; ConfL\\Off;

MoveL Offs(pPlace1,0,0,nOffsZ1),vMiddle,z5,tGripper\\WObj:=wobj0; GripLoad LoadEmpty; Accset 100,100; bPickPart:=FALSE; Incr nCount1;

HandshakeOF;

MoveJ pAbovePick, vFast, z200, tGripper\\WObj:=wobj0;

MoveL Offs(pPick,0,0,400), vFast, z10, tGripper\\WObj:=wobj0; !MoveJ pHome, vFast, z200, tGripper; ENDIF ENDPROC

PROC HandshakeIF() IF nJob=1 THEN

!Set DO10_3ZhuaOK; ENDIF

IF nJob=2 THEN

!Set DO10_3ZhuaOK; ENDIF

ENDPROC

PROC HandshakeOF()

IF (nCount1=40 and nJob =1) or (nCount1=80 and nJob =2) THEN Set DO10_4MaDuoOK;

WaitDI DI10_2TuoPanOK, 0;

SetDO\\SDelay:=0.5,DO10_4MaDuoOK,0; nCount1:=0; ClkStop CLK1; ClkStop CLK2; TPErase;

nCycleCount:=ClkRead(CLK1); Waitingtime:=ClkRead(CLK2);

TPWrite \

TPWrite \ ClkReset CLK2;