4. 位置寄存器与位置数据管理

在FANUC机器人TP程序开发中,位置寄存器(Position Register,简称PR)是承载空间位置数据的核心容器。与普通寄存器R只能存储数值不同,PR存储的是一组完整的位姿数据:在笛卡尔空间下包含X、Y、Z、W、P、R六个分量,在关节空间下则包含J1至J6六个关节角度。理解PR的读写机制、示教方式以及它与坐标系的关联关系,是编写可靠运动程序的基础。

一、PR的数据结构与两种表示形态

每个PR在控制器中占用固定存储空间,其内部同时保存笛卡尔位姿和关节角度两套数据,并记录当前该寄存器处于哪种表示形态。当PR以笛卡尔形态被引用时,机器人按直线或圆弧方式运动到该位姿;当以关节形态被引用时,则按关节插补方式运动。这一区别直接决定了运动轨迹的形状与可达性。

PR的编号范围通常为PR[1]到PR[100](具体数量取决于控制器型号与选项),其中PR[1]和PR[2]在部分应用中被系统保留用于特定功能,编程时应优先使用PR[3]及以后的编号,避免与系统功能冲突。

二、PR的读写操作

PR的写入主要有三种途径。第一种是示教写入:将机器人手动移动到目标位置后,通过示教器功能键将当前位姿直接记录到指定PR中,这是最直观也最常用的方式。第二种是程序赋值:使用赋值指令将一个已知位姿或另一个PR的内容复制过来,例如把PR[5]的值赋给PR[6]。第三种是计算写入:通过位置偏移、坐标变换等运算,由已有PR推导出新的PR。

读取PR则体现在运动指令中。例如在直线运动指令中直接引用PR[3]作为目标点,机器人即运动到该寄存器记录的位姿。读取时需要注意,如果PR中记录的位置在当前工具坐标系和用户坐标系下不可达,控制器会报出位置不可达错误,程序在该行停止。

! 将PR[10]的内容复制到PR[11]
PR[11]=PR[10]

! 在PR[10]基础上沿工具Z轴偏移50mm后写入PR[12]
PR[12]=PR[10]
PR[12,3]=PR[10,3]+50

! 引用PR[12]作为直线运动目标点
L PR[12] 500mm/sec FINE

上面第三行代码中的“PR[12,3]”表示访问PR[12]的第3个分量,在笛卡尔形态下对应Z值。这种按分量访问的方式是位置偏移编程的关键手段。

三、位置示教的两种粒度

位置示教并非只有“记录整个位姿”一种粒度。实际开发中常区分整体示教与分量示教。整体示教是把机器人当前完整的六自由度位姿一次性写入PR;分量示教则只修改PR中的某一个或某几个分量,其余分量保持不变。例如在码垛应用中,层高变化只影响Z值,就可以只对Z分量做增量修改,而保持X、Y和姿态角不变,这样既减少了示教工作量,也避免了姿态被意外改动。

分量示教时务必确认PR当前处于笛卡尔形态还是关节形态。若PR为关节形态,按分量修改的将是关节角度而非笛卡尔坐标,修改后的运动结果与预期可能完全不同。

四、偏移与坐标系的关联

PR的偏移运算必须明确参照哪个坐标系,这是最容易出错也最值得强调的一点。同一个“沿Z轴偏移50mm”,在工具坐标系下是沿工具指向偏移,在用户坐标系下是沿用户定义的Z轴偏移,在世界坐标系下则是沿机器人基座Z轴偏移。三者结果可能差异巨大。

FANUC提供了带坐标系指定的偏移指令形式,可以在偏移时显式声明参照系。若不声明,系统按默认约定处理,而默认约定与当前激活的工具坐标系、用户坐标系状态有关。因此工程上推荐的做法是:在偏移语句中明确写出参照坐标系,使程序意图不依赖运行时的坐标系激活状态。

此外,PR与坐标系还存在绑定关系。一个PR记录的是“某个坐标系下的位姿”,当它被运动指令引用时,控制器会结合当前激活的工具坐标系和用户坐标系解释这组数据。如果程序中途切换了用户坐标系而没有相应更新PR,原本示教好的位置就会发生整体漂移。这是现场调试中位置“莫名其妙偏了”的常见原因。

PR位置寄存器:数据形态、读写路径与坐标系关联 PR[n] 笛卡尔:X Y Z W P R 关节:J1 ~ J6 示教写入 手动到位后记录当前位姿 赋值写入 PR[a]=PR[b] 整体复制 计算写入 分量偏移 / 坐标变换 运动指令引用 L / J / C 目标点 分量读取 PR[n,m] 取第m个分量 偏移运算的参照坐标系 工具坐标系 沿工具指向偏移 用户坐标系 沿用户定义轴偏移 世界坐标系 沿基座轴偏移 PR被引用时结合当前激活坐标系解释 同一偏移量在不同参照系下结果不同;切换用户坐标系后未更新PR将导致位置漂移

五、一个可复用的偏移示教示例

假设某搬运任务中,取件点已示教到PR[10],放件点与取件点在用户坐标系下仅Z方向相差300mm,姿态完全一致。可以这样组织程序:先把PR[10]整体复制到PR[11],再对PR[11]的Z分量加上300,最后用PR[11]作为放件目标点。这样当取件点因工装调整而重新示教时,放件点会自动跟随更新,无需二次示教。

! 取件点 PR[10] 已示教
! 生成放件点 PR[11]
PR[11]=PR[10]
PR[11,3]=PR[10,3]+300

! 运动到取件点
J PR[10] 100% FINE
! 运动到放件点
L PR[11] 300mm/sec FINE

需要判断结果是否正确时,可以在示教器上打开PR显示画面,直接查看PR[11]的Z分量是否比PR[10]大300,其余分量是否完全一致。若发现X或姿态角也发生了变化,说明复制或偏移语句写错了分量编号。

六、常见问题与排查要点

  • 位置整体漂移:优先检查程序运行过程中是否切换了用户坐标系,以及PR是否在切换前示教、切换后被引用。
  • 偏移方向不符预期:确认偏移语句是否显式指定了参照坐标系,未指定时按默认约定执行,容易与直觉不一致。
  • 姿态被意外改变:检查分量修改是否误改了W、P、R分量,或PR形态在笛卡尔与关节之间被切换。
  • 位置不可达报警:偏移后的PR可能超出机器人工作空间或接近奇异点,应检查偏移量大小与机器人当前构型。
PR的形态(笛卡尔/关节)是寄存器自身的属性,不是运动指令的属性。同一个PR在不同形态下被引用,即使数值看起来相同,运动结果也可能不同。修改PR分量前,务必先确认其当前形态。

掌握PR的读写、示教粒度与坐标系关联,本质上是在建立“位置数据从哪来、以什么形态存在、被谁解释”的完整链条。链条上任何一环的参照系不明确,都会在现场表现为位置偏差。把参照系写进程序、把形态确认写进操作习惯,是位置数据管理最实用的两条原则。