1. KAREL在FANUC机器人系统中的定位
KAREL 是 FANUC 机器人控制器上的一种结构化编程语言,名字来源于 Karel Čapek(“机器人”一词的创造者)。它运行在控制器内部的 KAREL 运行环境中,与 TP(Teach Pendant,示教器)程序共享同一套运动内核和 I/O 资源,但面向的任务层次不同:TP 面向现场示教与简单逻辑,KAREL 面向需要变量运算、字符串处理、文件读写、通信协议和复杂流程控制的工程任务。理解 KAREL 的定位,关键是把它放进“控制器执行环境”这张地图里看,而不是把它当成一门孤立的语言。
一、KAREL 与 TP 程序的本质差异
TP 程序以示教点为核心,指令集固定、以运动语句和简单寄存器逻辑为主,编辑和调试都在示教器上完成。KAREL 则是编译型语言,源码在 PC 或控制器上编译成 .pc 文件后加载运行,支持自定义数据类型、数组、结构体、函数与过程、条件与循环、字符串操作以及系统内置例程调用。两者最直观的差别体现在数据能力上:TP 只有数值型寄存器(R、PR、GI/GO 等),而 KAREL 可以定义 INTEGER、REAL、BOOLEAN、STRING、ARRAY 乃至 FILE 类型,并能对它们做运算和持久化。
另一个关键差异是调用关系。KAREL 程序可以通过 CALL_PROG 或 RUN_TASK 调用 TP 程序,TP 程序也可以通过 CALL 调用已加载的 KAREL 程序,二者是双向协作而非替代关系。工程上常见的做法是:TP 负责示教轨迹和现场手动操作,KAREL 负责轨迹之外的“大脑”部分,例如根据外部测量数据计算偏移量、管理多工位配方、与上位机通信、记录生产数据。
二、控制器执行环境
KAREL 程序在控制器中并不是孤立运行的。它由 KAREL 运行环境加载,运行在系统任务或用户任务上下文中,通过系统内置例程访问机器人运动、I/O、寄存器、文件系统和网络接口。运动相关调用(如 MOVE TO、JOINT_MOVE)最终仍由运动内核执行,因此 KAREL 中的运动指令同样受速度倍率、奇异点、干涉区等约束。I/O 访问通过 DIN/DOUT、AIN/AOUT、GIN/GOUT 等例程完成,与 TP 看到的 I/O 是同一套物理映射。
文件系统方面,KAREL 可以读写控制器上的 FR:、MD:、UD: 等设备路径,这使得配方管理、日志记录、参数备份成为可能。网络方面,通过 MSG_CONNECT、MSG_SEND 等例程可实现与上位机或 PLC 的报文通信。这些能力是 TP 难以直接实现的,也是 KAREL 在工程项目中被大量使用的原因。
三、典型工程应用场景
在实际项目中,KAREL 最常出现在以下几类任务中。第一类是数据运算与偏移补偿:例如视觉系统给出工件位姿偏差,KAREL 读取偏差值,通过 SET_POS_REG 或直接修改位置寄存器,再调用 TP 程序执行带偏移的轨迹。第二类是配方与参数管理:不同产品对应不同速度、压力、工位号,KAREL 从文件读取配方表,按当前产品号查表并写入寄存器。第三类是通信与系统集成:与 PLC 交换握手信号、与 MES 上传产量数据、与相机进行 TCP 报文交互。第四类是流程控制与异常处理:多工位调度、超时判断、报警记录、自动重试。
这些场景的共同点是:逻辑复杂、数据多样、需要与外部系统交互,而 TP 在这些方面表达力有限。因此工程上通常采用“TP 做轨迹、KAREL 做逻辑”的分工模式。
四、学习路线建议
学习 KAREL 不建议一上来就啃语法手册。更有效的路径是:先熟悉控制器上的 TP 编程和 I/O、寄存器概念,建立对机器人运行环境的整体认知;然后从一段最小可运行的 KAREL 程序入手,理解 PROGRAM 结构、变量声明、WRITE 输出和编译加载流程;接着练习文件读写和位置寄存器操作,把 KAREL 与 TP 的协作跑通;最后再进入通信、多任务和异常处理等进阶主题。
.pc 文件已正确加载,再通过示教器或自动运行观察变量值和 I/O 状态,形成“改代码—看现象—查变量”的闭环。
需要特别注意的是,KAREL 程序一旦加载运行,其错误处理机制与 TP 不同。KAREL 中未捕获的运行时错误可能导致程序中止并触发控制器报警,因此在工程代码中应养成使用条件判断和错误返回码检查的习惯,而不是依赖控制器自动恢复。这也是从“能跑”走向“稳定运行”的关键一步。