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

在Ubuntu 20.04上安装Ollama并部署大型语言模型:含Open WebUI图形界面教程

在Ubuntu 20.04上安装Ollama并部署大型语言模型:含Open WebUI图形界面教程

在Ubuntu 20.04上安装Ollama并部署大型语言模型:含Open WebUI图形界面教程 引言 在人工智能浪潮席卷全球的今天,大型语言模型(LLM)不再是遥不可及的云端技术。借助 Ollama,每一位开发者都能轻松地将强大的模型部署在自己的本地计算机上,实现无缝、私密且可定制的AI体验。本文将带领您一步步在 Ubuntu 20.04 系统上完成 Ollama 的安装与模型部署,并最终搭建美观易用的图形化界面(Open webui)。 Ollama 是什么? Ollama 是一个开源项目,专为在本地运行、管理和部署大型语言模型(如 Llama 3、Mistral、Gemma 等)而设计。 它的核心概念与优势非常清晰: * 简单易用:通过简单的命令行工具,即可完成模型的下载(pull)、运行(run)和管理。一条命令就能启动与模型的对话。 * 丰富的模型库:它提供了官方支持的模型库(Ollama

前端权限控制设计:别再写死权限判断了

前端权限控制设计:别再写死权限判断了

前端权限控制设计:别再写死权限判断了 毒舌时刻 这代码写得跟网红滤镜似的——仅供参考。 各位前端同行,咱们今天聊聊前端权限控制。别告诉我你还在每个页面写死权限判断,那感觉就像在每个房间都装一把不同的锁——管理起来要命。 为什么你需要权限控制设计 最近看到一个项目,权限判断散落在100个文件里,改一个权限规则要改100处,我差点当场去世。我就想问:你是在做权限控制还是在做权限混乱? 反面教材 // 反面教材:分散的权限判断 // Page1.jsx if (user.role !== 'admin') { return <div>无权限</div>; } // Page2.jsx if (!user.permissions.includes('user:view')) { return <div>

地理空间大揭秘:身份证首位数字的隐藏含义-使用WebGIS进行传统6大区域展示

地理空间大揭秘:身份证首位数字的隐藏含义-使用WebGIS进行传统6大区域展示

目录 前言 一、关于身份证的空间信息 1、身份证与省份信息 2、首位数字与区域 二、数字与空间展示可视化 1、地域及图例的前端定义 2、省份与区域信息展示 三、成果展示 1、华北地区 2、东北地区 3、华东地区  4、中南地区 5、西南地区 6、西北地区  四、总结 前言         在我们日常生活中,身份证号码是每个人独一无二的身份标识,它承载着丰富的信息,其中第一位数字更是蕴含着与地理空间紧密相关的秘密。这一位数字并非随意排列,而是与我国广袤的国土划分有着深刻的联系。通过 WebGIS(Web 地理信息系统)技术,我们能够以一种直观、生动的方式,将身份证首位数字所代表的地理区域进行可视化展示,从而揭开传统 6 大区域的神秘面纱。       中国地域辽阔,地理环境复杂多样。

Clawdbot Web Chat平台从零开始:Qwen3-32B模型加载、API路由、UI定制完整流程

Clawdbot Web Chat平台从零开始:Qwen3-32B模型加载、API路由、UI定制完整流程 1. 为什么需要这个平台?——一句话说清价值 你是不是也遇到过这样的问题:想快速搭一个能直接对话大模型的网页聊天界面,但又不想从零写前后端、不熟悉模型服务部署、更不想被云API调用限制和费用卡脖子? Clawdbot Web Chat 就是为这类需求而生的轻量级解决方案。它不依赖复杂框架,不强制绑定特定云服务,核心能力就三件事:把本地跑起来的 Qwen3-32B 模型“接进来”、把 API 请求“转过去”、把聊天页面“换上新皮肤”。 整个过程不需要写一行模型推理代码,也不用配置 Nginx 反向代理规则——所有关键链路都已预置,你只需要改几个配置项、启动两个服务、打开浏览器,就能拥有一个专属的、响应快、无延迟、完全可控的大模型对话入口。 2. 环境准备:三步完成基础搭建 2.1 确认系统与依赖 Clawdbot