ABB机器人程序实例

更新时间:2023-11-08 17:27:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MODULE MainModule

CONST

robtarget

pHome:=[[1525.42,272.18,1873.69],[4.42963E-05,0.699969,-0.714173,-2.80277E-05],[0,-1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

CONST

robtarget

pPrePickMould:=[[1653.99,272.19,1779.41],[5.83312E-05,0.69997,-0.714172,-3.47922E-05],[0,-1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

CONST

robtarget

pPrePickClapboard:=[[2036.17,-741.24,1235.05],[0.678651,0.73435,-0.0119011,0.00467586],[-1,-2,2,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

CONST

robtarget

pPickMould:=[[1943.13,173.08,630.89],[4.66987E-05,0.699977,-0.714166,-3.24109E-05],[0,-1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

CONST

robtarget

pPickClapboard:=[[1943.19,173.08,620.72],[1.61422E-05,0.699977,-0.714165,-7.62858E-06],[0,-1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

CONST

robtarget

pPrePlace:=[[785.90,-957.40,1722.38],[0.00231652,0.0492402,-0.998779,-0.00310842],[-1,-1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

CONST

robtarget

pPrePlace10:=[[-277.40,-1202.57,1621.17],[0.00183571,-0.0139794,-0.999895,-0.00341408],[-2,-1,-2,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

CONST

robtarget

pPrePlace20:=[[-491.18,-1082.85,1505.90],[0.000663644,0.69408,0.719887,0.00386364],[-2,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

CONST

robtarget

pPlaceMould:=[[-92.13,-2580.19,1171.45],[0.000771646,0.713144,0.701007,0.00383692],[-2,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

CONST

robtarget

pPlaceClapboard:=[[1585.08,1761.04,787.33],[0.00645323,-0.00552996,-0.726358,-0.687263],[0,1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

CONST

robtarget

pPrePlaceClapboard:=[[1017.30,955.85,1443.17],[1.0621E-05,-0.00849593,-0.999964,4.01139E-05],[0,-1,0,0],[9E+09,9E+09,9E+09,9E

+09,9E+09,9E+09]]; CONST

robtarget

pPrePickClapboard10:=[[2257.17,-841.03,1579.56],[0.667517,0.74457,-0.00360206,0.00487631],[-1,-1,2,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]]; CONST

robtarget

pPrePickMould10:=[[530.24,-1703.27,1762.63],[5.07659E-05,0.96161,0.274421,2.37287E-05],[-1,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

CONST num nOffs:=100; PERS num nCurOffs:=100; CONST num nLayer:=0; PERS num nCurLayer:=0; CONST num nThickness:=40; VAR bool bTimeOut:=FALSE; PERS bool bDryCycle:=FALSE; VAR intnum iDryCycle; VAR intnum iResDryCycle; VAR intnum iVacuum; PERS

tooldata

tGripper:=[TRUE,[[0,0,100],[1,0,0,0]],[88.5,[-3.7,-1.4,132.1],[1,0,0,0],5.5,17.831,25.067]];

PROC main() rInitAll;

WHILE TRUE DO

IF siDryCycle=1 or nCurLayer<1 then rPickClapboard; ELSE rPickMould; ENDIF

Waittime 0.2;

ENDWHILE ENDPROC

PROC rPickMould()

DIWait diMouldready,1,3,\Conveyer\for

pick\

DIWait diPlaceReady,1,3,\Conveyer\for

remove\

MoveJ pPrePickMould, v1500, z50, tGripper; IF BitCheck(nCurlayer,1) THEN

nCurOffs:=nOffs; ELSE

nCurOffs:=-nOffs; ENDIF MoveL

offs(pPickMould,0,nCurOffs,100+nCurLayer*nThickness), v1000, z50, tGripper;

MoveL

offs(pPickMould,0,nCurOffs,(nCurLayer-1)*nThickness), v200, fine, tGripper;

GripClose; Decr nCurLayer; MoveL

v200,

offs(pPickMould,0,nCurOffs,100+nCurLayer*nThickness), z50, tGripper;

MoveJ pPrePickMould, v1000, z50, tGripper;

DIWait diPlaceReady,1,3,\Conveyer\for

remove\

MoveJ pPrePlace10, v1500, z10, tGripper;

MoveL offs(pPlaceMould,0,0,100), v1500, z10, tGripper; MoveL pPlaceMould, v200, fine, tGripper; GripOpen;

MoveL offs(pPlaceMould,0,0,100), v200, z10, tGripper;

MoveL pPrePlace10, v1500, z10, tGripper;

MoveJ pPrePickMould, v1500, z10, tGripper; PulseDO\\PLength:=2, doMouldPlaceOK;

ENDPROC

PROC rPickClapboard()

DIWait diMouldready,1,3,\Conveyer\for

pick\

MoveL offs(pPickClapboard,0,0,100), v1000, z50, tGripper;

MoveL pPickClapboard, v200, fine, tGripper; GripClose;

MoveL offs(pPickClapboard,0,0,100) ,v200, z50, tGripper;

MoveL offs(pPickClapboard,0,0,500) ,v1000, z50, tGripper;

MoveL pPrePlaceClapboard, v1000, z10, tGripper;

DIWait diClapboardReady, 1, 3, \Conveyer\\

for remove\

MoveL offs(pPlaceClapboard,-700,-200,250), v1000, z10,

tGripper;

MoveL offs(pPlaceClapboard,00,-10,100), v1000, z10,

tGripper;

MoveL pPlaceClapboard, v100, fine, tGripper;

GripOpen;

MoveL offs(pPlaceClapboard,0,-50,100), v1000, z10,

tGripper;

MoveL offs(pPlaceClapboard,-700,-200,250), v1000, z10,

tGripper;

MoveL pPrePlaceClapboard, v1000, z10, tGripper; PulseDO\\PLength:=1.0, doClapboardPickOK; MoveJ pHome, v1500, fine, tGripper;

PulseDO\\PLength:=1.0, doUnStackOk; WaitTime 2;

DIWait diMouldready,0,3,\Conveyer\for

remove\ nCurLayer:=nLayer; ENDPROC PROC rInitAll()

IF diVacuum1=0 THEN

WaitTime 1;

ELSE

ErrWrite \Rob1 gripper error! \is not opened!\the gripper signal postion .\open the gripper manually and take away the part from gripper.\ Stop; Exit;

ENDIF

rMoveHome; nCurLayer:=nLayer; IDelete iVacuum;

CONNECT iVacuum WITH tLostPart; ISignalDI diVacuum1, 1, iVacuum; ISleep iVacuum;

ENDPROC ROC GripClose()

SetDO doVacuum,1; SetDO doBlow,0; WaitUntil

diVacuum1=1\\MaxTime:=10\\TimeFlag:=bTimeOut;

IF bTimeOut THEN

ErrWrite \Gripper\

a new sensor .\ Stop;

ENDIF

Waittime 0.5; IWatch iVacuum;

ENDPROC PROC GripOpen() ISleep iVacuum;

SetDO doVacuum,0;

PulseDO \\PLength:=2.0, doBlow; WaitUntil

diVacuum1=0

\\MaxTime:=5\\TimeFlag:=bTimeOut;

IF bTimeOut THEN

ErrWrite \Gripper\a new sensor .\ Stop;

ENDIF

Waittime 0.5;

ENDPROC

PROC rMoveHome()

VAR string HomeOffset; CONST num MinX:=-500; CONST num MaxX:=500; CONST num MinY:=-500; CONST num MaxY:=500; CONST num MinZ:=500; CONST num MaxZ:=1200; VAR robtarget ActualPos; VelSet 100,500; AccSet 70, 70;

IF bCurrentPos(pHome,tGripper,50)=TRUE THEN MoveJ pHome,v500,fine,tGripper\\WObj:=wobj0; ENDIF

IF bCurrentPos(pPrePickMould,tGripper,50\\wobj:=Wobj0)= TRUE THEN

MoveJ pHome,v500,fine,tGripper\\WObj:=wobj0; ENDIF IF

bCurrentPos(pPrePickClapboard,tGripper,100\\wobj:=Wobj0)= TRUE THEN

MoveJ pHome,v500,fine,tGripper\\WObj:=wobj0; ENDIF

HomeOffset:=HomeOffset+\ ENDIF

IF ActualPos.trans.y

HomeOffset:=HomeOffset+\:\y,0)+\

ELSEIF ActualPos.trans.y>MaxY THEN

HomeOffset:=HomeOffset+\:\.y,0)+\ ELSE

HomeOffset:=HomeOffset+\ ENDIF

IF ActualPos.trans.z

HomeOffset:=HomeOffset+\:\z,0)+\

ELSEIF ActualPos.trans.z>MaxZ THEN

HomeOffset:=HomeOffset+\z,0)+\ ELSE

HomeOffset:=HomeOffset+\ ENDIF

ErrWrite HomeOffset,\robot manually near homeposition\

WHILE OpMode()<>OP_MAN_PROG DO TPErase;

TPWrite \ !TPErase; Stop; ENDWHILE Stop;

MoveJ pHome,v500,fine,tGripper; !npallet:=4;

ActualPos:=CRobT(\\Tool:=tGripper\\WObj:=wobj0); WHILE OpMode()<>OP_AUTO DO TPErase;

TPWrite \ !TPErase; Stop; ENDWHILE ENDIF ENDIF

VelSet 100,3000; ENDPROC

TRAP tLostPart ErrWrite

\

lost!\

,\

error

in

Gripper\ Stop; ENDTRAP

ENDMODULE

本文来源:https://www.bwwdw.com/article/5xu2.html

Top