展开查看
以下是引用隐身人在2016-07-19 14:33:28的发言 >1楼:
说说探头的工作过程再结合程序就好注释了。
他是先测中心孔 的Z 然后再测X 和Y的两个方向 , 垂直和左右 ,好像还用测的值进行了比较再写入坐标系的。很多东西我看不懂,求解释 。具体全部程序如下:
;== TOUCH PROBE == 测头
;-------------------------------------------------------
DEF INT T_SP, T_WP ; 定义主轴刀具和等待刀具为整数
DEF INT MEAS_HR ;定义测量MEAS_HR为整数
DEF INT RECHECK_PROBE=0 ;定义侧头为整数0
DEF FRAME CORR_FRM ;框架赋给
IF(MCODEH30>0) GOTOF CORR
NC_START:
LIM_ERR=0.15 ; 测量公差
PREV_ERR=0.05 ; 与以前的结果相比
TB_PRI_CNT=20 ; 测量间隔
SET_HR=10 ; 在停机10小时调整后的有效性
M61 ; 检测系统开启
STOPRE
IF(TB_CNT
TB_CNT=TB_CNT+1 ;当前测量间隔+1
M62 ;检测系统关闭
RET
ENDIF
IF(MANU_CALI) GOTOF INI_CAL ;如果手动测量
IF(TB_CAL_ON) GOTOF START_T ;
STOPRE
INI_CAL:
TB_CAL_ON=0 ; (1:CALIBRATION FINISH);校准完成
START_T:
PROBE_OFFSET_ZOS ;
STOPRE
T_SP=$TC_MPP6[9998,1] ;主轴上的刀具 定义为 9998,1
T_WP=GETT(<IF (T_SP<>T_WP)
T=T_NO_PROBE ;呼叫测头
M6(0,)
ENDIF
SUPA
G90 G17 G500 G40
SOFT
IF(TB_CAL_ON) GOTOF MEASURING ;跳转至测量
CALIBRATION:
MSG("CALIBRATION")
G90 G0 G520 G60 X0 Y20 B=DC(0) SPOS=DC(0) T=FST_TOOL
M26
G0 Z2 D1
MS_SCAL1(1, 2, 15, -5, 0)
TB_CAL_ON=1
TB_CNT=TB_PRI_CNT
IF(MANU_CALI)
MANU_CALI=0
ENDIF
MEASURING:
G90 G0 G520 G60 X0 Y20 B=DC(0) SPOS=DC(0) T=FST_TOOL
M26
G0 Z2 D1
MS_TXYZ(1,-3,0,0,"TB_Z_LOG",0,0)
G0 X0 Y0
MS_HP(1,2,15,-5,0,0,0,0,"TB_XY_LOG",0)
G0 Z20
G53 G0 G603 D0 X=$MA_FIX_POINT_POS[1,X1] Y=$MA_FIX_POINT_POS[1,Y1] Z=$MA_FIX_POINT_POS[1,Z1] M=QU(9) M=QU(88) SPOSA=0 M62
$A_DBB[1]=38
M27
IF ((ABS(MS_ERR_X)>LIM_ERR)OR(ABS(MS_ERR_Y)>LIM_ERR)OR(ABS(MS_ERR)>LIM_ERR))AND(RECHECK_PROBE<=2)
RECHECK_PROBE=RECHECK_PROBE+1 ;核对测头
ENDIF
IF ((ABS(MS_ERR_X-PREV_ERR_X)>PREV_ERR)OR(ABS(MS_ERR_Y-PREV_ERR_Y)>PREV_ERR)OR(ABS(MS_ERR-PREV_ERR_Z)>PREV_ERR))AND(RECHECK_PROBE<=2)
RECHECK_PROBE=RECHECK_PROBE+1
ENDIF
IF (RECHECK_PROBE>0)AND(RECHECK_PROBE<=2) GOTOB MEASURING
STOPRE
LIM_CHK:
IF(ABS(MS_ERR_X)>LIM_ERR)OR(ABS(MS_ERR_Y)>LIM_ERR)OR(ABS(MS_ERR)>LIM_ERR) GOTOF ERR1
MEAS_HR=($A_DAY-MEAS_DAY)*24-MEAS_HOUR+$A_HOUR
IF(MEAS_HR>SET_HR)OR(MEAS_DAY==0)OR(MEAS_HOUR==0) GOTOF SAVE_VAR
IF(PREV_ERR_X==0)AND(PREV_ERR_Y==0)AND(PREV_ERR_Z==0) GOTOF SAVE_VAR
IF(ABS(MS_ERR_X-PREV_ERR_X)>PREV_ERR)OR(ABS(MS_ERR_Y-PREV_ERR_Y)>PREV_ERR)OR(ABS(MS_ERR-PREV_ERR_Z)>PREV_ERR) GOTOF ERR1
STOPRE
SAVE_VAR:
MEAS_DAY=$A_DAY
MEAS_HOUR=$A_HOUR
PREV_ERR_X=MS_ERR_X
PREV_ERR_Y=MS_ERR_Y
PREV_ERR_Z=MS_ERR ;测量修正的值赋给变量保存
TB_CNT=1 ;当前间隔测量次数置为1
STOPRE
CORR:
DEF_MACH_AX1=CTRANS(X,DEF_MACH_AX1_X,Y,DEF_MACH_AX1_Y,Z,DEF_MACH_AX1_Z):CTRANS(X,PREV_ERR_X,Y,PREV_ERR_Y,Z,PREV_ERR_Z) ;
STOPRE
RET
ERR1:
M0
MS_ERR_X=0
MS_ERR_Y=0
MS_ERR=0
SETAL(66117,"ABNORMAL RESULT") ;结果异常
M30