FANUC 机器人 PR 寄存器

FANUC 机器人 PR 寄存器(位置寄存器)完全解析

PR(Position Register,位置寄存器)是 FANUC 机器人系统中核心的位置存储与操作单元,用于记录机器人关节坐标、笛卡尔坐标(位置 + 姿态)、工具坐标等关键位置信息,是机器人编程(TP 程序、Karel 程序)中实现位置灵活控制的核心工具。

一、PR 寄存器基础属性

1. 基本定义

  • 数量:标准配置下提供PR[1]~PR[99](部分高端型号可扩展至 PR [199]/PR [299]),支持自定义命名(如 PR [HOME]、PR [PICK])。
  • 存储格式
    • 关节型(JNT):存储 J1~J6 轴的关节角度(°);
    • 笛卡尔型(POS):存储 X/Y/Z(位置,mm)+W/P/R(姿态,°),支持世界坐标、用户坐标、工具坐标等坐标系。
  • 访问权限:可通过 TP 示教器、TP 程序、Karel 程序、上位机(如 Socket/MACRO)读写,需%RW 访问权限(Karel 程序)。

2. 核心用途

  • 存储固定点位(如抓取位、放置位、原点);
  • 动态计算位置(如偏移、插值、轨迹修正);
  • 与外部设备交互(如接收上位机下发的目标位置);
  • 记录机器人当前位置(如故障时的位置回溯)。

二、PR 寄存器的操作方式

1. TP 示教器手动操作

(1)查看 / 修改 PR 值
  1. 进入「位置」→「位置寄存器」界面;
  2. 选择目标 PR 号(如 PR [1]);
  3. 切换坐标系(关节 / 世界 / 用户 / 工具);
  4. 直接输入数值(如 X=100.0,Y=200.0,Z=300.0),或通过「当前位置」将机器人当前位置写入 PR。
(2)复制 / 粘贴 PR 值
  • 选中 PR [1] → 「编辑」→「复制」→ 选中 PR [2] →「粘贴」,快速复用位置。

2. TP 程序中操作 PR 寄存器

(1)基础赋值

tp

-- 将机器人当前位置写入PR[1](世界坐标系) PR[1]=LPOS[1] ; LPOS[1]表示当前位置(世界坐标) -- 直接赋值笛卡尔坐标(X/Y/Z/W/P/R) PR[2]=(X100.0,Y200.0,Z300.0,W0.0,P0.0,R0.0) -- 赋值关节坐标(J1~J6) PR[3]=(J10.0,J20.0,J30.0,J40.0,J50.0,J60.0) 
(2)位置偏移(核心用法)

tp

-- PR[1]的X轴偏移50mm,结果存入PR[4] PR[4]=PR[1]+(X50.0) -- 相对工具坐标系偏移(Z轴下降20mm) PR[5]=PR[1]+(Z-20.0,TOOL[1]) -- 多轴组合偏移 PR[6]=PR[1]+(X10.0,Y-5.0,R15.0) 
(3)运动指令调用 PR

tp

-- 以关节运动方式移动到PR[1]位置,速度50% J PR[1] 50% FINE -- 以线性运动方式移动到PR[2]位置,速度100mm/s L PR[2] 100mm/sec CNT10 
(4)与变量联动(动态计算)

tp

-- 定义数值变量 R[1]=50.0 -- PR[7]的X轴偏移R[1]的值 PR[7]=PR[1]+(XR[1]) 

3. Karel 程序中操作 PR 寄存器

Karel 通过GET_POS_REG/SET_POS_REG函数读写 PR 寄存器,需包含%ENVIRONMENT sysdef%INCLUDE klevpos(位置操作相关头文件)。

(1)读取 PR 寄存器值

karel

VAR pr_num : INTEGER := 1 -- PR寄存器号 pos_data : POSITION -- 存储位置数据的结构体 status : INTEGER -- 操作状态码 BEGIN -- 读取PR[1]的位置数据(笛卡尔坐标) GET_POS_REG(pr_num, pos_data, status) IF status = 0 THEN -- 提取X/Y/Z坐标(mm) WRITE('PR[1] X: ', pos_data.x, CR) WRITE('PR[1] Y: ', pos_data.y, CR) WRITE('PR[1] Z: ', pos_data.z, CR) -- 提取W/P/R姿态(°) WRITE('PR[1] W: ', pos_data.w, CR) WRITE('PR[1] P: ', pos_data.p, CR) WRITE('PR[1] R: ', pos_data.r, CR) ELSE WRITE('读取PR[1]失败,状态码: ', status, CR) ENDIF END 
(2)写入 PR 寄存器值

karel

VAR pr_num : INTEGER := 2 pos_data : POSITION status : INTEGER BEGIN -- 初始化位置数据(X=100,Y=200,Z=300,W=0,P=0,R=0) pos_data.x = 100.0 pos_data.y = 200.0 pos_data.z = 300.0 pos_data.w = 0.0 pos_data.p = 0.0 pos_data.r = 0.0 pos_data.coord = WORLD_COORD -- 指定坐标系:世界坐标 pos_data.type = POS_TYPE -- 类型:笛卡尔坐标 -- 写入PR[2] SET_POS_REG(pr_num, pos_data, status) IF status = 0 THEN WRITE('PR[2]写入成功', CR) ELSE WRITE('PR[2]写入失败,状态码: ', status, CR) ENDIF END 
(3)位置偏移计算(Karel)

karel

VAR pr1_data, pr4_data : POSITION status : INTEGER BEGIN -- 读取PR[1] GET_POS_REG(1, pr1_data, status) -- X轴偏移50mm pr4_data = pr1_data pr4_data.x = pr4_data.x + 50.0 -- 写入PR[4] SET_POS_REG(4, pr4_data, status) END 

三、PR 寄存器的高级用法

1. 坐标系切换

PR 寄存器可存储不同坐标系的位置,切换时需明确指定:

tp

-- PR[1]存储工具坐标系位置 PR[1]=(X50.0,Y0.0,Z-10.0,W0.0,P0.0,R0.0,TOOL[1]) -- PR[1]存储用户坐标系位置 PR[1]=(X100.0,Y200.0,Z300.0,W0.0,P0.0,R0.0,UFRAME[2]) 

2. 与 TCP 通信联动(结合前文 TCP 程序)

通过 Karel 的 TCP 客户端程序接收上位机下发的位置数据,写入 PR 寄存器:

karel

-- 假设从TCP读取到126字节数据,解析为X/Y/Z/W/P/R VAR recv_str : STRING[128] x_val, y_val, z_val : REAL w_val, p_val, r_val : REAL pos_data : POSITION BEGIN -- 从TCP读取数据(前文readline函数) readline(sockfd, recv_str, 126) -- 解析字符串为数值(示例:recv_str="100.0,200.0,300.0,0.0,0.0,0.0") sscanf(recv_str, "%f,%f,%f,%f,%f,%f", x_val, y_val, z_val, w_val, p_val, r_val) -- 写入PR[5] pos_data.x = x_val pos_data.y = y_val pos_data.z = z_val pos_data.w = w_val pos_data.p = p_val pos_data.r = r_val SET_POS_REG(5, pos_data, status) END 

3. 关节 / 笛卡尔坐标互转

tp

-- 将PR[1]的关节坐标转为笛卡尔坐标,存入PR[2] PR[2]=CONV_POS(PR[1],POS_TYPE,WORLD_COORD) -- 将PR[2]的笛卡尔坐标转为关节坐标,存入PR[3] PR[3]=CONV_POS(PR[2],JNT_TYPE,WORLD_COORD) 

四、常见问题与排查

1. PR 寄存器值写入失败

  • 原因 1:无读写权限 → 检查 Karel 程序是否加%RW 访问,TP 程序是否解锁「程序保护」;
  • 原因 2:坐标系不匹配 → 确认写入时指定的坐标系(如 TOOL/UFRAME)已配置;
  • 原因 3:数值超限 → 检查坐标值是否超出机器人运动范围(如 X 轴最大行程 ±1000mm)。

2. 调用 PR 运动时报警

  • 报警「位置超出范围」:PR 中的坐标超出机器人关节 / 笛卡尔软限位,需修正 PR 值;
  • 报警「姿态异常」:W/P/R 姿态超出工具坐标系允许范围,需调整姿态值;
  • 报警「坐标系未定义」:PR 中指定的 TOOL/UFRAME 未配置,需先定义工具 / 用户坐标。

3. PR 值丢失

  • 原因:未将 PR 值写入永久存储 → 在 TP 示教器中执行「位置」→「保存」,或在 Karel 中调用SAVE_POS_REG函数。

五、PR 寄存器与其他寄存器的区别

寄存器类型用途存储内容核心差异
PR位置存储 / 运动控制关节 / 笛卡尔坐标支持位置运算、运动指令调用
R数值存储 / 逻辑运算整数 / 浮点数仅支持数值计算
AR程序参数 / 临时存储数值 / 字符串仅在程序执行时有效
LR位置偏移 / 精细调整相对偏移量仅用于位置修正

PR 寄存器是 FANUC 机器人位置控制的核心,结合 TP 程序 / Karel 程序 / TCP 通信可实现灵活的位置控制,是工业现场实现机器人自动化、柔性化生产的关键工具。

Read more

日语视频 SRT 字幕生成软件下载:日语视频本地自动翻译SRT字幕生成、日语视频自动翻译 Faster Whisper v1.7 下载与使用教程(含AMD显卡支持)

日语视频 SRT 字幕生成软件下载:日语视频本地自动翻译SRT字幕生成、日语视频自动翻译 Faster Whisper v1.7 下载与使用教程(含AMD显卡支持)

日语视频 SRT 字幕生成软件下载:日语视频本地自动翻译SRT字幕生成、日语视频自动翻译 Faster Whisper v1.7 下载与使用教程(含AMD显卡支持) 关键词:Faster Whisper 教程、Whisper 本地部署、CUDA 12.8 下载、AMD ROCm Whisper、日文转中文 转录工具、Whisper 批处理模式、RTX 50 CUDA 版本选择 下载地址: https://pan.quark.cn/s/b18c407fc471 这篇文章系统整理 Faster-Whisper-TransWithAI-ChickenRice v1.7 的版本说明、显卡选择方式、下载地址以及快速上手流程,尤其是: * ✅ 基础版 vs 海南鸡版区别

文心一言4.5开源模型测评:ERNIE-4.5-0.3B超轻量模型部署指南

文心一言4.5开源模型测评:ERNIE-4.5-0.3B超轻量模型部署指南

目录 * 引言:轻量化部署的时代突围 * 一.技术栈全景图:精准匹配的黄金组合 * 基础层:硬核环境支撑 * 框架层:深度优化套件 * 工具层:部署利器 * 二.详细步骤:精准匹配CUDA 12.6的黄金组合 * 准备环节 * 1.模型选择 * 2.配置实例 * 3.选择镜像 * 4.进入JupyterLab * 5.进入终端 * 6.连接到ssh * 系统基础依赖安装 * 1.更新源并安装核心依赖 * 2.安装 Python 3.12 和配套 pip * 解决 pip 报错 * 深度学习框架部署:PaddlePaddle-GPU深度调优 * FastDeploy-GPU企业级部署框架 * 1.安装FastDeploy核心组件 * 2.修复urllib3

LLaMA-Factory全流程训练模型

LLaMA-Factory全流程训练模型

🤗本文主要讲述在docker下使用LLaMA-Factory训练推理模型。 🫡拉取镜像 首先需要启动docker,然后在终端中输入: docker run -tid --gpus all -p 8000:8000 --name LLM -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all --privileged=true ubuntu:20.04 * 这个命令启动了一个 Ubuntu 20.04 容器,使用所有可用的 GPU * 主机的 8000 端口映射到容器的 8000 端口 * 容器命名为 LLM,以特权模式运行容器 进入容器  docker exec -it LLM

深入 llama.cpp:llama-server-- 从命令行到HTTP Server(2)

深入 llama.cpp:llama-server-- 从命令行到HTTP Server(2)

前言        llama-server是llama.cpp中用于发布大模型服务的工具。它通过极简的命令行配置,将复杂的模型推理过程封装为通用的 HTTP 接口;在底层,它选择以纯 C++ 编写的 cpp-httplib 作为服务框架的底层。本章分为应用实战与底层架构两部分。首先,我们将介绍不同参数下的大模型服务发布;接着,我们将详细解析 cpp-httplib 在项目中的具体实现,帮助读者掌握该服务端在网络调度层面的运行逻辑。 目录 * 1 应用实战:启动大模型服务 * 2 架构解析:基于cpp-httplib的运行机制 1 应用实战:启动大模型服务        llama-server是一款轻量级、兼容 OpenAI API、用于提供大语言模型服务的 HTTP 服务器。在上节中,我们启动了llama-server,构建了本地的大模型服务。本节将在此基础上,进一步深入llama-server启动过程的参数设置,同时演示如何利用curl工具发起网络请求,以实测并验证服务的接口响应。 1.1 模型服务参数设置        llama-server支持自定义