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