TRYPLC
QC26
VENDOR CHEAT SHEET

One pick-and-place, seven robot languages

One 12-step pick-and-place cycle written in ABB RAPID, KUKA KRL, FANUC TP, Mitsubishi MELFA BASIC V, Universal Robots URScript, Yaskawa INFORM and Kawasaki AS. Each row is one step of the cycle, so read across a row to see how each controller says the same thing. The listings show the program body; the files you load onto a controller carry extra header and position data, covered in the notes at the bottom.

Step
ABB
RAPID
KUKA
KRL
FANUC
TP
Mitsubishi
MELFA BASIC V
Universal
URScript
Yaskawa
INFORM
Kawasaki
AS
01
Program header
PROC main()DEF main()/PROG MAIN10 ' Pick and placedef main():NOP.PROGRAM main()
02
Set default speed
! speed via v-tag $VEL.CP = 0.5 ! speed in motion20 Spd 100 # speed in motion'speed in motion SPEED 50 ALWAYS
03
Move joint to home
MoveJ home, v1000, fine, tool0; PTP home J P[1] 100% FINE30 Mov P0 movej(home, a=1.4, v=1.05)MOVJ P000 VJ=50.00 JMOVE home
04
Move linear to pick
MoveL pick, v500, fine, tool0; LIN pick L P[2] 500mm/sec FINE40 Mvs P1 movel(pick, a=1.2, v=0.25)MOVL P001 V=100.0 LMOVE pick
05
Close gripper (DO ON)
SetDO doGrip, 1; $OUT[1] = TRUE DO[1]=ON50 M_Out(1) = 1 set_digital_out(1, True)DOUT OT#(1) ON SIGNAL 1
06
Wait 0.5 s
WaitTime 0.5; WAIT SEC 0.5 WAIT 0.50(sec)60 Dly 0.5 sleep(0.5)TIMER T=0.50 TWAIT 0.5
07
Retract to home
MoveL home, v1000, fine, tool0; LIN home L P[1] 1000mm/sec FINE70 Mvs P0 movel(home, a=1.2, v=0.5)MOVL P000 V=100.0 LMOVE home
08
Move linear to place
MoveL place, v500, fine, tool0; LIN place L P[3] 500mm/sec FINE80 Mvs P2 movel(place, a=1.2, v=0.25)MOVL P002 V=100.0 LMOVE place
09
Open gripper (DO OFF)
ResetDO doGrip; $OUT[1] = FALSE DO[1]=OFF90 M_Out(1) = 0 set_digital_out(1, False)DOUT OT#(1) OFF SIGNAL -1
10
Wait 0.5 s
WaitTime 0.5; WAIT SEC 0.5 WAIT 0.50(sec)100 Dly 0.5 sleep(0.5)TIMER T=0.50 TWAIT 0.5
11
Return to home
MoveJ home, v1000, fine, tool0; PTP home J P[1] 100% FINE110 Mov P0 movej(home, a=1.4, v=1.05)MOVJ P000 VJ=50.00 JMOVE home
12
End of program
ENDPROCEND/END120 EndendEND.END

Full programs, side-by-side

The same cycle again, one block per language, so you can read or copy a whole program at once.

ABB
RAPID
PROC main()
  ! speed via v-tag
  MoveJ home, v1000, fine, tool0;
  MoveL pick, v500, fine, tool0;
  SetDO doGrip, 1;
  WaitTime 0.5;
  MoveL home, v1000, fine, tool0;
  MoveL place, v500, fine, tool0;
  ResetDO doGrip;
  WaitTime 0.5;
  MoveJ home, v1000, fine, tool0;
ENDPROC
DEF main()
  $VEL.CP = 0.5
  PTP home
  LIN pick
  $OUT[1] = TRUE
  WAIT SEC 0.5
  LIN home
  LIN place
  $OUT[1] = FALSE
  WAIT SEC 0.5
  PTP home
END
/PROG MAIN
  ! speed in motion
  J P[1] 100% FINE
  L P[2] 500mm/sec FINE
  DO[1]=ON
  WAIT 0.50(sec)
  L P[1] 1000mm/sec FINE
  L P[3] 500mm/sec FINE
  DO[1]=OFF
  WAIT 0.50(sec)
  J P[1] 100% FINE
/END
Mitsubishi
MELFA BASIC V
10 ' Pick and place
20 Spd 100
30 Mov P0
40 Mvs P1
50 M_Out(1) = 1
60 Dly 0.5
70 Mvs P0
80 Mvs P2
90 M_Out(1) = 0
100 Dly 0.5
110 Mov P0
120 End
Universal
URScript
def main():
  # speed in motion
  movej(home, a=1.4, v=1.05)
  movel(pick, a=1.2, v=0.25)
  set_digital_out(1, True)
  sleep(0.5)
  movel(home, a=1.2, v=0.5)
  movel(place, a=1.2, v=0.25)
  set_digital_out(1, False)
  sleep(0.5)
  movej(home, a=1.4, v=1.05)
end
Yaskawa
INFORM
NOP
'speed in motion
MOVJ P000 VJ=50.00
MOVL P001 V=100.0
DOUT OT#(1) ON
TIMER T=0.50
MOVL P000 V=100.0
MOVL P002 V=100.0
DOUT OT#(1) OFF
TIMER T=0.50
MOVJ P000 VJ=50.00
END
Kawasaki
AS
.PROGRAM main()
  SPEED 50 ALWAYS
  JMOVE home
  LMOVE pick
  SIGNAL 1
  TWAIT 0.5
  LMOVE home
  LMOVE place
  SIGNAL -1
  TWAIT 0.5
  JMOVE home
.END

Three more instructions, seven spellings

The pick-and-place cycle above never needs an arc, a blended corner or a subroutine. This table shows those three in each language. Names such as pVia, p1 and PICK are placeholders.

Instruction
ABB
RAPID
KUKA
KRL
FANUC
TP
Mitsubishi
MELFA BASIC V
Universal
URScript
Yaskawa
INFORM
Kawasaki
AS
Circular move through a via pointMoveC pVia, pEnd, v200, z10, tool0;CIRC P_VIA, P_ENDC P[3] P[4] 200mm/sec FINEMvr P2, P3, P4movec(p_via, p_end, a=1.2, v=0.25)MOVC P003 V=80.0 MOVC P004 V=80.0 MOVC P005 V=80.0C1MOVE via C2MOVE arc_end
Blend past a point instead of stoppingMoveL p1, v500, z10, tool0;$APO.CDIS = 10 LIN P1 C_DISL P[1] 500mm/sec CNT50Cnt 1movel(p1, a=1.2, v=0.25, r=0.01)MOVL P001 V=100.0 PL=3ACCURACY 10 ALWAYS
Call a subroutinePick;PICK()CALL PICKGoSub *PICKpick()CALL JOB:PICKCALL pick
  • FANUC shows one circular instruction over two lines, via point then end point. Yaskawa needs three MOVC points in a row (start, via, end). Kawasaki splits the arc into C1MOVE to the via point and C2MOVE to the end.
  • ABB z10, KUKA C_DIS, UR r and Kawasaki ACCURACY are distances, in millimetres except for UR, which uses metres. FANUC CNT runs from 0 to 100 and is not a distance. Yaskawa PL is a level from 0 to 8 whose distances are set in parameters. MELFA Cnt 1 turns continuous-path motion on for the moves that follow.
  • MELFA GoSub jumps to a label in the same program and comes back on Return; CallP runs another program. FANUC, Yaskawa and Kawasaki call a separate program by name. ABB, KUKA and URScript call a routine defined in the program or module.

Notes

  • FANUC TP puts the speed on each motion line, and ABB RAPID gives each move its own speed argument (v500, v1000). KUKA KRL sets $VEL.CP once, in m/s, but it only applies to LIN and CIRC; PTP speed comes from $VEL_AXIS, a percentage per axis.
  • Yaskawa INFORM stores positions as P000 to P002, FANUC TP as P[1] to P[3]. In URScript, home, pick and place are variables holding pose values such as p[x, y, z, rx, ry, rz], in metres and a rotation vector in radians.
  • Digital outputs look different and do the same job: ABB SetDO, KUKA $OUT[], FANUC DO[], MELFA M_Out(), URScript set_digital_out, Yaskawa DOUT OT#(), Kawasaki SIGNAL n (SIGNAL -n switches it off).
  • MELFA BASIC V programs carry line numbers; the other six languages do not need them in the source.
  • On the pendant every FANUC TP line has a line number. The /PROG and /END lines come from the .LS text file, which also has /MN and /POS sections and ends each line with a semicolon.
  • Comment markers: ! in ABB RAPID and FANUC TP, ; in KUKA KRL and Kawasaki AS, # in URScript, and a leading apostrophe in MELFA BASIC and Yaskawa INFORM.