DMISMN/‘山涧果子’, 4.0
UNITS/MM, ANGDEC
RECALL/D(MCS)
PRCOMP/ON
$$
MODE/MAN
TEXT/MAN,‘请确认探头角度已经旋转’
DECL/COMMON,INTGR,A0B0,A90B0,A90B90,A90B180,A90NB90
XZJD = PROMPT/CHECK,‘A0 B0’,A0B0,$
CHECK,‘A90 B0’,A90B0,$
CHECK,‘A90 B90’,A90B90,$
CHECK,‘A90 B180’,A90B180,$
CHECK,‘A90 B-90’,A90NB90,$
TITLE,‘请选择使用的角度’
MODE/PROG,MAN
$$
DECL/COMMON, REAL, Dim_SPH, Rad_SPH
DECL/COMMON, REAL, X, Y, Z, Pra ,Ra, Ang, H, DX, DY, DZ
DECL/COMMON, REAL, PR_POS, PI, TMP, MaxPra, MinPra, ER
DECL/COMMON, INTGR, Sect, PtNum[4], FeaNum, Num, MaxNum, MinNum
DECL/COMMON, CHAR, 8, FeaName
DECL/COMMON, CHAR, 1, Flag
DECL/COMMON,DOUBLE,FINAL_MaxPra,FINAL_MinPra
FINAL_MaxPra = ASSIGN/ 0
FINAL_MinPra = ASSIGN/ 100
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
输出检测报告头宏定义
M(ReportHead) = MACRO/
DECL/COMMON, CHAR, 30, c_CMMSerialNO, c_Date, c_Time, c_Operator
DECL/COMMON, CHAR, 4, c_Temperature, c_Humidity
c_CmmSerialNO = PROMPT/‘请输入测量机型号:’
c_Operator = PROMPT/‘请输入操作者姓名:’
c_Temperature = PROMPT/‘请输入检验环境温度:’
c_Humidity = PROMPT/‘请输入检验环境湿度:’
c_Temperature = ASSIGN/CONCAT(c_Temperature, ’ C’)
c_Humidity = ASSIGN/CONCAT(c_Humidity, ’ %’)
c_Date = ASSIGN/SDATE()
c_Time = ASSIGN/STIME()
WRITE/DID(SQUAREDID), ’ ===================================================’
WRITE/DID(SQUAREDID), ’ ******* GAUGE MEASUREMENT REPORT *******’
WRITE/DID(SQUAREDID), ’ ===================================================’
WRITE/DID(SQUAREDID), ‘’
WRITE/DID(SQUAREDID), ’ ', ‘CMM OF MANUFACTURER : 山涧果子 1’
WRITE/DID(SQUAREDID), ’ ', 'CMM SERIAL NO. : ', c_CMMSerialNO:5
WRITE/DID(SQUAREDID), ’ ', 'OPERATOR NAME : ', c_Operator
WRITE/DID(SQUAREDID), ’ ', 'ENVIRONMENT TEMPERATURE : ', c_Temperature
WRITE/DID(SQUAREDID), ’ ', 'ENVIRONMENT HUMIDITY : ', c_Humidity
WRITE/DID(SQUAREDID), ’ ', 'DATE & TIME OF MEASUREMENT : ', c_Date , ’ ', c_Time
WRITE/DID(SQUAREDID), ‘’
WRITE/DID(SQUAREDID), $
‘*****************************************************************************************’
ENDMAC
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
Set.MotionPath.CLEAR
S
e
t
.
M
e
a
s
P
a
t
h
.
C
L
E
A
R
Set.MeasPath.CLEAR
Set.MeasPath.CLEAR Set.MotionPath.OFF
S
e
t
.
M
e
a
s
P
a
t
h
.
O
F
F
Set.MeasPath.OFF
Set.MeasPath.OFF
DID(SQUAREDID) = DEVICE/STOR, ‘E:\Program Files\RationalDMIS\Output\R.out’
OPEN/DID(SQUAREDID), DIRECT, OUTPUT, APPEND
F
l
a
g
=
P
R
O
M
P
T
/
′
是
否
输
出
检
测
报
告
头
?
Y
−
−
−
−
−
是
,
N
−
−
−
−
−
否
,
Q
−
−
−
−
−
退
出
′
I
F
/
F
l
a
g
.
E
Q
.
′
Y
′
C
A
L
L
/
M
(
R
e
p
o
r
t
H
e
a
d
)
E
L
S
E
I
F
/
F
l
a
g
.
E
Q
.
′
Q
′
J
U
M
P
T
O
/
(
Q
U
I
T
)
E
N
D
I
F
E
N
D
I
F
C
L
O
S
E
/
D
I
D
(
S
Q
U
A
R
E
D
I
D
)
Flag = PROMPT/' 是否输出检测报告头? Y ----- 是,N ----- 否,Q ----- 退出' IF/Flag.EQ.'Y' CALL/M(ReportHead) ELSE IF/Flag.EQ.'Q' JUMPTO/(QUIT) ENDIF ENDIF CLOSE/DID(SQUAREDID)
Flag=PROMPT/′是否输出检测报告头?Y−−−−−是,N−−−−−否,Q−−−−−退出′IF/Flag.EQ.′Y′CALL/M(ReportHead)ELSEIF/Flag.EQ.′Q′JUMPTO/(QUIT)ENDIFENDIFCLOSE/DID(SQUAREDID)
Dim_SPH = PROMPT/‘请输入球规直径,并在球极上手动测量一点:’
Rad_SPH = ASSIGN/(Dim_SPH / 2)
P
I
=
A
S
S
I
G
N
/
3.1415926
P
t
N
u
m
[
1
]
=
A
S
S
I
G
N
/
1
P
t
N
u
m
[
2
]
=
A
S
S
I
G
N
/
4
P
t
N
u
m
[
3
]
=
A
S
S
I
G
N
/
8
P
t
N
u
m
[
4
]
=
A
S
S
I
G
N
/
12
F
e
a
N
u
m
=
A
S
S
I
G
N
/
1
PI = ASSIGN/3.1415926 PtNum[1] = ASSIGN/1 PtNum[2] = ASSIGN/4 PtNum[3] = ASSIGN/8 PtNum[4] = ASSIGN/12 FeaNum = ASSIGN/1
PI=ASSIGN/3.1415926PtNum[1]=ASSIGN/1PtNum[2]=ASSIGN/4PtNum[3]=ASSIGN/8PtNum[4]=ASSIGN/12FeaNum=ASSIGN/1
MODE/MAN
F(PT_M) = FEAT/POINT,CART, 0.0, 0.0, 30.0, 0.0, 0.0, 1.0
MEAS/POINT, F(PT_M), 1
PTMEAS/CART, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0
ENDMES
D(CRD1) = TRANS/XORIG, FA(PT_M), YORIG, FA(PT_M), ZORIG, FA(PT_M)
D(CRD1) = TRANS/XORIG, 0, YORIG, 0, ZORIG, - Rad_SPH
DECL/CHAR,255,PRE_LABEL
IF/(A0B0 .EQ. 1)
PRE_LABEL = ASSIGN/ ‘A0B0_’
ENDIF
IF/(A90B0 .EQ. 1)
PRE_LABEL = ASSIGN/ ‘A90B0_’
D(CRD2) = ROTATE/XAXIS, -90
ENDIF
IF/(A90B90 .EQ. 1)
PRE_LABEL = ASSIGN/ ‘A90B90_’
D(CRD1) = ROTATE/YAXIS, -90
ENDIF
IF/(A90B180 .EQ. 1)
PRE_LABEL = ASSIGN/ ‘A90B180_’
D(CRD1) = ROTATE/XAXIS, 90
ENDIF
IF/(A90NB90 .EQ. 1)
PRE_LABEL = ASSIGN/ ‘A90NB90_’
D(CRD1) = ROTATE/YAXIS, 90
ENDIF
S
N
S
E
T
/
A
P
P
R
C
H
,
12
S
N
S
E
T
/
R
E
T
R
C
T
,
12
T
M
P
=
V
A
L
U
E
/
S
N
S
E
T
,
R
E
T
R
C
T
P
R
P
O
S
=
A
S
S
I
G
N
/
R
a
d
S
P
H
+
T
M
P
SNSET/APPRCH, 12 SNSET/RETRCT, 12 TMP = VALUE/SNSET, RETRCT PR_POS = ASSIGN/Rad_SPH + TMP
SNSET/APPRCH,12SNSET/RETRCT,12TMP=VALUE/SNSET,RETRCTPRPOS=ASSIGN/RadSPH+TMP
S
e
t
.
M
o
t
i
o
n
P
a
t
h
.
O
N
Set.MotionPath.ON
Set.MotionPath.ON Set.MeasPath.ON
M
O
D
E
/
P
R
O
G
,
M
A
N
F
(
S
P
H
)
=
F
E
A
T
/
S
P
H
E
R
E
,
O
U
T
E
R
,
C
A
R
T
,
0.0
,
0.0
,
0.0
,
D
i
m
S
P
H
,
0.0
,
0.0
,
1.0
M
E
A
S
/
S
P
H
E
R
E
,
F
(
S
P
H
)
,
5
P
T
M
E
A
S
/
P
O
L
,
0.0
,
0.0
,
R
a
d
S
P
H
,
0.0
,
0.0
,
1.0
G
O
T
O
/
P
O
L
,
P
R
P
O
S
,
0.0
,
P
R
P
O
S
∗
C
O
S
(
P
I
/
6
)
G
O
T
O
/
P
O
L
,
P
R
P
O
S
,
0.0
,
P
R
P
O
S
∗
C
O
S
(
P
I
/
3
)
P
T
M
E
A
S
/
P
O
L
,
R
a
d
S
P
H
,
0.0
,
0.0
,
1.0
,
0.0
,
0.0
G
O
T
O
/
P
O
L
,
P
R
P
O
S
,
30.0
,
0.0
G
O
T
O
/
P
O
L
,
P
R
P
O
S
,
60.0
,
0.0
P
T
M
E
A
S
/
P
O
L
,
R
a
d
S
P
H
,
90.0
,
0.0
,
0.0
,
1.0
,
0.0
G
O
T
O
/
P
O
L
,
P
R
P
O
S
,
120.0
,
0.0
G
O
T
O
/
P
O
L
,
P
R
P
O
S
,
150.0
,
0.0
P
T
M
E
A
S
/
P
O
L
,
R
a
d
S
P
H
,
180.0
,
0.0
,
−
1.0
,
0.0
,
0.0
G
O
T
O
/
P
O
L
,
P
R
P
O
S
,
210.0
,
0.0
G
O
T
O
/
P
O
L
,
P
R
P
O
S
,
240.0
,
0.0
P
T
M
E
A
S
/
P
O
L
,
R
a
d
S
P
H
,
270.0
,
0.0
,
0.0
,
−
1.0
,
0.0
G
O
T
O
/
P
O
L
,
P
R
P
O
S
,
270.0
,
P
R
P
O
S
∗
C
O
S
(
P
I
/
3
)
G
O
T
O
/
P
O
L
,
P
R
P
O
S
,
270.0
,
P
R
P
O
S
∗
C
O
S
(
P
I
/
6
)
G
O
T
O
/
P
O
L
,
0.0
,
0.0
,
P
R
P
O
S
G
O
T
O
/
P
O
L
,
0.0
,
0.0
,
P
R
P
O
S
+
10
E
N
D
M
E
S
D
(
C
R
D
1
)
=
T
R
A
N
S
/
X
O
R
I
G
,
F
A
(
S
P
H
)
,
Y
O
R
I
G
,
F
A
(
S
P
H
)
,
Z
O
R
I
G
,
F
A
(
S
P
H
)
MODE/PROG,MAN F(SPH) = FEAT/SPHERE,OUTER,CART, 0.0, 0.0, 0.0, Dim_SPH, 0.0, 0.0, 1.0 MEAS/SPHERE, F(SPH), 5 PTMEAS/POL, 0.0, 0.0, Rad_SPH, 0.0, 0.0, 1.0 GOTO/POL, PR_POS, 0.0, PR_POS * COS(PI / 6) GOTO/POL, PR_POS, 0.0, PR_POS * COS(PI / 3) PTMEAS/POL, Rad_SPH, 0.0, 0.0, 1.0, 0.0, 0.0 GOTO/POL, PR_POS, 30.0, 0.0 GOTO/POL, PR_POS, 60.0, 0.0 PTMEAS/POL, Rad_SPH, 90.0, 0.0, 0.0, 1.0, 0.0 GOTO/POL, PR_POS, 120.0, 0.0 GOTO/POL, PR_POS, 150.0, 0.0 PTMEAS/POL, Rad_SPH, 180.0, 0.0, -1.0, 0.0, 0.0 GOTO/POL, PR_POS, 210.0, 0.0 GOTO/POL, PR_POS, 240.0, 0.0 PTMEAS/POL, Rad_SPH, 270.0, 0.0, 0.0, -1.0, 0.0 GOTO/POL, PR_POS, 270.0, PR_POS * COS(PI / 3) GOTO/POL, PR_POS, 270.0, PR_POS * COS(PI / 6) GOTO/POL, 0.0, 0.0, PR_POS GOTO/POL, 0.0, 0.0, PR_POS + 10 ENDMES D(CRD1) = TRANS/XORIG, FA(SPH), YORIG, FA(SPH), ZORIG, FA(SPH)
MODE/PROG,MANF(SPH)=FEAT/SPHERE,OUTER,CART,0.0,0.0,0.0,DimSPH,0.0,0.0,1.0MEAS/SPHERE,F(SPH),5PTMEAS/POL,0.0,0.0,RadSPH,0.0,0.0,1.0GOTO/POL,PRPOS,0.0,PRPOS∗COS(PI/6)GOTO/POL,PRPOS,0.0,PRPOS∗COS(PI/3)PTMEAS/POL,RadSPH,0.0,0.0,1.0,0.0,0.0GOTO/POL,PRPOS,30.0,0.0GOTO/POL,PRPOS,60.0,0.0PTMEAS/POL,RadSPH,90.0,0.0,0.0,1.0,0.0GOTO/POL,PRPOS,120.0,0.0GOTO/POL,PRPOS,150.0,0.0PTMEAS/POL,RadSPH,180.0,0.0,−1.0,0.0,0.0GOTO/POL,PRPOS,210.0,0.0GOTO/POL,PRPOS,240.0,0.0PTMEAS/POL,RadSPH,270.0,0.0,0.0,−1.0,0.0GOTO/POL,PRPOS,270.0,PRPOS∗COS(PI/3)GOTO/POL,PRPOS,270.0,PRPOS∗COS(PI/6)GOTO/POL,0.0,0.0,PRPOSGOTO/POL,0.0,0.0,PRPOS+10ENDMESD(CRD1)=TRANS/XORIG,FA(SPH),YORIG,FA(SPH),ZORIG,FA(SPH)
S
e
t
.
M
o
t
i
o
n
P
a
t
h
.
C
L
E
A
R
Set.MotionPath.CLEAR
Set.MotionPath.CLEAR Set.MeasPath.CLEAR
$$
(REMEA)
RECALL/D(CRD1)
TEXT/MAN,‘请确认探头角度已经旋转’
XZJD = PROMPT/CHECK,‘A0 B0’,A0B0,$
CHECK,‘A90 B0’,A90B0,$
CHECK,‘A90 B90’,A90B90,$
CHECK,‘A90 B180’,A90B180,$
CHECK,‘A90 B-90’,A90NB90,$
TITLE,‘请选择使用的角度’
IF/(A0B0 .EQ. 1)
PRE_LABEL = ASSIGN/ ‘A0B0_’
ENDIF
IF/(A90B0 .EQ. 1)
PRE_LABEL = ASSIGN/ ‘A90B0_’
D(CRD2) = ROTATE/XAXIS, -90
ENDIF
IF/(A90B90 .EQ. 1)
PRE_LABEL = ASSIGN/ ‘A90B90_’
D(CRD2) = ROTATE/YAXIS, -90
D(CRD2) = ROTATE/ZAXIS, 90
ENDIF
IF/(A90B180 .EQ. 1)
PRE_LABEL = ASSIGN/ ‘A90B180_’
D(CRD2) = ROTATE/XAXIS, 90
D(CRD2) = ROTATE/ZAXIS, 180
ENDIF
IF/(A90NB90 .EQ. 1)
PRE_LABEL = ASSIGN/ ‘A90NB90_’
D(CRD2) = ROTATE/YAXIS, 90
D(CRD2) = ROTATE/ZAXIS, -90
ENDIF
WKPLAN/XYPLAN
DO/Sect, 1, 4, 1
DO/Num, 0, (PtNum[Sect] - 1), 1
IF/(Sect.EQ.1)
R
a
=
A
S
S
I
G
N
/
0.0
A
n
g
=
A
S
S
I
G
N
/
0.0
H
=
A
S
S
I
G
N
/
R
a
d
S
P
H
Ra = ASSIGN/0.0 Ang = ASSIGN/0.0 H = ASSIGN/Rad_SPH
Ra=ASSIGN/0.0Ang=ASSIGN/0.0H=ASSIGN/RadSPH
DX = ASSIGN/0.0
DY = ASSIGN/0.0
DZ = ASSIGN/1.0
$$
ELSE
IF/(A0B0 .EQ. 1)
R
a
=
A
S
S
I
G
N
/
(
R
a
d
S
P
H
∗
S
I
N
(
(
S
e
c
t
−
1
)
∗
P
I
/
6
)
)
A
n
g
=
A
S
S
I
G
N
/
(
360
∗
N
u
m
/
P
t
N
u
m
[
S
e
c
t
]
)
H
=
A
S
S
I
G
N
/
(
R
a
d
S
P
H
∗
C
O
S
(
(
S
e
c
t
−
1
)
∗
P
I
/
6
)
)
Ra = ASSIGN/(Rad_SPH * SIN ((Sect - 1) * PI / 6)) Ang = ASSIGN/(360 * Num / PtNum[Sect]) H = ASSIGN/(Rad_SPH * COS((Sect - 1) * PI / 6))
Ra=ASSIGN/(RadSPH∗SIN((Sect−1)∗PI/6))Ang=ASSIGN/(360∗Num/PtNum[Sect])H=ASSIGN/(RadSPH∗COS((Sect−1)∗PI/6))
DX = ASSIGN/COS (2 * PI * Num / PtNum[Sect]) * SIN ((Sect - 1) * PI / 6)
DY = ASSIGN/SIN (2 * PI * Num / PtNum[Sect]) * SIN ((Sect - 1) * PI / 6)
DZ = ASSIGN/COS ((Sect - 1) * PI / 6)
ELSE
R
a
=
A
S
S
I
G
N
/
(
R
a
d
S
P
H
∗
S
I
N
(
(
S
e
c
t
−
1
)
∗
P
I
/
6
)
)
A
n
g
=
A
S
S
I
G
N
/
(
270
∗
N
u
m
/
P
t
N
u
m
[
S
e
c
t
]
+
(
135
+
270
/
2
/
P
t
N
u
m
[
S
e
c
t
]
)
)
H
=
A
S
S
I
G
N
/
(
R
a
d
S
P
H
∗
C
O
S
(
(
S
e
c
t
−
1
)
∗
P
I
/
6
)
)
Ra = ASSIGN/(Rad_SPH * SIN ((Sect - 1) * PI / 6)) Ang = ASSIGN/(270 * Num / PtNum[Sect]+(135+270/2/PtNum[Sect])) H = ASSIGN/(Rad_SPH * COS((Sect - 1) * PI / 6))
Ra=ASSIGN/(RadSPH∗SIN((Sect−1)∗PI/6))Ang=ASSIGN/(270∗Num/PtNum[Sect]+(135+270/2/PtNum[Sect]))H=ASSIGN/(RadSPH∗COS((Sect−1)∗PI/6))
DX = ASSIGN/COS (1.5 * PI * Num / PtNum[Sect]+(135+270/2/PtNum[Sect])*PI/180) * SIN ((Sect - 1) * PI / 6)
DY = ASSIGN/SIN (1.5 * PI * Num / PtNum[Sect]+(135+270/2/PtNum[Sect])*PI/180) * SIN ((Sect - 1) * PI / 6)
DZ = ASSIGN/COS ((Sect - 1) * PI / 6)
ENDIF
E
N
D
I
F
ENDIF
ENDIF
FeaName = ASSIGN/CONCAT(PRE_LABEL, ‘PT’, STR(FeaNum))
F(FeaName) = FEAT/POINT, POL, Ra, Ang, H, DX, DY, DZ
MEAS/POINT, F(FeaName), 1
PTMEAS/POL, Ra, Ang, H, DX, DY, DZ
ENDMES
FeaNum = ASSIGN/(FeaNum + 1)
E
N
D
D
O
G
O
T
O
/
P
O
L
,
P
R
P
O
S
,
330.0
,
P
R
P
O
S
∗
C
O
S
(
P
I
/
6
)
G
O
T
O
/
P
O
L
,
0.0
,
0.0
,
P
R
P
O
S
E
N
D
D
O
ENDDO GOTO/POL, PR_POS, 330.0, PR_POS * COS(PI / 6) GOTO/POL, 0.0, 0.0, PR_POS ENDDO
ENDDOGOTO/POL,PRPOS,330.0,PRPOS∗COS(PI/6)GOTO/POL,0.0,0.0,PRPOSENDDOGOTO/POL, PR_POS, 330.0, PR_POS * COS(PI / 3)
RECALL/D(CRD1)
$$
DECL/CHAR,255,PT_LABEL[1,25]
DO/FeaNum,1,25,1
PT_LABEL[1,FeaNum] = ASSIGN/CONCAT(PRE_LABEL, ‘PT’, STR(FeaNum))
ENDDO
DECL/CHAR,255,BFSP_LABEL
BFSP_LABEL = ASSIGN/ CONCAT(‘BFSP’,PRE_LABEL)
F(BFSP_LABEL) = FEAT/SPHERE,OUTER,POL, 0.0, 0.0, 0.0, Dim_SPH
CONST/SPHERE,F(BFSP_LABEL),BF,FA(PT_LABEL[1,1]),FA(PT_LABEL[1,2]),FA(PT_LABEL[1,3]),FA(PT_LABEL[1,4]),FA(PT_LABEL[1,5]),FA(PT_LABEL[1,6]),$
FA(PT_LABEL[1,7]),FA(PT_LABEL[1,8]),FA(PT_LABEL[1,9]),FA(PT_LABEL[1,10]),FA(PT_LABEL[1,11]),FA(PT_LABEL[1,12]),FA(PT_LABEL[1,13]),FA(PT_LABEL[1,14]),$
FA(PT_LABEL[1,15]),FA(PT_LABEL[1,16]),FA(PT_LABEL[1,17]),FA(PT_LABEL[1,18]),FA(PT_LABEL[1,19]),FA(PT_LABEL[1,20]),FA(PT_LABEL[1,21]),FA(PT_LABEL[1,22]),$
FA(PT_LABEL[1,23]),FA(PT_LABEL[1,24]),FA(PT_LABEL[1,25])
D(CRD3) = TRANS/XORIG, FA(BFSP_LABEL), YORIG, FA(BFSP_LABEL), ZORIG, FA(BFSP_LABEL)
F(BFSP_LABEL) = FEAT/SPHERE,OUTER,POL, 0.0, 0.0, 0.0, Dim_SPH
M
a
x
P
r
a
=
A
S
S
I
G
N
/
0.0
M
i
n
P
r
a
=
A
S
S
I
G
N
/
100.0
M
a
x
N
u
m
=
A
S
S
I
G
N
/
0
M
i
n
N
u
m
=
A
S
S
I
G
N
/
0
MaxPra = ASSIGN/0.0 MinPra = ASSIGN/100.0 MaxNum = ASSIGN/0 MinNum = ASSIGN/0
MaxPra=ASSIGN/0.0MinPra=ASSIGN/100.0MaxNum=ASSIGN/0MinNum=ASSIGN/0
DO/Num, 1, 25, 1
FeaName = ASSIGN/CONCAT(PRE_LABEL, ‘PT’, STR(Num))
X = OBTAIN/FA(FeaName), 3
Y = OBTAIN/FA(FeaName), 4
Z = OBTAIN/FA(FeaName), 5
Pra = ASSIGN/SQRT(X * X + Y * Y + Z * Z)
IF/(Pra.GT.MaxPra)
MaxPra = ASSIGN/Pra
MaxNum = ASSIGN/Num
ENDIF
IF/(Pra.LT.MinPra)
MinPra = ASSIGN/Pra
MinNum = ASSIGN/Num
ENDIF
ENDDO
$$
DECL/DOUBLE,Rad_SPH_A
Rad_SPH_A = OBTAIN/FA(BFSP_LABEL), 7
ER = ASSIGN/(MaxPra - MinPra)
DID(SQUAREDID) = DEVICE/STOR, ‘E:\Program Files\RationalDMIS\Output\R.out’
OPEN/DID(SQUAREDID), DIRECT, OUTPUT, APPEND
WRITE/DID(SQUAREDID), ‘’
WRITE/DID(SQUAREDID), PRE_LABEL,’ 探测误差 : ', ER
WRITE/DID(SQUAREDID), ‘’
WRITE/DID(SQUAREDID), ’ 球规实测直径 : ', Rad_SPH_A
WRITE/DID(SQUAREDID), ‘’
WRITE/DID(SQUAREDID), ’ 球规测量最大半径 : ', MaxPra:6, $
’ 最大点半径序号 : ', MaxNum
WRITE/DID(SQUAREDID), ‘’
WRITE/DID(SQUAREDID), ’ 球规测量最小半径 : ', MinPra:6, $
’ 最小点半径序号 : ', MinNum
WRITE/DID(SQUAREDID), $
‘*****************************************************************************************’
CLOSE/DID(SQUAREDID)
$$
Flag = PROMPT/’ 是否继续手动旋转测头并测量?如果继续测量请旋转角度后从第149行执行 Y ----- 是, N ----- 否’
IF/(Flag .EQ. ‘Y’)
FeaNum = ASSIGN/1
JUMPTO/(CONTINE_MEAS)
ELSE
JUMPTO/(OUTPUT_RESULT)
ENDIF
$$
(OUTPUT_RESULT)
F(BFSP_125) = FEAT/SPHERE,OUTER,CART, -0.000000, -0.000000, -0.000000, Dim_SPH
CONST/SPHERE,F(BFSP_125),BF,FA(A0B0_PT1),FA(A0B0_PT2),FA(A0B0_PT3),$
FA(A0B0_PT4),FA(A0B0_PT5),FA(A0B0_PT6),FA(A0B0_PT7),FA(A0B0_PT8),$
FA(A0B0_PT9),FA(A0B0_PT10),FA(A0B0_PT11),FA(A0B0_PT12),FA(A0B0_PT13),$
FA(A0B0_PT14),FA(A0B0_PT15),FA(A0B0_PT16),FA(A0B0_PT17),FA(A0B0_PT18),$
FA(A0B0_PT19),FA(A0B0_PT20),FA(A0B0_PT21),FA(A0B0_PT22),FA(A0B0_PT23),$
FA(A0B0_PT24),FA(A0B0_PT25),FA(A90B0_PT1),FA(A90B0_PT2),FA(A90B0_PT3),$
FA(A90B0_PT4),FA(A90B0_PT5),FA(A90B0_PT6),FA(A90B0_PT7),FA(A90B0_PT8),$
FA(A90B0_PT9),FA(A90B0_PT10),FA(A90B0_PT11),FA(A90B0_PT12),FA(A90B0_PT13),$
FA(A90B0_PT14),FA(A90B0_PT15),FA(A90B0_PT16),FA(A90B0_PT17),FA(A90B0_PT18),$
FA(A90B0_PT19),FA(A90B0_PT20),FA(A90B0_PT21),FA(A90B0_PT22),FA(A90B0_PT23),$
FA(A90B0_PT24),FA(A90B0_PT25),FA(A90B90_PT1),FA(A90B90_PT2),FA(A90B90_PT3),$
FA(A90B90_PT4),FA(A90B90_PT5),FA(A90B90_PT6),FA(A90B90_PT7),FA(A90B90_PT8),$
FA(A90B90_PT9),FA(A90B90_PT10),FA(A90B90_PT11),FA(A90B90_PT12),$
FA(A90B90_PT13),FA(A90B90_PT14),FA(A90B90_PT15),FA(A90B90_PT16),$
FA(A90B90_PT17),FA(A90B90_PT18),FA(A90B90_PT19),FA(A90B90_PT20),$
FA(A90B90_PT21),FA(A90B90_PT22),FA(A90B90_PT23),FA(A90B90_PT24),$
FA(A90B90_PT25),FA(A90B180_PT1),FA(A90B180_PT2),FA(A90B180_PT3),$
FA(A90B180_PT4),FA(A90B180_PT5),FA(A90B180_PT6),FA(A90B180_PT7),$
FA(A90B180_PT8),FA(A90B180_PT9),FA(A90B180_PT10),FA(A90B180_PT11),$
FA(A90B180_PT12),FA(A90B180_PT13),FA(A90B180_PT14),FA(A90B180_PT15),$
FA(A90B180_PT16),FA(A90B180_PT17),FA(A90B180_PT18),FA(A90B180_PT19),$
FA(A90B180_PT20),FA(A90B180_PT21),FA(A90B180_PT22),FA(A90B180_PT23),$
FA(A90B180_PT24),FA(A90B180_PT25),FA(A90NB90_PT1),FA(A90NB90_PT2),$
FA(A90NB90_PT3),FA(A90NB90_PT4),FA(A90NB90_PT5),FA(A90NB90_PT6),$
FA(A90NB90_PT7),FA(A90NB90_PT8),FA(A90NB90_PT9),FA(A90NB90_PT10),$
FA(A90NB90_PT11),FA(A90NB90_PT12),FA(A90NB90_PT13),FA(A90NB90_PT14),$
FA(A90NB90_PT15),FA(A90NB90_PT16),FA(A90NB90_PT17),FA(A90NB90_PT18),$
FA(A90NB90_PT19),FA(A90NB90_PT20),FA(A90NB90_PT21),FA(A90NB90_PT22),$
FA(A90NB90_PT23),FA(A90NB90_PT24),FA(A90NB90_PT25)
D(CRD4) = TRANS/XORIG, FA(BFSP_125), YORIG, FA(BFSP_125), ZORIG, FA(BFSP_125)
DECL/DOUBLE,DIAM_125,DIAM_125_DEV
DIAM_125 = OBTAIN/FA(BFSP_125),7
DIAM_125_DEV = ASSIGN/ DIAM_125 - Dim_SPH
F(A0B0) = FEAT/SPHERE,OUTER,CART, -0.000000, -0.000000, -0.000000, Dim_SPH
CONST/SPHERE,F(A0B0),BF,FA(A0B0_PT1),FA(A0B0_PT2),FA(A0B0_PT3),$
FA(A0B0_PT4),FA(A0B0_PT5),FA(A0B0_PT6),FA(A0B0_PT7),FA(A0B0_PT8),$
FA(A0B0_PT9),FA(A0B0_PT10),FA(A0B0_PT11),FA(A0B0_PT12),FA(A0B0_PT13),$
FA(A0B0_PT14),FA(A0B0_PT15),FA(A0B0_PT16),FA(A0B0_PT17),FA(A0B0_PT18),$
FA(A0B0_PT19),FA(A0B0_PT20),FA(A0B0_PT21),FA(A0B0_PT22),FA(A0B0_PT23),$
FA(A0B0_PT24),FA(A0B0_PT25)
F(A90B0) = FEAT/SPHERE,OUTER,CART, -0.000000, -0.000000, -0.000000, Dim_SPH
CONST/SPHERE,F(A90B0),BF,FA(A90B0_PT1),FA(A90B0_PT2),FA(A90B0_PT3),$
FA(A90B0_PT4),FA(A90B0_PT5),FA(A90B0_PT6),FA(A90B0_PT7),FA(A90B0_PT8),$
FA(A90B0_PT9),FA(A90B0_PT10),FA(A90B0_PT11),FA(A90B0_PT12),FA(A90B0_PT13),$
FA(A90B0_PT14),FA(A90B0_PT15),FA(A90B0_PT16),FA(A90B0_PT17),FA(A90B0_PT18),$
FA(A90B0_PT19),FA(A90B0_PT20),FA(A90B0_PT21),FA(A90B0_PT22),FA(A90B0_PT23),$
FA(A90B0_PT24),FA(A90B0_PT25)
F(A90B90) = FEAT/SPHERE,OUTER,CART, -0.000000, -0.000000, -0.000000, Dim_SPH
CONST/SPHERE,F(A90B90),BF,FA(A90B90_PT1),FA(A90B90_PT2),FA(A90B90_PT3),$
FA(A90B90_PT4),FA(A90B90_PT5),FA(A90B90_PT6),FA(A90B90_PT7),FA(A90B90_PT8),$
FA(A90B90_PT9),FA(A90B90_PT10),FA(A90B90_PT11),FA(A90B90_PT12),$
FA(A90B90_PT13),FA(A90B90_PT14),FA(A90B90_PT15),FA(A90B90_PT16),$
FA(A90B90_PT17),FA(A90B90_PT18),FA(A90B90_PT19),FA(A90B90_PT20),$
FA(A90B90_PT21),FA(A90B90_PT22),FA(A90B90_PT23),FA(A90B90_PT24),$
FA(A90B90_PT25)
F(A90B180) = FEAT/SPHERE,OUTER,CART, -0.000000, -0.000000, -0.000000, Dim_SPH
CONST/SPHERE,F(A90B180),BF,FA(A90B180_PT1),FA(A90B180_PT2),FA(A90B180_PT3),$
FA(A90B180_PT4),FA(A90B180_PT5),FA(A90B180_PT6),FA(A90B180_PT7),$
FA(A90B180_PT8),FA(A90B180_PT9),FA(A90B180_PT10),FA(A90B180_PT11),$
FA(A90B180_PT12),FA(A90B180_PT13),FA(A90B180_PT14),FA(A90B180_PT15),$
FA(A90B180_PT16),FA(A90B180_PT17),FA(A90B180_PT18),FA(A90B180_PT19),$
FA(A90B180_PT20),FA(A90B180_PT21),FA(A90B180_PT22),FA(A90B180_PT23),$
FA(A90B180_PT24),FA(A90B180_PT25)
F(A90NB90) = FEAT/SPHERE,OUTER,CART, -0.000000, -0.000000, -0.000000, Dim_SPH
CONST/SPHERE,F(A90NB90),BF,FA(A90NB90_PT1),FA(A90NB90_PT2),$
FA(A90NB90_PT3),FA(A90NB90_PT4),FA(A90NB90_PT5),FA(A90NB90_PT6),$
FA(A90NB90_PT7),FA(A90NB90_PT8),FA(A90NB90_PT9),FA(A90NB90_PT10),$
FA(A90NB90_PT11),FA(A90NB90_PT12),FA(A90NB90_PT13),FA(A90NB90_PT14),$
FA(A90NB90_PT15),FA(A90NB90_PT16),FA(A90NB90_PT17),FA(A90NB90_PT18),$
FA(A90NB90_PT19),FA(A90NB90_PT20),FA(A90NB90_PT21),FA(A90NB90_PT22),$
FA(A90NB90_PT23),FA(A90NB90_PT24),FA(A90NB90_PT25)
DECL/COMMON,REAL,E[15]
E[1] = OBTAIN/FA(A0B0),4
E[2] = OBTAIN/FA(A0B0),5
E[3] = OBTAIN/FA(A0B0),6
E[4] = OBTAIN/FA(A90B0),4
E[5] = OBTAIN/FA(A90B0),5
E[6] = OBTAIN/FA(A90B0),6
E[7] = OBTAIN/FA(A90B90),4
E[8] = OBTAIN/FA(A90B90),5
E[9] = OBTAIN/FA(A90B90),6
E[10] = OBTAIN/FA(A90B180),4
E[11] = OBTAIN/FA(A90B180),5
E[12] = OBTAIN/FA(A90B180),6
E[13] = OBTAIN/FA(A90NB90),4
E[14] = OBTAIN/FA(A90NB90),5
E[15] = OBTAIN/FA(A90NB90),6
DECL/COMMON,CHAR,256,I
KNPTN1 = ASSIGN/1
DO/KNPTN1,1,15
I = ASSIGN/STR(KNPTN1)
IF/E[KNPTN1].LT.0
E[KNPTN1] = ASSIGN/-E[KNPTN1]
ENDIF
ENDDO
KNPTR1 = ASSIGN/E[1]
KNPTN1 = ASSIGN/1
DO/KNPTN1,1,15
I = ASSIGN/STR(KNPTN1)
IF/E[KNPTN1].GT.KNPTR1
KNPTR1 = ASSIGN/E[KNPTN1]
ENDIF
ENDDO
M
a
x
P
r
a
=
A
S
S
I
G
N
/
0.0
M
i
n
P
r
a
=
A
S
S
I
G
N
/
100.0
M
a
x
N
u
m
=
A
S
S
I
G
N
/
0
M
i
n
N
u
m
=
A
S
S
I
G
N
/
0
MaxPra = ASSIGN/0.0 MinPra = ASSIGN/100.0 MaxNum = ASSIGN/0 MinNum = ASSIGN/0
MaxPra=ASSIGN/0.0MinPra=ASSIGN/100.0MaxNum=ASSIGN/0MinNum=ASSIGN/0
DECL/INTGR,KNPTN4
DID(SQUAREDID) = DEVICE/STOR, ‘E:\Program Files\RationalDMIS\Output\R.out’
OPEN/DID(SQUAREDID), DIRECT, OUTPUT, APPEND
WRITE/DID(SQUAREDID), ’ AL : ', KNPTR1
CLOSE/DID(SQUAREDID)
DO/KNPTN4,1,5,1
IF/(KNPTN4 .EQ. 1)
PRE_LABEL = ASSIGN/ 'A0B0_'
ENDIF
IF/(KNPTN4 .EQ. 1)
PRE_LABEL = ASSIGN/ 'A90B0_'
ENDIF
IF/(KNPTN4 .EQ. 1)
PRE_LABEL = ASSIGN/ 'A90B90_'
ENDIF
IF/(KNPTN4 .EQ. 1)
PRE_LABEL = ASSIGN/ 'A90B180_'
ENDIF
IF/(KNPTN4 .EQ. 1)
PRE_LABEL = ASSIGN/ 'A90NB90_'
ENDIF
DO/Num, 1, 25, 1
FeaName = ASSIGN/CONCAT(PRE_LABEL, 'PT', STR(Num))
X = OBTAIN/FA(FeaName), 3
Y = OBTAIN/FA(FeaName), 4
Z = OBTAIN/FA(FeaName), 5
Pra = ASSIGN/SQRT(X * X + Y * Y + Z * Z)
IF/(Pra.GT.MaxPra)
MaxPra = ASSIGN/Pra
MaxNum = ASSIGN/Num
ENDIF
IF/(Pra.LT.MinPra)
MinPra = ASSIGN/Pra
MinNum = ASSIGN/Num
ENDIF
ENDDO
IF/(MaxPra .GT. FINAL_MaxPra)
FINAL_MaxPra = ASSIGN/ MaxPra
ENDIF
IF/(MinPra .LT. FINAL_MinPra)
FINAL_MinPra = ASSIGN/ MinPra
ENDIF
ENDDO
ER = ASSIGN/ (FINAL_MaxPra - FINAL_MinPra)
DID(SQUAREDID) = DEVICE/STOR, ‘E:\Program Files\RationalDMIS\Output\R.out’
OPEN/DID(SQUAREDID), DIRECT, OUTPUT, APPEND
WRITE/DID(SQUAREDID), ‘125点拟合球’
WRITE/DID(SQUAREDID), ‘’
WRITE/DID(SQUAREDID), ’ 125点拟合球规实测直径 : ', DIAM_125
WRITE/DID(SQUAREDID), ‘’
WRITE/DID(SQUAREDID), ’ 125点拟合球直径和标准直径之差AS : ', DIAM_125_DEV
WRITE/DID(SQUAREDID), ‘’
WRITE/DID(SQUAREDID), ’ 125点到拟合球中心半径范围AF : ', ER
WRITE/DID(SQUAREDID), $
‘*****************************************************************************************’
CLOSE/DID(SQUAREDID)
(CONTINE_MEAS)
(QUIT)