简介:面向库卡机器人开发与调试人员的程序案例文档,从工业现场常见的抓件、移动、等待等动作出发,系统展示KRL程序从初始化、中断保护到工具坐标系设定的完整写法。文档虽只有1个PDF文件,约132KB,却浓缩了库卡机器人编程中的关键范式,包括FOLD结构、BASISTECH INI初始化、WHEN $STOPMESS中断处理、PTP/LIN运动指令及吸盘控制等逻辑。当前已有1579人学习下载,适合正在入门或希望规范程序框架的操作者与电气工程师参考。透过该案例可理解程序主流程如何拆分为多个子程序,并掌握位置变量、速度参数、I/O触发与等待语句的组合方式,进而迁移到自己的工作站项目中,具有较高实用参考价值。
1. 拿到库卡机器人程序案例.pdf,先把它当成程序骨架图
接手旧线体改造时,交接资料里常会出现一份「库卡机器人程序案例.pdf」,里面是前人调试留下的 KRL 源码片段、点位数据和几个子程序模块。它不像操作手册那样讲按钮,而是把“程序怎么搭、运动怎么写、报警怎么处理”直接摊开。对要改节拍、加检测工序或者把机器人从手动模式切到外部自动的工程师来说,这份案例比示教器截图更有信息量。我拿到这类文件,一般不会急着看运动指令,而是先按文件后缀和模块划分重建它的程序骨架,再逐块对照现场 I/O。
2. 库卡机器人编程的程序骨架:先分清 SRC/DAT 与状态机
库卡机器人的程序不是一个独立文件,而是一组文件配合运行。先从文件结构入手,后面读案例里的任何一个子程序都不会跑偏。
2.1 src、dat 和 sub 文件各管什么
库卡机器人程序案例 PDF 里最常见的就是.src和.dat成对出现,两者同名同目录,加载程序时 KSS 会同时读取。.src是执行逻辑,.dat是数据声明区,不能混着写。案例里如果只给了片段,你很难判断哪些是变量、哪些是执行语句,就是因为把文件类型丢了。
我一般会用下面这张表把案例里出现的文件归类:
| 文件后缀 | 用途 | 常见内容 |
|---|---|---|
.src | 程序逻辑 | DEF...END、循环、条件分支、运动指令 |
.dat | 数据声明 | 点位、信号、工具号、速度参数 |
.sub | 可复用子程序 | 复位、取放、报警处理模块 |
.config | 系统配置 | $CONFIG.DAT等,一般不随项目程序走 |
分清这层之后,案例里的“程序清单”就不会只是一串代码,而是能看到它的调用关系。
2.2 主程序加状态机的拆分方式
程序案例 PDF 里经常出现“main、初始化、手动程序、自动程序、复位程序、急停程序、模式切换”这些词,这就是典型的“主程序 + 状态机”组织方式。主程序只负责状态分发,不做具体动作;初始化负责把运动系统、速度、工具坐标系设好;自动程序放节拍逻辑;复位程序处理气缸回到初始位置;急停程序独立成块,不占用主流程扫描时间。
这种拆法的好处是,后面加一个传感器、改一个等待时间,不用翻几百行代码。案例里如果是一个几千行的单程序,多半是现场后续硬塞逻辑的结果,别照抄。
2.3 最小主程序和初始化代码
库卡机器人程序案例里最值得抄的是初始化部分,常见的写法是这样的:
&ACCESS RVP DEF MAIN() ; 1. 运动系统初始化,必须在第一条运动指令前执行 BAS(#INITMOV, 0) ; 2. 调试期把速度压下来 BAS(#VEL_PTP, 20) ; PTP 速度 20% BAS(#VEL_CP, 0.5) ; LIN/CIRC 速度 0.5 m/s PTP HOME ; 3. 主循环分发状态 LOOP IF $IN[1] THEN CALL AUTO() ENDIF IF $IN[2] THEN CALL MANUAL() ENDIF IF $IN[3] THEN CALL RESET_TASK() ENDIF WAIT SEC 0.1 ENDLOOP END这段代码有四个关键点。BAS(#INITMOV, 0)会把 KSS 的运动初始化参数恢复成默认值,漏掉它,后面的运动指令可能直接报错。BAS(#VEL_PTP, 20)和BAS(#VEL_CP, 0.5)是覆盖全局速度上下限的常见做法,现场调试时先压速度比任何高级配置都实际。$IN[1]到$IN[3]是数字量输入信号,接的是按钮或 PLC 输出。最后的WAIT SEC 0.1别删除,不然控制器在空循环里持续满载,程序响应反而变慢。
看完这一段,再回头看案例里的 main 模块,基本就是这个套路,只是把CALL的对象换成现场实际功能。
3. 库卡机器人运动指令:PTP/LIN/CIRC 与点位数据怎么读
程序案例 PDF 里占比最大的就是运动指令。这里有选型逻辑,也有参数陷阱,值得逐条拆。
3.1 三种运动类型的定位
库卡机器人编程中,运动指令就三个主打类型,其余多是变体。案例里每一条运动指令出现的位置都能反映当时的设计意图:
| 指令 | 插补方式 | 适用场景 | 典型写法 |
|---|---|---|---|
PTP | 关节插补 | 大范围移动、回原点、空间无要求 | PTP HOME Vel=100 % PDAT1 |
LIN | 笛卡尔直线 | 直线取放、保持工具姿态 | LIN PICK CONT Vel=1.2 m/s CPDAT1 |
CIRC | 圆弧插补 | 弧焊、倒角过渡 | CIRC P_MID, P_END C_CONT Vel=1.0 m/s CPDAT2 |
PTP路径不可预测,机械臂在姿态变化大时容易撞周边设备;LIN路径有保证,但目标点必须在当前基坐标系可达到空间内;CIRC需要三个点确定一个圆,辅助点和终点不能与起点共线,否则直接报拟合错误。案例里如果某个取放工位用了LIN而不用PTP,通常是为了保证末端姿态在插入动作过程中不偏转。
3.2 E6POS 点位结构中的 X/Y/Z/A/B/C
库卡机器人程序案例中的点位定义基本长这样:
DECL E6POS P_PICK = {X 520.5, Y -180.0, Z 780.0, A 0.0, B -90.0, C 0.0}X/Y/Z是 TCP 相对当前基坐标系的笛卡尔坐标,单位 mm;A/B/C是绕 Z/Y/X 轴的欧拉角,顺序是 Z 到 Y 到 X,焊枪倾斜主要靠 B 角实现。行尾的S/T状态位和坐标状态默认省略,改写案例时尽量保留原始行,不要手工删字段。
我改点位时不手算坐标,而是示教器上把机器人移到目标位置,再用“在线修正”写入,保存后回读确认 A/B/C。库卡机器人示教器使用中这一点最容易被忽略:直接改数值,结果姿态角在零点附近跳变,程序跑起来吓人。
3.3 CONT、Vel 和轨迹圆滑三者的配合
连续轨迹控制直接影响节拍和到位精度,看案例代码时要特别注意 CONT 这个关键字:
; P1 不停顿,直接过渡到 P2 LIN P1 CONT Vel=1.5 m/s CPDAT1 Tool[1] Base[0] LIN P2 C_CONT Vel=1.5 m/s CPDAT2 Tool[1] Base[0] ; 需要精确到位时不带 CONT LIN P3 Vel=0.8 m/s CPDAT3 Tool[1] Base[0]CONT表示当前点不精确停止,轨迹在拐角处圆滑过渡,能省节拍;没有CONT则每个点都先减速到零再启动,定位更准但慢。放料前、插入孔前、气缸动作前的点不要加CONT,其他地方追求节拍可以加。案例里如果整段程序每个点都带CONT,先怀疑是赶节拍,再检查有没有精度需求。Vel对PTP是百分比,对LIN/CIRC是 m/s,最容易写反的是把LIN ... Vel=1.5 %当 m/s 用,结果真机慢得不像话。
提示:凡是案例里写了
Tool[1]的指令,更换末端工具后整条轨迹都要重新验证,不是只改点位。
3.4 工具坐标系与基坐标系决定点位归属
每条运动指令后面的Tool[1] Base[0]决定了这个点相对谁计算。Tool 是法兰盘上工具的中心点,Base 是工件坐标系。换了夹爪,TCP 变了,原来的点位全部要重新示教;工件装夹角度变了,改 Base 比逐个改点更合理。案例 PDF 里如果带了某条线的 TCP 数据,别直接复制到另一台机器人上,坐标系不一致的时候点位差几毫米就是撞机。
4. 库卡机器人程序改造:I/O、中断与外部自动控制
案例程序能不能落地,取决于 I/O 和后处理逻辑,这一部分在 PDF 里往往被压缩成几行,但恰恰是最值钱的。
4.1 把输入输出定义成有意义的信号名
程序案例里到处是裸的$IN[5]、$OUT[3],不改名没办法维护。常见做法是在.dat文件里声明 SIGNAL:
SIGNAL AUTO_START $IN[1] SIGNAL MANUAL_MODE $IN[2] SIGNAL GRIPPER_ON $OUT[5] SIGNAL ALARM_STOP $OUT[20]声明之后,程序里写AUTO_START而不是$IN[1],旁人接手也能直接看懂。注意$IN和$OUT本身是 BOOL,信号定义不要乱加数据类型。模拟量用$ANIN[...]读取后再在程序里换算成浮点数,直接整成“32 个输入都是浮点数”的写法只是给自己挖坑。
4.2 用 INTERRUPT 处理急停和气缸报警
急停、气缸报警这类信号必须异步响应,不能放在 LOOP 里一个个查。库卡机器人编程里对应的机制是 INTERRUPT:
; 声明中断:第 7 路输入变为 TRUE 时跳转到报警处理 INTERRUPT DECL 7 WHEN $IN[7] DO ALARM_HANDLER() INTERRUPT ON 7 DEF ALARM_HANDLER() ; 停住机器人,输出报警标志给 PLC STOP $OUT[20] = TRUE END逻辑说明:INTERRUPT DECL建立信号与子程序之间的关联,WHEN $IN[7] DO检测到上升沿就异步切入。中断是抢占式的,程序无论执行到哪一行都会被插进去,适合急停和人机交互。STOP是减速停在当前轨迹末端,不是瞬间抱闸,真要锁轴还要额外输出联锁给驱动。程序结束前记得INTERRUPT OFF 7,否则下次启动时会有重复声明的问题。
气缸报警在案例里通常会单独占一路输入,与急停分开。处理时先STOP,再做一次完整复位流程,确认夹具压力恢复后才清除报警标志。
4.3 外部自动模式下接收 PLC 指令
旧线改造中碰到最多的是“库卡机器人外部控制模版”,也就是把机器人切到外部自动,由 PLC 发启动指令:
; 外部自动启动握手 $OUT[1] = TRUE ; 告诉 PLC 机器人已就绪 WAIT FOR $IN[1] ; 等 PLC 启动命令 WAIT FOR NOT $IN[1] ; 等命令撤销,避免重复触发 CALL AUTO()WAIT FOR是条件等待,程序在等待时不退出当前模块。外部自动模式下示教器要拨到 AUT 或 EXT 挡位,不能停在 T1。做这条流程时先跟 PLC 工程师对齐$IN信号地址表,再动机器人程序,否则案例里再好的逻辑也跑不通。
5. 验证案例程序:先仿真、再单步、后联动
程序案例不是拿来抄完就上机的,验证顺序决定了停机时间。
5.1 先在电脑上用库卡机器人仿真验证
改写完案例程序后,我一般不会直接开真机全速跑。电脑上装 KUKA.Sim 或 KRC Office 仿真环境,把改好的.src和.dat导入工程,先跑一遍完整路径,看有没有不可达点、奇异点和工具干涉。仿真环境里碰撞只撞虚拟体,可以反复试错,确认路径没问题再进现场。
5.2 示教器单步验证的三种模式
| 模式 | 行为 | 适用阶段 |
|---|---|---|
| T1 手动慢速 | 单步执行一条指令 | 第一次试路径 |
| T2 手动快速 | 连续运行但速度受限 | 观察完整流程和 I/O 时序 |
| AUT/EXT 外部自动 | 全速运行,受 PLC 控制 | 联调 |
T1 模式下逐条执行,点位姿态有问题一眼就能看到。T2 模式跑整段流程,重点看气缸动作和机器人轨迹的先后关系。
5.3 案例落地时的三个坑
第一个坑:案例里的点位是用原工具的 TCP 示教的,换了夹爪不重新示教就运行,第一下撞墙的往往不是机器人,是夹具。第二个坑:WAIT SEC写在带CONT的运动点后,机器人还没真正到位就开始计时,节拍和精度全乱,要在精确到位点后去掉CONT。第三个坑:没做备份就改.dat。程序改崩了想还原,发现原先的 E6POS 数据没存档,手写 X/Y/Z/A/B/C 最容易漏 B 角。改任何程序前先做一次完整的归档备份,这是库卡机器人调试现场的常规动作。
验证顺序固定为:电脑仿真、T1 单步、T2 走流程、外部自动联动。每一步确认信号时序正常后再切下一挡,程序案例才能真正变成线上能跑的程序。
本文还有配套的精品资源,点击获取