VENDOR CHEAT SHEET
One pick-and-place, seven robot languages
The same 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 logical step — read across to see how every controller expresses it.
ABB · RAPID
KUKA · KRL
FANUC · TP
Mitsubishi · MELFA BASIC V
Universal · URScript
Yaskawa · INFORM
Kawasaki · AS
| 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 MAIN | 10 ' Pick and place | def main(): | NOP | .PROGRAM main() |
02 Set default speed | ! speed via v-tag | $VEL.CP = 0.5 | ! speed in motion | 20 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% FINE | 30 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 FINE | 40 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]=ON | 50 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 FINE | 70 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 FINE | 80 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]=OFF | 90 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% FINE | 110 Mov P0 | movej(home, a=1.4, v=1.05) | MOVJ P000 VJ=50.00 | JMOVE home |
12 End of program | ENDPROC | END | /END | 120 End | end | END | .END |
Full programs, side-by-side
The cheat sheet above is line-aligned. Below is each language as a single, copy-pasteable program.
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
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
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
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
Notes
- FANUC TP encodes speed inside each motion line; ABB RAPID uses a separate
v-tag (v500,v1000); KUKA KRL sets a global$VEL.CPbefore motion. - Yaskawa INFORM teaches positions as
P000…P002; FANUC TP usesP[1]…P[3]; URScript expects full pose literals likep[x,y,z,rx,ry,rz]. - Digital outputs differ in syntax but mean the same thing: ABB
SetDO, KUKA$OUT[], FANUCDO[], MELFAM_Out(), URScriptset_digital_out, YaskawaDOUT OT#(), KawasakiSIGNAL n(-n= OFF). - MELFA BASIC V requires line numbers; the others do not.