天天看點

RationalDMIS 7.1步距規程式(示值誤差程式)

DECL/COMMON,DOUBLE,STD
M(GAGECRDSETUP) = MACRO/'CRDLABEL', ADVX, ADVZ, GHEIGHT, GWIDTH, GLENGTH, GCLEAR, PRBR
    D(@CRDLABEL) = TRANS/ZORIG, ADVZ, XORIG, ADVX

$$ 擡高的安全距離為28,可以根據實際情況修改此數值,如果修改要替換程式中所有28

    GOTO/10, 28, 5
    F(ZPLANE) = FEAT/PLANE,CART, 0.0, 0.0, 0.0, 0, 0, 1
    F(XLINE) = FEAT/LINE,BND,CART, 0, 0, 0, 1, 0, 0, 0, 1, 0
    F(XORIG)=FEAT/POINT,CART,6 ,0, 0, -1, 0, 0
    
    MEAS/PLANE,F(ZPLANE), 3
    PTMEAS/CART, GCLEAR, -(GHEIGHT/6),   0, 0, 0, 1
    PTMEAS/CART, GCLEAR, -(GHEIGHT*2/6), 0, 0, 0, 1
    GOTO/3, 28, 5
    GOTO/GLENGTH-3, 28, 5
    PTMEAS/CART, GLENGTH-ENDCLEAR, -(GHEIGHT/4), 0, 0, 0, 1
    ENDMES
    GOTO/GLENGTH-3, 28, 5
    GOTO/10, 28, 5
    
    MEAS/LINE,F(XLINE), 2
    PTMEAS/CART, GCLEAR, 0, -(GWIDTH/2), 0, 1, 0
    PTMEAS/CART, (GAGEWIDTH+ENDCLEAR), 0,  -(GWIDTH/2), 0, 1, 0
    ENDMES
    GOTO/0, 28, -(GWIDTH/2)
    
    MEAS/POINT,F(XORIG), 1
    PTMEAS/CART, 0, -(GHEIGHT/6), -(GWIDTH/2), -1, 0, 0
    ENDMES
    D(@CRDLABEL) = DATSET/FA(ZPLANE), ZDIR, ZORIG, FA(XLINE), XDIR, YORIG, FA(XORIG), XORIG
    D(@CRDLABEL) = TRANS/ZORIG, -PRBR, YORIG, -PRBR, XORIG, PRBR
ENDMAC

M(GAGECHECK) = MACRO/GHEIGHT, GWIDTH, GLENGTH, PRBR
    DECL/LOCAL, REAL, XS, XE, ACTLENGTH,ERROR1,ERROR2,ERROR3,ERROR4,TOL1,MAXERROR,MINERROR,MAXIMUM,MINIMUM,JJYYCHANGE,AVERAG
    DECL/LOCAL, CHAR, 256, SSEP,SSEP1,SSEP2,SSEP3,STESTDATE, STESTTIME,JJYY,NY
    DECL/LOCAL, INTGR, LPCOUNT
    DECL/LOCAL,DOUBLE,JJYY[5]
    ERROR3 = ASSIGN/100
    
$$  SSEP = ASSIGN/'--------------------------------------------------------------------------------'
$$  WRITE/DID(GageBlock), SSEP
$$  WRITE/DID(DEFAULTSCREEN),SSEP
    F(PTS)=FEAT/POINT,CART,0 ,0, 0, -1, 0, 0
    F(PTE)=FEAT/POINT,CART,GLENGTH ,0, 0,  1, 0, 0
    STD = ASSIGN/0
$$ do..loop循環測量次數為3,可以根據實際需要修改循環測量次數

    SELECT/BL
    CASE/800.0010
    TOL1 = ASSIGN/0.00397
    ENDCAS
    CASE/600.0013
    TOL1 = ASSIGN/0.00363
    ENDCAS
    CASE/400.0004
    TOL1 = ASSIGN/0.0033
    ENDCAS
    CASE/200.0005
    TOL1 = ASSIGN/0.00297
    ENDCAS
    CASE/125.0003
    TOL1 = ASSIGN/0.00247
    ENDCAS
    ENDSEL
    
    
    DO/LPCOUNT, 1, 5
        GOTO/0, 28, -(GWIDTH/2)
        MEAS/POINT,F(PTS), 1
        PTMEAS/CART, 0, -(GHEIGHT/6), -(GWIDTH/2), -1, 0, 0
        ENDMES
        GOTO/0, 28, -(GWIDTH/2)
        GOTO/GLENGTH, 28, -(GWIDTH/2)
        MEAS/POINT,F(PTE), 1
        PTMEAS/CART, GLENGTH, -(GHEIGHT/6), -(GWIDTH/2), 1, 0, 0
        ENDMES
        STESTDATE = ASSIGN/SDATE()
        STESTTIME = ASSIGN/STIME()
$$      WRITE/DID(GageBlock), 'DATE : ', STESTDATE, '     TIME : ', STESTTIME 
$$      WRITE/DID(DEFAULTSCREEN),'DATE : ', STESTDATE, '     TIME : ', STESTTIME
        XS = OBTAIN/FA(PTS), 3
        XE = OBTAIN/FA(PTE), 3
        ACTLENGTH = ASSIGN/(XE - XS) - (2.0 * PRBR)
        ERROR1 = ASSIGN/ACTLENGTH-GLENGTH
        WRITE/DID(GageBlock), 'RUN ', LPCOUNT, 'Actual Length = ', ACTLENGTH, '     Nominal Length : ', GLENGTH ,$
         '   ERROR:',ERROR1,'   TOL:    ',TOL1
        
        ERROR4 = ASSIGN/ABS(ERROR1)
        IF/(ERROR4.GT.TOL1)
            NY = ASSIGN/'N'
        ELSE
            NY = ASSIGN/'Y'
        ENDIF 
         
        TOL1 = ASSIGN/TOL1*1000
        ERROR1 = ASSIGN/ERROR1*1000 
        
        IF/(LPCOUNT.EQ.1)
        WRITE/DID(DEFAULTSCREEN),''
        WRITE/DID(DEFAULTSCREEN),'      ','序号 ','            ','理論值','              ','實測值   ','          ','示值誤差(u)','            ','允許誤差(u)','          ','測試結論'
        ENDIF
        IF/(ERROR1.LT.0)
           SSEP2 = ASSIGN/'         '
        ELSE
           SSEP2 = ASSIGN/'          '   
        ENDIF
        SSEP1 = ASSIGN/'       '
        IF/(GLENGTH.EQ.50)
           SSEP1 = ASSIGN/'        '
          IF/(ERROR1.LT.0)
           SSEP2 = ASSIGN/'           '
        ELSE
           SSEP2 = ASSIGN/'            ' 
          ENDIF

        ENDIF
        SSEP3 = ASSIGN/'                     '
        WRITE/DID(DEFAULTSCREEN),'      ',LPCOUNT:2:2,'                ',GLENGTH:5:5,SSEP1,ACTLENGTH:5:5,SSEP2,ERROR1:2:2,SSEP3,TOL1:2:2,SSEP3,NY
        
$$      WRITE/DID(DEFAULTSCREEN),'RUN ', LPCOUNT, 'Actual Length = ', ACTLENGTH, '     Nominal Length : ', GLENGTH , $
$$      '   ERROR:',ERROR1,'   TOL:    ','-/+',TOL1
        
        TOL1 = ASSIGN/TOL1/1000
        ERROR1 = ASSIGN/ERROR1/1000 
        
        MINERROR = ASSIGN/ERROR1
        IF/(ERROR1.LT.MINERROR)
        MINERROR = ASSIGN/ERROR1
        ENDIF
        
        MAXERROR = ASSIGN/ERROR1
        IF/(ERROR1.GT.MAXERROR)
        MAXERROR = ASSIGN/ERROR1
        ENDIF
        
    
        

        JJYY[LPCOUNT] = ASSIGN/ERROR1
$$        JJYY[LPCOUNT] = ASSIGN/ABS(JJYY[LPCOUNT])

        
$$      STD = ASSIGN/0
$$        ERROR1 = ASSIGN/ABS(ERROR1)
$$      
$$      IF/(ERROR1.GT.STD)
$$        STD = ASSIGN/ERROR1
$$      ENDIF
$$      
        GOTO/GLENGTH, 28, -(GWIDTH/2)
        GOTO/0, 28, -(GWIDTH/2)
    ENDDO
$$
$$        WRITE/DID(DEFAULTSCREEN),'MAXMUM ERROR IS    ',STD
        IF/(MAXERROR+MINERROR.GT.0)
        MAXIMUM = ASSIGN/MAXERROR
$$      MINIMUM = ASSIGN/MINERROR
        ELSE
        MAXIMUM = ASSIGN/MINERROR
$$      MINIMUM = ASSIGN/MAXERROR
        ENDIF
        
        KNPTR1 = ASSIGN/MN(JJYY[1],JJYY[2],JJYY[3],JJYY[4],JJYY[5])
        KNPTR2 = ASSIGN/MX(JJYY[1],JJYY[2],JJYY[3],JJYY[4],JJYY[5])
        KNPTR3 = ASSIGN/KNPTR2-KNPTR1
        AVERAG = ASSIGN/(JJYY[1]+JJYY[2]+JJYY[3]+JJYY[4]+JJYY[5])/5+GLENGTH
$$  WRITE/DID(DEFAULTSCREEN),'MAXMUM ERROR IS    ',KNPTR2:5:5,'    MINIMUM ERROR IS    ',KNPTR1:5:5
$$  WRITE/DID(DEFAULTSCREEN),'  REPEATABILITY ERROR   ',KNPTR3:5:5
    
    WRITE/DID(DEFAULTSCREEN),'     ','實測平均值:    ', AVERAG:5:5
    WRITE/DID(DEFAULTSCREEN),'     ','重複性誤差:    ',KNPTR3:5:5
        
ENDMAC

DECL/COMMON,DOUBLE,DR_PRBRAD
DECL/COMMON, DOUBLE, VI, VJ, VK, VI2, VJ2, VK2
DECL/COMMON, DOUBLE, GAGEHEIGHT, GAGEWIDTH, ENDCLEAR
DECL/COMMON, DOUBLE, ZGAP[5], XGAP[5], BLENGTH[5], ZP, XP, BL

GAGEHEIGHT = ASSIGN/37
GAGEWIDTH  = ASSIGN/10
ENDCLEAR   = ASSIGN/5

$$ 請檢視 GageBlock.JPG 圖檔裡的圖解,XGAP表示塊規之間的端面距離

XGAP[1] = ASSIGN/0
XGAP[2] = ASSIGN/0
XGAP[3] = ASSIGN/0
XGAP[4] = ASSIGN/0
XGAP[5] = ASSIGN/0
$$ 請檢視 GageBlock.JPG 圖檔裡的圖解,ZGAP表示塊規間距

ZGAP[1] = ASSIGN/0
ZGAP[2] = ASSIGN/13
ZGAP[3] = ASSIGN/13
ZGAP[4] = ASSIGN/13
ZGAP[5] = ASSIGN/14

$$ 5塊規的長度,800,600,400,200,30,可以自行修改

BLENGTH[1] = ASSIGN/800.0010
BLENGTH[2] = ASSIGN/600.0013
BLENGTH[3] = ASSIGN/400.0004
BLENGTH[4] = ASSIGN/200.0005
BLENGTH[5] = ASSIGN/125.0003

RECALL/D(MCS)
UNITS/MM,ANGDEC
PRCOMP/OFF
MODE/MAN
F(PTL1)=FEAT/POINT,CART,1 ,0, 0, 0, 0, 1
F(PTL2)=FEAT/POINT,CART,2 ,0, 0, 0, 0, 1
F(PTL3)=FEAT/POINT,CART,3 ,0, 0, 0, 0, 1
F(PTL4)=FEAT/POINT,CART,4 ,0, 0, 0, 0, 1
F(PTL5)=FEAT/POINT,CART,5 ,0, 0, 0, 0, 1
F(PTL6)=FEAT/POINT,CART,6 ,0, 0, 0, 0, 1

MEAS/POINT,F(PTL1),1
ENDMES
MEAS/POINT,F(PTL2),1
ENDMES
MEAS/POINT,F(PTL3),1
ENDMES
MEAS/POINT,F(PTL4),1
ENDMES
MEAS/POINT,F(PTL5),1
ENDMES
MEAS/POINT,F(PTL6),1
ENDMES

VI = OBTAIN/FA(PTL1)[1],5
VJ = OBTAIN/FA(PTL1)[1],6
VK = OBTAIN/FA(PTL1)[1],7
F(BFPL1) = FEAT/PLANE,CART, 0.0, 0.0, 0.0, VI, VJ, VK
VI = OBTAIN/FA(PTL5)[1],5
VJ = OBTAIN/FA(PTL5)[1],6
VK = OBTAIN/FA(PTL5)[1],7
VI2 = OBTAIN/FA(PTL4)[1],5
VJ2 = OBTAIN/FA(PTL4)[1],6
VK2 = OBTAIN/FA(PTL4)[1],7
F(BFLN1) = FEAT/LINE,BND,CART, 0, 0, 0, -VI2, -VJ2, -VK2, VI, VJ, VK

CONST/PLANE,F(BFPL1),BF,FA(PTL1),FA(PTL2),FA(PTL3)
CONST/LINE,F(BFLN1),BF,FA(PTL5),FA(PTL6)
D(GAGG1CRD) = DATSET/FA(BFPL1), ZDIR, ZORIG, FA(BFLN1), XDIR, YORIG, FA(PTL4), XORIG
DR_PRBRAD = OBTAIN/SS(L20-D2.0), 8
DR_PRBRAD = ASSIGN/(DR_PRBRAD/2)
D(GAGG1CRD) = TRANS/ZORIG, -DR_PRBRAD, YORIG, -DR_PRBRAD, XORIG, DR_PRBRAD

DID(GageBlock) = DEVICE/STOR,'GagaBlockResult.out'
OPEN/DID(GageBlock), DIRECT, OUTPUT, APPEND

$$DECL/COMMON,INTGR,II
$$DO/II,1,5

MODE/PROG,MAN
ZP = ASSIGN/ZGAP[1]
XP = ASSIGN/XGAP[1]
BL = ASSIGN/BLENGTH[1]
CALL/M(GAGECRDSETUP), (GAGE1CRD), XP, ZP, GAGEHEIGHT, GAGEWIDTH, BL, ENDCLEAR, DR_PRBRAD
CALL/M(GAGECHECK), GAGEHEIGHT, GAGEWIDTH, BL, DR_PRBRAD

ZP = ASSIGN/ZGAP[2]
XP = ASSIGN/XGAP[2]
BL = ASSIGN/BLENGTH[2]
CALL/M(GAGECRDSETUP), (GAGE2CRD), XP, ZP, GAGEHEIGHT, GAGEWIDTH, BL, ENDCLEAR, DR_PRBRAD
CALL/M(GAGECHECK), GAGEHEIGHT, GAGEWIDTH, BL, DR_PRBRAD

ZP = ASSIGN/ZGAP[3]
XP = ASSIGN/XGAP[3]
BL = ASSIGN/BLENGTH[3]
CALL/M(GAGECRDSETUP), (GAGE3CRD), XP, ZP, GAGEHEIGHT, GAGEWIDTH, BL, ENDCLEAR, DR_PRBRAD
CALL/M(GAGECHECK), GAGEHEIGHT, GAGEWIDTH, BL, DR_PRBRAD

ZP = ASSIGN/ZGAP[4]
XP = ASSIGN/XGAP[4]
BL = ASSIGN/BLENGTH[4]
CALL/M(GAGECRDSETUP), (GAGE4CRD), XP, ZP, GAGEHEIGHT, GAGEWIDTH, BL, ENDCLEAR, DR_PRBRAD
CALL/M(GAGECHECK), GAGEHEIGHT, GAGEWIDTH, BL, DR_PRBRAD

ZP = ASSIGN/ZGAP[5]
XP = ASSIGN/XGAP[5]
BL = ASSIGN/BLENGTH[5]
CALL/M(GAGECRDSETUP), (GAGE5CRD), XP, ZP, GAGEHEIGHT, GAGEWIDTH, BL, ENDCLEAR, DR_PRBRAD
CALL/M(GAGECHECK), GAGEHEIGHT, GAGEWIDTH, BL, DR_PRBRAD

$$ENDDO

CLOSE/DID(GageBlock)

$$ENDFIL      
3c