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+0 9,9E+09,9E+09,9E+09,9E+09]];
CONST robtarget pPickMould:=[[1943.13,173.08,630.89],[4.66987E-05,0.699 977,-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+0 9,9E+09,9E+09,9E+09,9E+09]];
CONST robtarget
pPrePlace:=[[785.90,-957.40,1722.38],[0.00231652,0.0492 402,-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+0 9,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.6675 17,0.74457,-0.00360206,0.00487631],[-1,-1,2,0],[9E+09,9 E+09,9E+09,9E+09,9E+09,9E+09]];
CONST robtarget pPrePickMould10:=[[530.24,-1703.27,1762.63],[5.07659E-0 5,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,"entrance Conveyer","ready for pick";
DIWait diPlaceReady,1,3,"exit Conveyer","ready 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
offs(pPickMould,0,nCurOffs,100+nCurLayer*nThickness),
v200, z50, tGripper;
MoveJ pPrePickMould, v1000, z50, tGripper;
DIWait diPlaceReady,1,3,"exit Conveyer","ready 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,"entrance Conveyer","ready 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, "exit Conveyer", "ready 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,"exit Conveyer","ready for remove";
nCurLayer:=nLayer;
ENDPROC
PROC rInitAll()
IF diVacuum1=0 THEN
WaitTime 1;
ELSE
ErrWrite "The Rob1 gripper error! " ,"The gripper is not opened!"\RL2:="Check the gripper signal postion ."\RL3:=" 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 "Rob Gripper Signal error ! " ,"Fatal error in Gripper"\RL2:="Check the gripper signal postion ."\RL3:=" change 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 "Rob Gripper Signal error ! " ,"Fatal error in Gripper"\RL2:="Check the gripper signal postion ."\RL3:=" change 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 M oveJ pHome,v500,fine,tGripper\WObj:=wobj0;
ENDIF
IF
bCurrentPos(pPrePickMould,tGripper,50\wobj:=Wobj0)= TRUE THEN