KUKA机器人采用KRL(KUKA Robot Language)编程,基于C语言语法,是工业现场实操核心语言,核心规则:
控制机器人关节/末端运动轨迹,运动前必须激活TOOL(工具坐标系)和BASE(工件坐标系),否则默认WORLD(世界坐标系)和TOOL0(法兰默认工具)。
| 指令 | 格式 | 功能说明 | 实操示例 |
|---|---|---|---|
| PTP | PTP <位置> [运动参数]; | 点到点运动,关节插值,速度快,仅保证起止点精度 ★ 适合:大范围移动、回零、上下料 |
PTP {X 100,Y 200,Z 300,A 0,B 90,C 0} Vel=50%; PTP {A1 0,A2 -90,A3 90} Vel=30%;(关节坐标) |
| LIN | LIN <位置> [运动参数]; | 直线运动,末端沿直线轨迹,轨迹精度高 ★ 适合:焊接、搬运、喷涂、精确定位 |
LIN {X 150,Y 200,Z 350} Vel=20% CP;(CP=连续路径) |
| CIRC | CIRC <中间点>,<目标点> [运动参数]; | 圆弧运动,通过「起点+中间点+目标点」确定圆弧 ★ 适合:圆弧焊接、圆弧搬运、圆角打磨 |
CIRC {X 120,Y 200,Z 320}, {X 140,Y 200,Z 300} Vel=15%; |
| SPLINE | SPLINE <位置1>,<位置2>... [运动参数]; | 样条曲线运动,多段轨迹平滑过渡无停顿 ★ 适合:高精度连续轨迹(抛光、涂胶) |
SPLINE {X100,Y200,Z300}, {X120,Y220,Z300} Vel=20%; |
| BRAKE | BRAKE [STOPI]; | 紧急停止,立即减速至停止 STOPI:急停并中断当前程序 |
BRAKE;(普通急停) BRAKE STOPI;(急停+中断程序) |
| HALT | HALT; | 程序暂停,保持当前位置,按启动键继续 ★ 适合:现场人工干预(如上料、检测) |
HALT;(暂停等待工件到位) |
用于控制程序执行顺序,语法与C语言高度兼容,现场常用「条件判断+循环+子程序」实现复杂工艺。
| 指令 | 格式 | 实操示例 |
|---|---|---|
| IF/ELSE/ENDIF | IF <条件> THEN // 执行语句 ELSE // 条件不满足执行 ENDIF; |
IF $IN[1]=TRUE THEN LIN {X100,Y200,Z300} Vel=20%; ELSE HALT; ENDIF; |
| ELSEIF | IF <条件1> THEN // 语句1 ELSEIF <条件2> THEN // 语句2 ENDIF; |
IF $OUT[1]=TRUE THEN PTP Home; ELSEIF $POS_ACT.Z>500 THEN LIN Down; ENDIF; |
| 指令 | 格式 | 适用场景 |
|---|---|---|
| FOR/ENDFOR | DECL INT i; FOR i=初始值 TO 终值 [STEP 步长] // 循环语句 ENDFOR; |
定次循环(如多次上下料、重复焊接) |
| WHILE/ENDWHILE | WHILE <条件> DO // 循环语句 ENDWHILE; |
条件循环(如等待信号、不确定次数作业) |
| 指令 | 格式 | 功能说明 |
|---|---|---|
| DEF/ENDDEF | DEF 子程序名([参数]) // 子程序语句 ENDDEF; |
定义子程序,实现程序模块化(封装取料/放料等动作) |
| CALL | CALL 子程序名([参数]); | 调用子程序,需先定义再调用 |
| 中断声明/激活 | INTERRUPT DECL 中断号 DO 子程序 WHEN 条件; INTERRUPT ON 中断号; |
异常处理(如急停信号、碰撞检测触发程序) |
通过系统变量直接读写I/O,实现机器人与夹具、传送带、焊机等外部设备联动,现场最常用数字量DI/DO。
| 类型 | 格式 | 实操示例 |
|---|---|---|
| 数字输出DO | $OUT[地址]=BOOL值; | $OUT[1]=TRUE;(夹爪闭合) $OUT[2]=FALSE;(传送带停止) $OUT[1..5]=TRUE;(批量设置1-5号DO为高) |
| 数字输入DI | $IN[地址] | IF $IN[3]=TRUE THEN ...(检测工件到位信号) WAIT FOR $IN[4]=TRUE;(等待夹具夹紧信号) |
| 类型 | 格式 | 说明 |
|---|---|---|
| 模拟输入AI | $ANIN[地址] | 读取0-10V/4-20mA,返回REAL型(0.0-100.0) |
| 模拟输出AO | $ANOUT[地址]=REAL值; | 输出0-10V/4-20mA,值范围0.0-100.0 |
| 指令 | 格式 | 功能说明 |
|---|---|---|
| DELAY | DELAY 时间; | 延时等待(单位:秒),夹具动作/信号稳定必用 |
| WAIT FOR | WAIT FOR <条件>; | 等待条件满足后继续,替代固定延时,更智能 |
| WAIT SEC | WAIT SEC 时间; | 固定时间等待,与DELAY功能一致,可互换 |
KUKA机器人运动基于「工具坐标系(TOOL)+工件坐标系(BASE)」,必须提前标定并激活,否则无法保证运动精度,现场一般在示教器可视化标定,无需手动编程。
| 指令 | 格式 | 功能说明 |
|---|---|---|
| BASE | BASE(工件坐标系号); | 激活指定工件坐标系(1-64),BASE0=世界坐标系 |
| TOOL | TOOL(工具坐标系号); | 激活指定工具坐标系(1-64),TOOL0=机器人法兰 |
| $BASE/$TOOL | $BASE={X/Y/Z/A/B/C}; | 直接赋值坐标系数据,适合临时修改 |
| 变量 | 类型 | 功能说明 |
|---|---|---|
| $POS_ACT | POS | 读取末端当前笛卡尔坐标(X/Y/Z/A/B/C),只读 |
| $AXIS_ACT | AXIS | 读取当前关节坐标(A1-A6),只读 |
| $POS_MES | POS | 读取手动示教位置,可赋值给自定义变量 |
KRL语言需先声明(DECL)再使用变量,支持多种数据类型,现场常用「整型、布尔型、位置型、实数型」。
| 数据类型 | 关键字 | 声明示例 | 适用场景 |
|---|---|---|---|
| 整型 | INT | DECL INT i=0; | 计数、I/O地址、循环变量 |
| 布尔型 | BOOL | DECL BOOL flag=FALSE; | I/O状态、条件判断标记 |
| 实数型 | REAL | DECL REAL vel=20.0; | 速度、距离、模拟量数值 |
| 笛卡尔位置型 | POS | DECL POS P1={X100,Y200,Z300,A0,B90,C0}; | 运动位置存储 |
| 关节位置型 | AXIS | DECL AXIS A1={A10,A2-90,A390}; | 关节运动位置存储 |
用于机器人状态检测、安全模式切换、紧急处理,严禁随意修改安全参数,仅调用预定义指令/系统变量。
| 指令/变量 | 格式/用法 | 功能说明 |
|---|---|---|
| STOP_REMOTE | STOP_REMOTE; | 远程停止,切断外部启动信号,进入安全停止 |
| ENABLE_SAFETY | ENABLE_SAFETY; | 激活安全使能(需满足急停复位、安全门关闭) |
| COLLISION | COLLISION ON/OFF; | 开启/关闭碰撞检测,检测到碰撞立即停止 |
| $SAFETY_STATUS | IF $SAFETY_STATUS!=0 THEN ... | 读取安全状态(0=正常,1=急停,2=安全门打开) |
| $MODE_OP | IF $MODE_OP!=1 THEN ... | 读取操作模式(0=手动,1=自动,2=远程自动) |
| $DRIVES_ON | WAIT FOR $DRIVES_ON=TRUE; | 读取伺服使能状态(TRUE=使能开,FALSE=关) |
| 指令 | 格式 | 功能说明 | 实操示例 |
|---|---|---|---|
| MSG | MSG(<文本/变量>); | 示教器屏幕显示提示信息,程序状态提醒 | MSG("焊接完成,请取件"); |
| RET | RET; | 子程序提前返回,退出当前子程序 | IF $IN[1]=FALSE THEN RET; |
| LOAD | LOAD(<载荷号>); | 激活指定载荷数据,更换工具必做 | LOAD(2); // 激活2号夹爪载荷 |
| COMMENT | COMMENT <文本>; | 程序注释,可视化更好,与//功能一致 | COMMENT "取料位置,夹爪闭合"; |
| FLANGE | FLANGE(<法兰号>); | 激活指定末端法兰,多法兰机器人使用 | FLANGE(1); // 激活1号末端法兰 |
| 系统变量 | 数据类型 | 功能说明 | 读写属性 |
|---|---|---|---|
| $OUT[<n>] | BOOL | 数字输出n,控制外部设备 | 可写 |
| $IN[<n>] | BOOL | 数字输入n,检测外部信号 | 只读 |
| $ANIN[<n>] | REAL | 模拟输入n,读取0-10V/4-20mA | 只读 |
| $ANOUT[<n>] | REAL | 模拟输出n,输出0-10V/4-20mA | 可写 |
| $POS_ACT | POS | 末端当前笛卡尔坐标(X/Y/Z/A/B/C) | 只读 |
| $AXIS_ACT | AXIS | 当前关节坐标(A1-A6) | 只读 |
| $MODE_OP | INT | 操作模式(0=手动,1=自动,2=远程) | 只读 |
| $DRIVES_ON | BOOL | 机器人伺服使能状态 | 只读 |
| $SAFETY_STATUS | INT | 机器人安全状态(0=正常) | 只读 |
| $PROG_STATE | INT | 程序运行状态(0=停止,1=运行) | 只读 |
| $POS_MES | POS | 手动示教的位置坐标 | 只读 |