库卡机器人KRL程序案例解析:中断、信号联锁与吸盘抓件轨迹

发布时间:2026/9/19 12:39:34
库卡机器人KRL程序案例解析:中断、信号联锁与吸盘抓件轨迹 简介面向库卡机器人开发者的程序案例PDF文档聚焦机器人编程中的初始化、移动、抓件、中断处理等典型操作。内容基于库卡专有语言展开完整展示了DEF、FOLD、WHEN、DO等指令的用法以及TOOL、BASE、FRAME等关键设置适合初学者理解程序结构并参考编写自己的控制逻辑。整个压缩包仅含1个PDF文件大小132KB轻量便于查阅。文档还涉及BASISTECH INI、PDAT/FDAT、以及吸盘抓件和信号等待等工程细节可作为实际项目中编写与调试库卡程序的实用参考。目前已有1579人学习适合需要快速上手或系统梳理库卡机器人程序案例的开发者。1. 库卡机器人程序要先把中断当成主线来读拿到这份《库卡机器人程序案例.pdf》最容易犯的错是从第一行运动指令开始逐条翻译。实际上这段送料工位吸盘抓件程序的价值在于它把“信号何时生效”和“轨迹怎么走”拆成了两条可以独立排查的线。主程序main_R2()从初始化、信号复位、中断登记开始然后根据$IN[1]工位允许信号决定是否进入Pick()抓完件再等待真空反馈和放件请求最后走Place()。适合正在学库卡机器人编程和库卡机器人仿真的人也适合需要快速定位生产现场掉件、误吹气和点位漂移问题的调试工程师。先读中断声明再读运动块这个顺序比逐行看 PTP 和 LIN 更能看清程序骨架。2. KRL程序结构、初始化段与中断登记拆解2.1 DEF/END 与 FOLD 折叠块的分层逻辑KRL 程序从DEF开始到END结束main_R2是程序名R2一般代表工位或机器人编号。程序体内大量使用FOLD ... ENDFOLD这是 KRL 的代码折叠结构WorkVisual 编辑器会自动识别并允许整体收展。折叠块内第一行经常出现;%{PE}或%{E}这类注释标记它们是 KRL 源码在 WorkVisual 中同步时写入的辅助信息实际执行时会被忽略不影响运行逻辑。DEF main_R2() FOLD INI ; FOUND BASISTECH INI GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS TRUE DO IR_STOPM() BAS(#INITMOV, 0) ENDFOLD FOLD USER INI $OUT[3] FALSE $OUT[4] FALSE $OUT[5] FALSE $OUT[15] FALSE $OUT[16] FALSE DECL 20 WHEN $IN[16] FALSE DO Sucker_Error() ENDFOLD ENDGLOBAL INTERRUPT DECL 3 WHGN $STOPMESS TRUE DO IR_STOPM()声明了一个全局中断编号 3触发条件是系统停止消息$STOPMESS为 TRUE触发后跳转到IR_STOPM()子程序防止机器人在急停状态下还继续执行运动。使用GLOBAL前缀意味着该中断在程序切换、子程序调用过程中始终保持有效不会因为离开当前程序段而丢失。BAS(#INITMOV, 0)调用 BASISTECH 软件包中的初始化运动指令把轴角度、速度覆盖值等参数恢复为系统默认状态避免上一次运行的轨迹参数残留影响本次程序。USER INI 段里的 5 行$OUT[3] ... $OUT[16] FALSE全部是输出信号复位。它们的作用不是“关掉”什么而是让程序启动瞬间输出处于一个确定已知的电平防止机器人上电瞬间吸盘输出残留为 TRUE 导致误吸附。真实工位上如果 PLC 没有在开机时统一复位输出这一步就是最后一道保险。注意中断声明只是登记并没有真正启用INTERRUPT ON 20和INTERRUPT OFF 20才会打开和关闭指定编号的中断这个机制在后续抓件流程中决定了$IN[16]反馈信号监控的范围。2.2 工具与基坐标在程序头部指定$TOOL TOOL_DATA[1] ; 吸盘工具TCP 定义在吸盘中心 $BASE $NULLFRAME ; 基坐标选用机器人默认原点的空坐标系$TOOL指定当前运动使用的工具坐标系。程序里所有点位都相对这个工具计算TOOL_DATA[1]是在示教器上通过三点法或 ABC 世界坐标法标定过的吸盘工具TCP 位于吸盘中心。$BASE决定工件坐标系的参考原点$NULLFRAME表示基座原点直接使用机器人安装法兰的默认坐标系。对单个固定工位而言这样写足够若后续增加旋转台或导轨就需要把这些外轴原点定义成独立 BASE否则点位会随工装位置变化一起漂移。这部分容易犯的错是把工具坐标和基坐标混在多个 FDAT 里。KRL 的每个运动点都有对应的 FDAT 数据组FDAT 里存了该点使用的工具号、基坐标号和几何属性。上面的$TOOL TOOL_DATA[1]只是设了“当前工具”具体某个运动点到底用哪个工具由该点绑定的 FDAT 决定。调试阶段如果改了$TOOL但没同步更新 FDAT程序可能看起来在走原路径实际 TCP 却偏了几毫米。2.3 初始化段信号与中断登记对应关系初始化行作用现场意义$OUT[3] FALSE清除抓件完成脉冲输出防止上电时误发完成信号给上位机$OUT[4] FALSE清除放件请求应答输出避免下游误认为已可送料$OUT[15] FALSE清除工装吹气输出防止意外吹走工件$OUT[16] FALSE清除故障指示输出避免故障灯残留DECL 20 WHEN $IN[16] FALSE DO Sucker_Error()登记真空丢失中断掉件时能够立即中断当前运动中断登记之所以放在初始化段而不是抓件子程序里是为了让中断声明只执行一次。KRL 中如果反复执行DECL语句部分系统版本会报重复定义或覆盖告警。把声明放在USER INI打开和关闭动作交给INTERRUPT ON/OFF符合库卡机器人外部控制模版的常见编程习惯也方便后续维护时一眼看出系统注册了哪些保护。3. 主流程调度与吸盘抓件的信号联锁设计3.1 条件判断和等待指令的分工主程序在初始化完成后先走 HOME 点然后通过IF $IN[1] TRUE THEN判断是否进入抓件流程。这个判断是“工位允许级”粗联锁$IN[1]一般来自送料机构的光电开关或上位机启动信号表示工件已经到达指定位置机器人才允许开始取件循环。IF $IN[1] TRUE THEN Pick() ; 抓件内部完成吸盘开、拾取、抬起 WAIT FOR ($IN[16] AND $IN[2]) Place() ; 放件内部完成放下和吹气 ENDIFWAIT FOR ($IN[16] AND $IN[2])是第二级联锁等待两个条件同时满足$IN[16]表示真空吸盘已经建立有效负压工件被吸住$IN[2]表示下游放料位已经给出允许放置的信号。这两级联锁的意义在于IF 只负责决定“能不能开始”不负责在抓取中途反复确认真正需要实时确认的条件放到了 WAIT FOR 中只在运动间隙检查减少不必要的中断干扰。实际产线中很多人都习惯把所有条件堆到一个 IF 里结果某个传感器瞬间抖动会让整个流程退回到待机状态重新等待所有信号复位效率和稳定性都受影响。把粗条件放 IF、把高实时性条件放 WAIT FOR是这个案例中非常值得沿用的结构。3.2 Pick 子程序的完整信号链Pick 子程序是整个文档的核心素材从程序注释可以清楚看到它的工艺顺序HOME → 外侧等待点 → 吸着等待点 → 吸着点 → 吸盘开 → 中断开 → 吸着等待点 → 外侧等待点 → 等待真空确认 → 发完成脉冲 → 等待点。这个过程拆成 KRL 就是DEF Pick() PTP XHOME PTP XOutside C_DIS ; 先到工件外侧安全点 LIN XPick_wait C_DIS C_DIS ; 接近到吸着等待点 LIN XPick ; 沿法线方向下沉吸合 sucker_on() ; 子程序打开真空发生器 INTERRUPT ON 20 ; 打开真空丢失监控中断 LIN XPick_wait C_DIS C_DIS ; 确认吸住后抬升 WAIT FOR ($IN[16]) ; 等待真空有效反馈 PULSE($OUT[3], TRUE, 1) ; 发送抓件完成脉冲给上位机 ENDINTERRUPT ON 20放在sucker_on()后面而不是在LIN XPick之前这是一个容易被忽略的细节。吸盘输出刚打开时真空建立需要 200ms 到 500ms此时$IN[16]肯定还是 FALSE如果打开中断过早程序会立刻触发Sucker_Error()误报警。放在这里相当于只监控“已经吸合后”的反馈丢失。WAIT FOR ($IN[16])和中断 20 同时存在看起来有些冗余实际是针对两种不同场景WAIT FOR 检查真空是否建立成功中断监控真空建立后是否在运动中丢失。前者是工艺确认后者是实时安全保护去掉任何一个都不完整。3.3 完成信号使用 PULSE 而不是直接赋值PULSE($OUT[3], TRUE, 1)PULSE($OUT[3], TRUE, 1)将输出 3 置为 TRUE 并保持 1 秒后自动复位参数依次为输出编号、输出电平、脉冲宽度秒。使用脉冲而不是直接$OUT[3]TRUE的好处是上位机 PLC 只需捕捉一次上升沿即可记录“抓件完成”不需要再开发一套互锁复位握手协议简化了机器人侧与 PLC 侧的通讯逻辑。脉冲宽度在库卡机器人示教器使用中可以按 PLC 的扫描周期调整一般不小于 PLC 两个扫描周期我习惯设成 1 秒避免现场因 PLC 扫描慢丢信号。信号方向语义在流程中的位置$IN[1]输入允许取件主流程 IF 条件$IN[16]输入真空反馈有效WAIT FOR 与中断 20 共用$IN[2]输入放件请求主流程 WAIT FOR 条件$OUT[3]输出抓件完成脉冲Pick 末尾$OUT[16]输出故障指示Sucker_Error 中使用4. PTP与LIN运动指令的轨迹参数与抓件工艺4.1 C_DIS 连续路径对吸着动作的影响程序里几乎所有运动指令都携带多个C_DIS后缀例如PTP XOutside C_DIS、LIN XPick_wait C_DIS C_DIS。第一个C_DIS表示前一个点与当前点之间采用连续路径过渡机器人不必完全停稳就可以转入下一段运动。第二个C_DIS的出现通常表示该指令对应的运动数据组里还配置了末端姿态的连续过渡让法兰盘在接近工件的过程中吸盘中心轴的方向变化也保持连续。PDAT_ACT PPDAT13 FDAT_ACT FOutside BAS(#PTP_PARAMS, 100) PTP XOutside C_DIS上面四行配套出现前三行负责为当前运动加载数据组PDAT_ACT设置 PTP 运动参数FDAT_ACT设置该点位对应的基坐标和工具组合BAS(#PTP_PARAMS, 100)将 PTP 速度倍率设为 100%。在吸着动作这种低速高精度场景中100% 速度通常只用于空行程真正执行LIN XPick之前应把抓取动作行的速度降到 0.5m/s 到 1m/s否则吸盘接触工件的瞬间容易把工件推偏。4.2 LDAT 参数与 m/s 速度单位的注意点LIN XPick_wait C_DIS C_DIS Vel 2 m/s CPDAT6 LIN XPick Vel 2 m/s CPDAT1 LIN XPick_wait C_DIS C_DIS Vel 2 m/s CPDAT9三行直线运动都写了Vel 2 m/sKRL 中 CP 运动LIN/CIRC的速度单位是 m/s而不是示教器上某些状态区显示的 mm/s。2m/s 对抓取节拍来说相当快这行代码的价值更多在于示例它告诉你吸着路径是由 Pick_wait、Pick、Pick_wait 三段组成而不是直接从 Home 冲到工件上。真实生产中如果工件是易碎件或表面不平整抓取接近段速度我会改到 0.2m/s 以下。CPDAT6、CPDAT1、CPDAT9是直线运动的数据组编号每个数据组内保存了该运动的速度倍率、加速度倍率、姿态导向值、逼近距离 APO 等。其中 APOApproximation决定了机器人提前多远开始转入下一条轨迹。吸着点XPick对应的 CPDAT1 里APO 值应尽量小确保吸盘接触工件时机器人真正到达目标点而不是在目标点前就开始抬升。4.3 吸盘打开与返回运动的先后顺序从程序注释行可以确认sucker_on()是在LIN XPick执行完成之后才被调用随后打开中断 20再执行返回运动。这个顺序对应一个工艺原则先建立真空再移动工件。如果反过来吸盘还没有压实就启动抬升工件可能在吸合面没有形成密封的情况下就被拉动导致位置偏移最终在后续放料时放不准。返回阶段仍然使用 C_DIS 连续路径目的是把“吸着确认、抬升、等待点停留”三个阶段连成一个平滑循环减少每个动作衔接处的停顿。这里有一个可以优化的小细节返回时的LIN XPick_wait仍然使用 2m/s如果真空反馈确认稍慢会存在极短的“已开吸但未收到反馈”窗口现场可以通过把INTERRUPT ON 20提前到LIN XPick之前并配合延时来实现更严格保护具体做法在下一章说明。4.4 运动数据组用途速查数据组关联指令保存内容调试建议PDATPTP关节运动速度、加速度、过渡参数空行程可以保持 100%接近工件后降速LDATLIN/CIRC笛卡尔速度、加速度、逼近值检查单位是否为 m/sFDAT所有点位工具号、基坐标号、点位几何工具标定后要重新关联CPDATLIN直线运动速度/姿态过渡吸合点必须把 APO 调小这些数据组的命名和绑定关系是新手从“能跑起来”到“能调稳”的分水岭。很多人拿到库卡机器人程序案例只改点位坐标不改数据组运行后发现轨迹虽然走到新位置但速度变化突兀、抓取震动剧烈原因多半就在这里。5. 中断20的开关时机与吸盘掉件的现场排错5.1 故障排查先看中断时序不看点位现场如果出现机器人停在半空报 Sucker_Error第一反应不应该是检查抓取点坐标而是确认中断 20 的打开和关闭时机。中断 20 声明在 USER INI真正生效是在sucker_on()调用完成后。如果中途发生掉件$IN[16]变为 FALSE扫描到该下降沿后立即跳转Sucker_Error()机器人会停止当前运动并等待操作员处理。这时从示教器上的“程序执行”页面看中断响应历史能确认是从哪一个运动段跳出来的比逐步观察点位更直接。注意全局中断编号 3 的优先级高于普通中断 20$STOPMESS触发时会先执行急停保护。现场如果同时出现急停和真空丢失先处理系统停止消息再排查吸盘原因不要被示教器上的报警顺序误导。5.2 工具标定偏移在点位上的表现$TOOL TOOL_DATA[1]中的 TOOL_DATA[1] 如果标定误差在 1-2mm程序运行时不易察觉但会在两个地方暴露出来一是 LIN XPick 到达工件面时吸盘圆周边沿与工件表面出现单侧缝隙二是从 Pick_wait 接近 Pick 的方向与工件法线存在微小夹角。验证方法是在示教器“实际位置”页面将坐标系切到工具坐标系观察 TCP 点在法线方向的分量是否为零。如果明显不为零优先重新标定工具而不是盲目改点位坐标去补偿。5.3 真空建压抖动的最小干扰处理吸盘输出刚打开瞬间气路压力尚未稳定$IN[16]可能在几百毫秒内出现多次由 FALSE 到 TRUE 的抖动。如果中断 20 恰好在这段时间打开就可能触发无效的 Sucker_Error。稳妥的最小改法是调整打开顺序让真空建立完成后再开启监控sucker_on() ; 内部置位真空输出等待 500ms INTERRUPT ON 20 ; 真空稳定后再打开掉件监控把中断打开放到 sucker_on 返回之后相当于人为避开了建压抖动区。对节拍要求较高的场景可以在 sucker_on 内部把延时从固定延时改为轮询$IN[16]加超时退出例如等待 2 秒仍无反馈则直接跳错误程序。这样既不牺牲稳定性又能保留实时掉件保护。处理完这一层下次再拿到类似的库卡机器人程序案例 PDF可以按同样的顺序拆中断声明、信号输出、工具坐标、轨迹数据组、C_DIS 节奏把每一步的开关时机和参数边界理清机器人的动作行为就完全可预期。本文还有配套的精品资源点击获取