Hi
Try this.
Best regards
Marcel
MODULE Module1
! data
! Value
VAR num nValueX;
VAR num nValueY;
VAR num nValueZ;
! Distance
VAR num nDistance;
! actual position
PERS robtarget pActual:=[[0,0,0],[1,0,0,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
! tool
PERS tooldata tEndEffector:=[TRUE,[[0,0,0],[1,0,0,0]],[30,[0,0,0],[1,0,0,0],10,10,10]];
PROC main()
! main program flow
! initialisation
SetDO doStart,0;
SetDO doDist050,0;
SetDO doDist100,0;
SetDO doDist200,0;
SetDO doPlusX,0;
SetDO doMinusX,0;
SetDO doPlusY,0;
SetDO doMinusY,0;
SetDO doPlusZ,0;
SetDO doMinusZ,0;
nValueX:=0;
nValueY:=0;
nValueZ:=0;
nDistance:=0;
! wait for start
WaitDI diStart,1;
SetDO doStart,1;
! read actual position
pActual:=CRobT(Tool:=tEndEffectorWObj:=wobj0);
! read buttons
IF diButtonDist050=1 THEN
SetDO doDist050,1;
nDistance:=50;
ELSEIF diButtonDist100=1 THEN
SetDO doDist100,1;
nDistance:=100;
ELSEIF diButtonDist200=1 THEN
SetDO doDist200,1;
nDistance:=200;
ENDIF
IF diButtonPlusX=1 THEN
SetDO doPlusX,1;
nValueX:=nDistance;
ELSEIF diButtonMinusX=1 THEN
SetDO doMinusX,1;
nValueX:=-nDistance;
ELSEIF diButtonPlusY=1 THEN
SetDO doPlusY,1;
nValueY:=nDistance;
ELSEIF diButtonMinusY=1 THEN
SetDO doMinusY,1;
nValueY:=-nDistance;
ELSEIF diButtonPlusZ=1 THEN
SetDO doPlusZ,1;
nValueZ:=nDistance;
ELSEIF diButtonMinusZ=1 THEN
SetDO doMinusZ,1;
nValueZ:=-nDistance;
ENDIF
! move to position
IF nValueX<>0 OR nValueY<>0 OR nValueZ<>0 THEN
MoveL Offs(pActual,nValueX,nValueY,nValueZ),v300,fine,tEndEffector;
ENDIF
! wait for releas of start button
WaitDI diStart,0;
ENDPROC
ENDMODULE