杂货栈 2025-12-2 10:03:32 | 显示全部楼层 | 阅读模式

『7x24小时有问必答』

点/击/蓝/字 关/注/我/们
概述

Fanuc基础指令里没有三点创建坐标系指令。可以通过karel语言来实现。
CreatUsFrame.kl:karel源码。

creatusframe.pc:通过源码生成,可导入示教器调用。
文末可获取程序文件!
语法:

CALL CREATUSFRAME (1,2,3, 4)//参数为位置寄存器编号UFRAME(2)=PR[4:Frame]

01
程序源码

--主程序PROGRAM CreatUsFrame--变量定义VARprm_type : INTEGERAR_Value : INTEGER             --AR变量AR1_Value : INTEGER            --pose1存储PR地址AR2_Value : INTEGER            --pose2存储PR地址AR3_Value : INTEGER            --pose3存储PR地址AR4_Value : INTEGER            --pose4存储PR地址prm_real : REALprm_strg : STRING[12]indx : INTEGERSTATUS:INTEGER  posn_type : INTEGERnum_axes : INTEGER  POSEO : XYZWPRPOSEX : XYZWPRPOSEY : XYZWPRposeFrame : XYZWPR  F_POSEO : POSITIONF_POSEX : POSITIONF_POSEY : POSITIONF_poseFrame : POSITION  --引用%INCLUDE klevccdf  --程序执行部分BEGIN--数据初始化prm_type = 0AR_Value = 0prm_real = 0prm_strg = ''STATUS=0  --清屏WRITE(CHR(cc_clear_win),CHR(cc_home))  --读取4个AR参数 FOR indx = 1 TO 4 DO --获取AR参数的类型和值 GET_TPE_PRM(indx,prm_type,AR_Value,prm_real,prm_strg,STATUS) IF STATUS<>0 THEN WRITE('Failed to get tp parameter',CR) RETURN ENDIF --判断AR参数类型,如果不是INTEGER类型,进行提示 IF prm_type<>1 THEN WRITE('Failed to get tp parameter',CR) RETURN ENDIF --将读取到的AR变量值传递 SELECT indx OF CASE (1): AR1_Value=AR_Value WRITE('AR1_Value=',AR1_Value,CR) CASE (2): AR2_Value=AR_Value WRITE('AR2_Value=',AR2_Value,CR) CASE (3): AR3_Value=AR_Value WRITE('AR3_Value=',AR3_Value,CR) CASE (4): AR4_Value=AR_Value WRITE('AR4_Value=',AR4_Value,CR) ENDSELECT ENDFOR   --读取PR变量的值 POS_REG_TYPE(AR1_Value,1, posn_type, num_axes, STATUS) WRITE ('posn_type=', posn_type, CR) IF posn_type=2 THEN--判断PR数为XYZWPR类型 POSEO=GET_POS_REG(AR1_Value,STATUS) WRITE('poseO ok',CR) ELSE WRITE('数据类型错误',CR) ENDIF POS_REG_TYPE(AR2_Value,1,posn_type,num_axes,STATUS) WRITE ('posn_type=',posn_type,CR) IF posn_type=2 THEN--判断PR数为XYZWPR类型 POSEX=GET_POS_REG(AR2_Value,STATUS) WRITE('poseX ok',CR) ELSE WRITE('数据类型错误',CR) ENDIF   POS_REG_TYPE(AR3_Value,1,posn_type,num_axes,STATUS) WRITE ('posn_type=',posn_type,CR) IF posn_type=2 THEN--判断PR数为XYZWPR类型 POSEY=GET_POS_REG(AR3_Value,STATUS) WRITE('poseY ok',CR) ELSE WRITE('数据类型错误',CR) ENDIF F_POSEO=POSEO F_POSEX=POSEX F_POSEY=POSEY -- 三点建立坐标 F_poseFrame=FRAME(F_POSEO, F_POSEX, F_POSEY) poseFrame=F_poseFrame --将坐标值传入AR4指定的PR变量 SET_POS_REG(AR4_Value,poseFrame,STATUS)  END CreatUsFrame

02
验证
位置寄存器(可更改)使用说明:

PR[1]:为用户坐标系原点;
PR[2]:为用户坐标系X轴正方向上一点;
PR[3]:为用户坐标系Y方向上一点。
PR[4]:为计算结果,即用户坐标系数据。
通过调用karel程序,计算结果,如下图所示:

使用PR[1]、PR[2]和PR[3]记录的三个点通过三点法创建用户坐标系1,和计算结果PR[4]作对比,数据一致,如下图所示。

程序计算结果正确。

通过百度网盘分享的文件:karel三点创建用户坐标系链接:https://pan.baidu.com/s/1I34SNM1IvVQ2YBm61ygbJw?pwd=h6i4  提取码:h6i4复制这段内容打开「百度网盘APP 即可获取」

扫码关注
关注、分享、点赞
查看往期文章

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码