在 FANUC 机器人中,PR 寄存器(位置寄存器)无法直接硬件绑定到 GO(组输出)或 DO(数字输出),因为 PR 存储的是笛卡尔 / 关节位姿(X/Y/Z/W/P/R 或 J1~J6),而 GO/DO 是二进制 I/O。
你需要用 TP 程序 + R 寄存器中转 实现:PR → R[ ] → GO / DO
一、核心原理
- PR[i,j]:取出 PR 的某一分量(X/Y/Z/W/P/R 或 J1~J6)
- R[i] = PR[i,j]:把位置分量存入数值寄存器
- GO[k] = R[i]:把整数发给组输出(16 位)
- 或按位拆分到 DO[]
二、1. PR → R → GO(最常用)
把 PR 的 X/Y/Z/W/P/R 分别发给 GO:
tp
! 1) 取出PR[1]的分量到R寄存器
R[1] = PR[1,1] ! X
R[2] = PR[1,2] ! Y
R[3] = PR[1,3] ! Z
R[4] = PR[1,4] ! W
R[5] = PR[1,5] ! P
R[6] = PR[1,6] ! R
! 2) 发给GO(组输出16位)
GO[1] = R[1] ! X → GO[1]
GO[2] = R[2] ! Y → GO[2]
GO[3] = R[3] ! Z → GO[3]
- GO[n] 是 16 位整数(-32768~32767)
- 单位通常是 0.001mm 或 0.01deg(与系统配置一致)
三、2. PR → R → 按位拆分到 DO
把整数拆成二进制输出到 DO:
tp
! PR[1,X] → R[1]
R[1] = PR[1,1]
! 低8位 → DO[1~8]
DO[1] = (R[1] B'00000001') > 0
DO[2] = (R[1] B'00000010') > 0
DO[3] = (R[1] B'00000100') > 0
...
DO[8] = (R[1] B'10000000') > 0
! 高8位 → DO[9~16]
R[2] = R[1] / 256
DO[9] = (R[2] B'00000001') > 0
...
DO[16] = (R[2] B'10000000') > 0
四、3. 完整示例:PR [1] 6 分量 → GO [1~6]
tp
! PR位置 -> GO组输出
! PR[1]=(X,Y,Z,W,P,R) → GO[1]~GO[6]
R[1] = PR[1,1] ! X
R[2] = PR[1,2] ! Y
R[3] = PR[1,3] ! Z
R[4] = PR[1,4] ! W
R[5] = PR[1,5] ! P
R[6] = PR[1,6] ! R
GO[1] = R[1]
GO[2] = R[2]
GO[3] = R[3]
GO[4] = R[4]
GO[5] = R[5]
GO[6] = R[6]
五、4. 单位与缩放(关键)
- 位置单位:mm/deg
- GO 是整数,通常用 0.001mm = 1
- 所以要 ×1000:
tp
! X=123.456mm → 123456
R[1] = PR[1,1] * 1000
GO[1] = R[1]
六、5. 反向:GO → R → PR(PLC→机器人)
tp
! GO[1](X)→ PR[1,X]
R[1] = GO[1]
PR[1,1] = R[1] / 1000.0
七、总结(一句话)
FANUC 没有直接 PR→GO/DO 绑定,必须用 R 寄存器中转:
plaintext
PR[i,j] → R[k] → GO[m]
或
plaintext
PR[i,j] → R[k] → 按位 → DO[1~16]