2. TP程序结构与执行机制
TP(Teach Pendant)程序是FANUC机器人最基础、也是现场使用最广泛的程序形态。理解TP程序的结构与执行机制,是后续编写运动指令、I/O逻辑、条件分支和子程序调用的前提。很多初学者写出的程序“能跑但不可靠”,根源往往不在指令本身,而在于对程序组成、标签跳转、调用层级和扫描周期的理解不到位。
一、TP程序的组成
一个TP程序由若干条“行”组成,每行是一条指令或一条标签。从功能上看,TP程序内部包含以下几类元素:
- 程序头信息:程序名、程序注释、创建与修改信息等,属于程序属性,不参与逐行执行。
- 运动指令:如
J P[1] 100% FINE、L P[2] 500mm/sec CNT50,控制机器人以关节或直线方式运动到示教点。 - I/O指令:如
DO[1]=ON、RO[2]=ON、WAIT RI[3]=ON,用于与外围设备交互。 - 寄存器与逻辑指令:如
R[1]=R[1]+1、IF R[1]>5,JMP LBL[2],用于计数、判断和分支。 - 标签:如
LBL[1],是跳转的目标位置,本身不产生动作。 - 调用指令:如
CALL SUB_PROG,用于调用子程序。 - 结束指令:如
END,表示程序正常结束。
需要特别注意的是,TP程序中的“行号”是系统按顺序自动编号的,插入或删除行后行号会重新排列。因此,程序逻辑不应依赖行号,而应依赖标签和结构化指令。
二、标签与跳转
标签(Label)是TP程序中实现分支和循环的核心手段。FANUC TP支持 LBL[i] 形式的标签,i 通常为 1~99 的整数。跳转通过 JMP LBL[i] 实现,条件跳转则通过 IF 条件,JMP LBL[i] 实现。
例如,一个简单的循环等待逻辑可以写成:
LBL[1]
WAIT RI[1]=ON
IF R[1]<3,JMP LBL[1]
R[1]=0
这段程序的含义是:反复等待输入 RI[1] 为 ON,每满足一次计数加一,直到计数达到 3 次后清零。这里 LBL[1] 是跳转目标,JMP LBL[1] 是跳转动作,IF 提供条件判断。标签必须唯一,且跳转目标必须存在,否则程序在运行时可能报错或进入不可预期状态。
IF...THEN...ELSE、SELECT 等结构化指令。三、调用层级与子程序
TP程序支持子程序调用,通过 CALL 指令实现。主程序调用子程序时,系统会保存当前执行位置,转入子程序执行,子程序执行到 END 或 RETURN 后返回主程序继续执行。
调用层级需要注意以下几点:
- FANUC TP通常允许一定的嵌套调用深度,但过深的嵌套会增加调试难度,也容易触发调用栈限制。
- 子程序应职责单一,例如“抓取子程序”“放置子程序”“报警处理子程序”,便于复用和排障。
- 子程序中使用
RETURN可以提前返回,但应确保返回前关键输出已恢复到安全状态。 - 主程序与子程序之间通过寄存器、I/O 或参数传递数据,TP本身不提供复杂的参数传递机制,因此命名和注释尤为重要。
一个典型的结构是:主程序负责流程调度,子程序负责具体动作。例如主程序依次调用 CALL PICK、CALL PLACE,而 PICK 和 PLACE 内部各自完成运动、I/O 和等待逻辑。
四、运行扫描周期
TP程序的执行不是“一次性编译后运行”,而是由控制器按扫描方式逐行解释执行。可以把它理解为:控制器周期性地读取当前行、解释该行、执行该行,然后移动到下一行。这个周期称为扫描周期。
扫描周期对程序行为有几个重要影响:
- 运动指令是“阻塞”的:执行一条运动指令时,程序会等待机器人到达目标点或满足终止条件(如 FINE 或 CNT),然后才继续下一行。
- I/O 和逻辑指令执行很快:这类指令在一个扫描周期内完成,因此循环计数、条件判断的速度远高于运动。
- WAIT 指令会占用扫描时间:
WAIT会反复检查条件,直到满足才继续,期间程序停在该行。 - 扫描周期影响响应速度:如果程序中存在大量无意义的循环或过长的等待,会降低对外部信号的响应能力。
因此,在编写TP程序时,应避免在高速循环中放置不必要的指令,尽量用 WAIT 或条件跳转替代“空转”逻辑。同时,对于需要快速响应的安全信号,应优先使用硬件急停或安全回路,而不是依赖TP程序中的软件判断。
五、结构设计建议
结合上述机制,编写TP程序时可以遵循以下实践原则:
- 主程序只做调度:主程序负责流程顺序和条件判断,具体动作交给子程序,避免主程序过长。
- 标签命名有规律:虽然TP标签只支持数字,但可以在程序注释中说明每个标签的用途,例如“LBL[1]:等待上料”。
- 控制调用深度:一般建议嵌套不超过3~4层,便于追踪执行路径。
- 避免死循环:使用
JMP构成循环时,必须确保存在退出条件,否则程序会一直停在该循环内。 - 关注扫描节奏:对响应速度有要求的信号,尽量放在循环前部或使用中断/安全回路处理。
掌握TP程序的组成、标签跳转、调用层级和扫描周期,本质上是在建立“程序如何被控制器一步步执行”的心智模型。只有理解了这个模型,才能在后续编写复杂逻辑时,准确预判程序的执行顺序和响应行为,写出既正确又可靠的机器人程序。