RationalDMIS   探测误差(25点球)_ico

DMISMN/''
$$============================================================$$
$$ PROGRAMMA PER LA MISURA DELLA SFERA DI RIFERIMENTO $$
$$ SECONDO LE SPECIFICHE ISO 10360-2 $$
$$ APPLICABILE SU MACCHINE A BRACCIO ORIZZONTALE $$
$$ $$
$$ ULTIMA MODIFICA: 18/12/2001 $$
$$ S.SIRO, G.SALIERNO, C.DELVO' $$
$$ MODIFY BY TALL ZHANG MAKE IT SUITABLE FOR ALL SIZE SPHERE $$
$$============================================================$$

$$DICHIARAZIONE DELLE VARIABILI DEL PROGRAMMA - NON MODIFICARE O CANCELLARE QUESTA SEZIONE
DECL/DOUBLE,RAG_POL[25],MASSIMO,MINIMO,ERRORE_SFERA,RTEO,TOL_SFERA,RTEO
DECL/DOUBLE,SP1X,SP1Y,SP1Z,VELMIS,VELPOS,ACCMIS,ACCPOS,FLYRAD,PREHIT,POSTHIT,RETURN
DECL/DOUBLE,II,JJ,KK,RANG,PSCAL
DECL/INTGR,I,I1,I2,I3
DECL/CHAR,2,RISULTATO
DECL/CHAR,64,DAFILE,PNAME
DECL/CHAR,100,FILENAME

$$SETTAGGI INIZIALI CON INSERIMENTO DEI PARAMETRI MACCHINA
$$UNITA' DI MISURA, SISTEMI DI RIFERIMENTO E MODO DI MOVIMENTAZIONE
UNITS/MM, ANGDEC, TEMPC
PRCOMP/ON
FINPOS/OFF
TECOMP/OFF
RAPID/0.7500
D(MAC) = DATSET/MCS
WKPLAN/XYPLAN
SNSET/CLRSRF, 0.0000
SNSET/DEPTH, 0.0000
DECPL/ALL,4
SNSET/SEARCH,10.000
SNSET/APPRCH,5.0000
SNSET/RETRCT,5.0000
FLY/5.0000
FEDRAT/MESVEL,MMPS,3.5
FEDRAT/POSVEL,PCENT,0.75
FEDRAT/ROTVEL,PCENT,0.75
FEDRAT/SCNVEL,PCENT,0.75
ACLRAT/MESACL,PCENT,0.75
ACLRAT/POSACL,PCENT,0.75
MODE/MAN
$$============================================================$$
$$ MODIFY BY TALLZHANG 0N 25/06/2009
$$ MEASURE A SPHERE BY THEREE SECTION, THE POINT ON EACH SECTION
$$ IS 10, 8, 6 AND EVERY SECTION START ANGLE HAS 15 DEGREE DIFFERANCE
$$============================================================$$


RTEO=PROMPT/'GUAGE SPHERE DIAMETER?'
RTEO=ASSIGN/(RTEO/2)

FILENAME=PROMPT/'TYPE IN THE FILE NAME FOR OUTPUT'
FILENAME=ASSIGN/CONCAT(FILENAME,'.TXT')
FILENAME=ASSIGN/CONCAT('C:\ISO10360\DATI\',FILENAME)
TOL_SFERA=PROMPT/'R value (mm)?'

SNSLCT/SA(P1_0_0P0_0)

$$PREPARAZIONE DEL SISTEMA DI RIFERIMENTO INIZIALE
D(MAC) = DATSET/MCS
$$ D(RUOTATO) = ROTATE/ZAXIS, 45.0000
$$ D(RUOTATO) = ROTATE/YAXIS, -45.0000
$$ SAVE/D(RUOTATO)

$$MISURAZIONE MANUALE DEL POLO DELLA SFERA
TEXT/OPER, 'MEASURE A POINT ON THE POLO OF SPHERE'
F(PNT1) = FEAT/POINT, CART, 0,0,0,0,0,1
MEAS/POINT, F(PNT1), 1
ENDMES

$$ORIGINE SUL CENTRO APPROSSIMATIVO DELLA SFERA
D(TEMPSFERA) = TRANS/XORIG, FA(PNT1), YORIG, FA(PNT1), ZORIG, FA(PNT1)
D(TEMPSFERA) = TRANS/ZORIG, -RTEO

$$ALLINEMENTO IN AUTOMATICO. LA SFERA VIENE MISURATA DUE VOLTE
MODE/PROG, MAN
GOTO/0.0000, 0.0000, RTEO*1.2

DO/I,0,1,1
F(SPH1)=FEAT/SPHERE,OUTER,CART,0.0000,0.0000,0.0000,25.0000,0.0000,0.0000,1.0000
MEAS/SPHERE,F(SPH1),5
ENDMES
D(SFERA) = TRANS/XORIG, FA(SPH1), YORIG, FA(SPH1), ZORIG, FA(SPH1)
ENDDO
SAVE/D(SFERA)

$$INIZIO MISURA DEI 25 PUNTI SULLA SFERA SENZA COMPENSAZIONE
RECALL/D(SFERA)
GOTO/RTEO*1.2,0,RTEO*1.2
$$PRCOMP/OFF
RANG=ASSIGN/(3.1415926/180)
I3=ASSIGN/0
DO/I1,0,2,1
DO/I2,0,10-I1*2-1,1
I3=ASSIGN/(I3+1)
PNAME=ASSIGN/CONCAT('PNT',STR(I3))
II=ASSIGN/COS(I1*30*RANG)*COS(I2*360/(10-I1*2)*RANG+I1*15*RANG)
JJ=ASSIGN/COS(I1*30*RANG)*SIN(I2*360/(10-I1*2)*RANG+I1*15*RANG)
KK=ASSIGN/SIN(I1*30*RANG)
SP1X=ASSIGN/RTEO*II
SP1Y=ASSIGN/RTEO*JJ
SP1Z=ASSIGN/RTEO*KK
F(@PNAME) = FEAT/POINT,CART,SP1X,SP1Y,SP1Z,II,JJ,KK
MEAS/POINT, F(@PNAME), 1
ENDMES
ENDDO
ENDDO

F(PNT25) = FEAT/POINT, CART, 0.0000, 0.0000,RTEO, 0.0000, 0.0000, 1.0000
MEAS/POINT, F(PNT25), 1
ENDMES

$$CALCOLO DELLA SFERA PASSANTE PER IP UNTI TASTATI
F(SPH1) = FEAT/SPHERE, INNER, CART, 0.0000, 0.0000, 0.0000, 2*RTEO
CONST/SPHERE, F(SPH1), BF, FA(PNT1), FA(PNT2), FA(PNT3), FA(PNT4), FA(PNT5),FA(PNT6), FA(PNT7), FA(PNT8), FA(PNT9), FA(PNT10), FA(PNT11), FA(PNT12),FA(PNT13), FA(PNT14), FA(PNT15), FA(PNT16), FA(PNT17), FA(PNT18), FA(PNT19),FA(PNT20), FA(PNT21) $
, FA(PNT22), FA(PNT23), FA(PNT24), FA(PNT25)

D(DAT_1) = TRANS/XORIG,FA(SPH1),YORIG,FA(SPH1),ZORIG,FA(SPH1)
MODE/MAN
SAVE/DATA

$$VALUTAZIONE DELLE DISTANZE DAL CENTRO DELLA SFERA PASSANTE
T(RAGGIO)=TOL/DISTB,NOMINL,RTEO,-TOL_SFERA,TOL_SFERA,PT2PT

DID(FILEDATI)=DEVICE/STOR,FILENAME
OPEN/DID(FILEDATI),DIRECT,OUTPUT,OVERWR
WRITE/DID(FILEDATI),' SPHERE COORDINATE'
WRITE/DID(FILEDATI),'-------------------------------------------------'
$$CALCOLO DELLA MASSIMA E DELLA MINIMA DISTANZA
PSCAL=ASSIGN/SQRT(RTEO)/RTEO
MASSIMO=ASSIGN/-9999999
MINIMO=ASSIGN/9999999

DO/I,1,25,1
PNAME=ASSIGN/CONCAT('PNT',STR(I))
EVAL/FA(SPH1),FA(@PNAME),TA(RAGGIO)
RANG=OBTAIN/TA(RAGGIO),3
SP1X=OBTAIN/FA(@PNAME),3
SP1Y=OBTAIN/FA(@PNAME),4
SP1Z=OBTAIN/FA(@PNAME),5
WRITE/DID(FILEDATI),I, ' ' ,SP1X, ' ', SP1Y, ' ' ,SP1Z,' ',RANG
IF/(MASSIMO.LE.RANG)
MASSIMO=ASSIGN/RANG
ENDIF
IF/(MINIMO.GT.RANG)
MINIMO=ASSIGN/RANG
ENDIF
ENDDO

$$CALCOLO DELL'ERRORE SULLA SFERA
ERRORE_SFERA=ASSIGN/(MASSIMO-MINIMO)*1000

$$VALUTAZIONE DEI RISULTATI
IF/(ERRORE_SFERA.LE.TOL_SFERA)
RISULTATO=ASSIGN/'OK'
ELSE
RISULTATO=ASSIGN/'NG'
ENDIF

WRITE/DID(FILEDATI),'------------------------------------------------------'
WRITE/DID(FILEDATI),' 理论 MAX_R MIN_R 公差 偏差 结论'
WRITE/DID(FILEDATI),'------------------------------------------------------'
WRITE/DID(FILEDATI),RTEO, ' ', MASSIMO, ' ' ,MINIMO, ' ' ,TOL_SFERA, ' ', ERRORE_SFERA, ' ', RISULTATO
CLOSE/DID(FILEDATI)

ENDFIL

RationalDMIS   探测误差(25点球)_vim_02