使用Karel 设置和获取Fanuc 位置寄存器值
说明:由于项目需要特意研究了Fanuc Karel 语言,Karel 语言比较小众 网络上资料很少,因此把过程记录下来,方便其他人,也方便自己以后查阅。
PROGRAM RWREG1
--忽略错误暂停,命令暂停,在TP启用时忽略暂停的请求
%NOPAUSE = ERROR +COMMAND +TPENABLE
VAR
status :INTEGER
str1:STRING[254]
str2:STRING[254]
s_curp:XYZWPR --笛卡尔坐标位置变量
g_curp:XYZWPR --笛卡尔坐标位置变量
s_jntp:JOINTPOS --关节坐标位置变量
g_jntp:JOINTPOS --关节坐标位置变量
x:REAL
y:REAL
z:REAL
w:REAL
p:REAL
r:REAL
strX:STRING[10]
strY:STRING[10]
strZ:STRING[10]
strW:STRING[10]
strP:STRING[10]
strR:STRING[10]
j1:REAL
j2:REAL
j3:REAL
j4:REAL
j5:REAL
j6:REAL
strJ1:STRING[10]
strJ2:STRING[10]
strJ3:STRING[10]
strJ4:STRING[10]
strJ5:STRING[10]
strJ6:STRING[10]
realJP : ARRAY [9] OF REAL
strPos :STRING[254]
strJpos :STRING[254]
BEGIN
FORCE_SPMENU(TP_PANEL,SPI_TPUSER,1) --显示用户界面
WRITE('hello',CR)
s_curp = CURPOS(0,0) --返回机器人当前笛卡尔坐标位置,两个形参使用默认值(0,0)
s_jntp=CURJPOS(0,0) --返回机器人当前关节坐标位置
SET_POS_REG(1,s_curp, status) -- 变量存入位置寄存器 PR[1]
SET_JPOS_REG(2,s_jntp, status) -- 变量存入位置寄存器 PR[2]
g_curp = GET_POS_REG(1,status) -- 获取寄存器值 PR[1]
g_jntp = GET_JPOS_REG(2,status) -- 获取寄存器值 PR[2]
x = g_curp.x
y = g_curp.y
z = g_curp.z
w = g_curp.w
p = g_curp.p
r = g_curp.r
CNV_JPOS_REL (g_jntp, realJP, status)
j1 = realJP[1]
j2 = realJP[2]
j3 = realJP[3]
j4 = realJP[4]
j5 = realJP[5]
j6 = realJP[6]
CNV_REAL_STR(x,1,2,strX)
CNV_REAL_STR(y,1,2,strY)
CNV_REAL_STR(z,1,2,strZ)
CNV_REAL_STR(w,1,2,strW)
CNV_REAL_STR(p,1,2,strP)
CNV_REAL_STR(r,1,2,strR)
CNV_REAL_STR(j1,1,2,strJ1)
CNV_REAL_STR(j2,1,2,strJ2)
CNV_REAL_STR(j3,1,2,strJ3)
CNV_REAL_STR(j4,1,2,strJ4)
CNV_REAL_STR(j5,1,2,strJ5)
CNV_REAL_STR(j6,1,2,strJ6)
strPos = strX+','+strY+','+strZ+','+strW+','+strP+','+strR
strJpos = strJ1+','+strJ2+','+strJ3+','+strJ4+','+strJ5+','+strJ6
WRITE(strPos,CR)
WRITE(strJpos,CR)
END RWREG1
最后运行的效果如下: