RationalDMIS 7.1 查找孔宏程序
M(HOLESEEK)=MACRO/ELEM_NAME,XX,YY,ZZ,II,JJ,KK,DD,NPOINTS,DEEP
DECL/DOUBLE,ACT_X,ACT_Y,ACT_Z,ANG1,RAD1,RAD2,LAST_Z,DIFF_Z,X2,Y2,Z2
DECL/DOUBLE,SEARCH1,RETRCT1,APPRCH1,OFFS_PLANE_POINTS,PRDIAM,PRRAD,RMEASURE
DECL/CHAR,100,EX_REF_SYS,CNAME,SENSOR_NAME
DECL/INTGR,NUM1,I1,J1,K1
MODE/PROG,MAN
DEEP1==VALUE/SNSET,DEPTH
$$ I READ THE ACTUAL REFERENCE SYSTEM NAME
EX_REF_SYS=ASSIGN/SCDAT()
$$ READ PROBE DIAMETER AND RADIUS
SENSOR_NAME=ASSIGN/SCSNS()
PRDIAM=OBTAIN/SA(@SENSOR_NAME),10
PRRAD=ASSIGN/PRDIAM/2
SNSET/DEPTH,0
SNSET/SEARCH,PRRAD+DEEP
OFFS_PLANE_POINTS=ASSIGN/2
LAST_Z=ASSIGN/0
$$ SET TEMPORARY ORIGIN AND ALIGNMENT
F(POORIG)=FEAT/POINT,CART,XX,YY,ZZ,II,JJ,KK
FA(POORIG)=FEAT/POINT,CART,XX,YY,ZZ,II,JJ,KK
F(LIZ)=FEAT/LINE,UNBND,CART, XX,YY,ZZ, II,JJ,KK, 1,1,1
FA(LIZ)=FEAT/LINE,UNBND,CART, XX,YY,ZZ, II,JJ,KK, 1,1,1
D(THEO_CENTER) = TRANS/XORIG,FA(POORIG),YORIG,FA(POORIG),ZORIG,FA(POORIG)
D(THEO_CENTER) = DATSET/FA(LIZ),ZDIR
$$-----------------BIG STEP SEARCH-----------------------------
RAD2=ASSIGN/DD/2*0.866
NUM1=ASSIGN/0
DO/I1,2,5,1
DO/J1,0,5,1
DO/K1,1,I1-1,1
ACT_X=ASSIGN/RAD2*(I1-1)COS(DTOR(-30))
ACT_Y=ASSIGN/RAD2(I1-1)SIN(DTOR(-30))+RAD2(K1-1)
ANG1=ASSIGN/ATAN2(ACT_Y,ACT_X)
RAD1=ASSIGN/SQRT(ACT_XACT_X+ACT_YACT_Y)
ANG1=ASSIGN/RTOD(ANG1)+60J1
ACT_X=ASSIGN/RAD1COS(DTOR(ANG1))
ACT_Y=ASSIGN/RAD1*SIN(DTOR(ANG1))
BADTST/ON
F(PT)=FEAT/POINT,CART, ACT_X,ACT_Y,LAST_Z, 0,0,1
MEAS/POINT,F(PT),1
PTMEAS/CART, ACT_X,ACT_Y,LAST_Z, 0,0,1
ENDMES
IF/(BADPT())
F(PT)=FEAT/POINT,CART, ACT_X,ACT_Y,LAST_Z, 0,0,1
MEAS/POINT,F(PT),0
ENDMES
ACT_X=OBTAIN/FA(PT),3
ACT_Y=OBTAIN/FA(PT),4
ACT_Z=OBTAIN/FA(PT),5
JUMPTO/(AAA)
ELSE
Z2=OBTAIN/FA(PT),5
DIFF_Z=ASSIGN/Z2-LAST_Z
LAST_Z=ASSIGN/Z2
$$TEXT/OUTFIL,STR(DIFF_Z)
IF/(DIFF_Z.LT.-SQRT(DD)/4)
ACT_Z=ASSIGN/LAST_Z+PRRAD+0.2
JUMPTO/(BBB)
ENDIF
ENDIF
ENDDO
ENDDO
ENDDO
$$-----------------FAIL SEARCH, CHANGE TO MAN MODE-------------------------
MODE/MAN
TEXT/OPER,‘自动搜索失败,请手工测量该孔’
RECALL/D(@EX_REF_SYS)
F(@ELEM_NAME)=FEAT/CIRCLE,INNER,CART, XX,YY,ZZ, II,JJ,KK, DD
RMEAS/CIRCLE,F(@ELEM_NAME),NPOINTS,VECBLD,2,3
ENDMES
(BBB)
$$--------------------SMALL STEP SEATCH----------------------
D(THEO_CENTER) = TRANS/XORIG,FA(PT),YORIG,FA(PT),ZORIG,FA(PT)
RAD2=ASSIGN/(DD-PRDIAM)/20.8660.9
DO/I1,2,5,1
DO/J1,0,5,1
DO/K1,1,I1-1,1
ACT_X=ASSIGN/RAD2*(I1-1)COS(DTOR(-30))
ACT_Y=ASSIGN/RAD2(I1-1)SIN(DTOR(-30))+RAD2(K1-1)
ANG1=ASSIGN/ATAN2(ACT_Y,ACT_X)
RAD1=ASSIGN/SQRT(ACT_XACT_X+ACT_YACT_Y)
ANG1=ASSIGN/RTOD(ANG1)+60J1
ACT_X=ASSIGN/RAD1COS(DTOR(ANG1))
ACT_Y=ASSIGN/RAD1*SIN(DTOR(ANG1))
BADTST/ON
F(PT)=FEAT/POINT,CART, ACT_X,ACT_Y,LAST_Z, 0,0,1
MEAS/POINT,F(PT),1
PTMEAS/CART, ACT_X,ACT_Y,LAST_Z, 0,0,1
ENDMES
IF/(BADPT())
F(PT)=FEAT/POINT,CART, ACT_X,ACT_Y,LAST_Z, 0,0,1
MEAS/POINT,F(PT),0
ENDMES
ACT_X=OBTAIN/FA(PT),3
ACT_Y=OBTAIN/FA(PT),4
ACT_Z=OBTAIN/FA(PT),5
JUMPTO/(AAA)
ELSE
LAST_Z=OBTAIN/FA(PT),5
ENDIF
ENDDO
ENDDO
ENDDO
(AAA)
$$-----------------FIND THE HOLE
BADTST/OFF
$$F(TMP_CIR)=FEAT/CIRCLE,INNER,CART, 99999.0000,99999.0000,99999.0000, 0,0,1, 0
RAD1=ASSIGN/0.1
SNSET/DEPTH, 0
SNSET/APPRCH,RAD1
SNSET/RETRCT,0.1
SNSET/SEARCH,10.0000
F(TMP_CIR)=FEAT/CIRCLE,INNER,CART, ACT_X,ACT_Y,ACT_Z, 0,0,1, PRDIAM
MEAS/CIRCLE,F(TMP_CIR),4
PTMEAS/CART,ACT_X-PRRAD,ACT_Y,ACT_Z,1,0,0
PTMEAS/CART,ACT_X+PRRAD,ACT_Y,ACT_Z,-1,0,0
PTMEAS/CART,ACT_X,ACT_Y-PRRAD,ACT_Z,0,1,0
PTMEAS/CART,ACT_X,ACT_Y+PRRAD,ACT_Z,0,-1,0
ENDMES
$$ ORIGIN ON THE TEMPORARY HOLE
D(THEO_CENTER) = TRANS/XORIG,FA(TMP_CIR),YORIG,FA(TMP_CIR)
GOTO/0,0,LAST_Z+PRRAD+5
RMEASURE=OBTAIN/FA(TMP_CIR),10
RMEASURE=ASSIGN/(RMEASURE/2)+OFFS_PLANE_POINTS
SNSET/APPRCH,2
SNSET/RETRCT,2
SNSET/SEARCH,5
F(PLPRO)=FEAT/PLANE,CART,0,0,LAST_Z,0,0,1
MEAS/PLANE,F(PLPRO),4
PTMEAS/CART,RMEASURE,0,LAST_Z+PRRAD,0,0,1
PTMEAS/CART,0,RMEASURE,LAST_Z+PRRAD,0,0,1
PTMEAS/CART,-RMEASURE,0,LAST_Z+PRRAD,0,0,1
PTMEAS/CART,0,-RMEASURE,LAST_Z+PRRAD,0,0,1
ENDMES
D(THEO_CENTER) = DATSET/FA(PLPRO),ZDIR,ZORIG
GOTO/0,0,PRRAD+5
SNSET/APPRCH,(DD-PRDIAM)/2
SNSET/RETRCT,(DD-PRDIAM)/4
F(TMP_CIR)=FEAT/CIRCLE,INNER,CART, 0,0,-DEEP, 0,0,1, DD
MEAS/CIRCLE,F(TMP_CIR),NPOINTS
ENDMES
GOTO/0,0,PRRAD+5
RECALL/D(@EX_REF_SYS)
F(@ELEM_NAME)=FEAT/CIRCLE,INNER,CART, XX,YY,ZZ, II,JJ,KK, DD
CONST/CIRCLE,F(@ELEM_NAME),PROJCT,FA(TMP_CIR),FA(PLPRO)
$$ I SET THE ORIGINAL SEARCH DISTANCE
SNSET/APPRCH,APPRCH1
SNSET/RETRCT,RETRCT1
SNSET/SEARCH,SEARCH1
SNSET/DEPTH,DEEP
$$DISPLY/OFF
ENDMAC
$$==========MAIN PROG
DECL/REAL,X1,Y1,Z1
SNSLCT/SA(P1_90_0n90_0)
MODE/MAN
D(DAT_2) = TRANS/XORIG,10.0000,YORIG,20.0000,ZORIG,30.0000
F(POI_3)=FEAT/POINT,CART,0,0,0,0,0,1
MEAS/POINT,F(POI_3),1
ENDMES
RECALL/D(DAT_2)
SNSET/SEARCH,10.000
SNSET/APPRCH,2.0000
SNSET/RETRCT,2.0000
X1=OBTAIN/FA(POI_3),3
Y1=OBTAIN/FA(POI_3),4
Z1=OBTAIN/FA(POI_3),5
CALL/M(HOLESEEK),‘CIR_8’,X1,Y1,Z1,0,0,1,6,4,1
ENDFIL