Вы находитесь на странице: 1из 10

SAS" Graphics Competition Winner

Top Award: Experienced Division


and
First Place: Best Presentation of Data-Experienced Division
Chris Bonar
Boeing Commercial Airplane Group

N/C Milling Machine Capability Study


Resultant for all parts

y+

Average Deviation From Nominal


0.005
0.001
0.003

0.004
0.000
0.004

1587

0.003

?;1__:'~!t:trt:"%~

0.001

0.005

L
... r:

-0.002
0.002

x+

-Color Stereographic Projection for a Machine CapabilITy Study


Machine Capability Studies (MCSs) are used throughout
manufacturing industries to help understand the natural
variation of machine tools. This graph was developed for
analyzing the ~ults from an MCS. The method uses
SAS/GRAPH"" GCONTOUR procedure to produce color
stereographic projections or "maps" of the variation
within test parts. These maps can reveal interactions
between machine axes that are otherwise hidden using
conventional techniques.

different projection methods because it is an equal area


projection technique, which is valid for statistical studies.
A Polar Stereographic Projection (Figure Z)is
accomplished by constructing a line from the base of the
sphere (South Pole) to the point of interest and extending
it to the point of intersection with a plane tangent to the
top of the sphere (North Pole).
For any point A (Figure 3), the projected position A'
will have coordinate values on the projection plane
.
(Figure 4) given by:

The data is from three test parts used during the MCS.
The parts were dome shaped (Figure I) to test the
machine's multiple axes capability.

It

x = 2RS....

(
4
It

Y=2RS... (
4

Where:

~=

). sin l.

) cml.

Angle of Latitude in radians

A. = Angle of Longitude in radians

R = Spherical radius
S = Scaling factor (l=full size)
PIaoe of projectioa

PLA'

T86t Part

Figure I

Figure 3

Each part was probed on a Coordinate Measuring


Machine (CMM), which provided measurements in terms
of theoretical vs. actual X, Y and Z coordinates. Since
the shape of the part is in theory a perfect hemisPbere
with a radius of 1.500 inches, a comparison of the actual
radius value computed from the X, Y and Z components
can be made by subtracting one from the other. Thus, for
any point on the hemisphere's surface, the actual radius,
Ro, can be subtracted from the theoretical radius, R t (=
l.'SOO), obtaining the difference in terms of deviation
from nominal. For example, if Ra = 1.498, then 1.498 1.500 = -.OOZ inches (undersize in this case). Each part
had 649 measured points and these were converted into
deviations from nominal, or resultant values

H-i+Bffit+-l.-

Ptuw ofPhjedian

Figure 4
On the plot, it was necessary to use color because two
error conditions could exisl In one condition the part
could be undersize. Shades of red were used to depict
this. The other condition is when the part is oversize.
Blue was used to depict this. If the part is to size

(nominal) then it is white.


On the plot, the very center represents the top of the part,
or North Pole. The concentric rings represent lines of
latitude, with the outermost ring being the Equator. The
coordinate system for the machine is identified to the
right of the plOl
FigureZ
The plot shows areas of both undersize and oversize
conditions. It shows that the tops of the parts were cut
oversize, yet no more than +.003. What stands out though
is the area cut undersize in the 3rd quadranl It happens in
an area when both X and Y axis are in motion.

Since the part area being tested was a hemisphere,


contour mapping techniques could be used to project this
shape onto a flat plane. Contour lines could then be
drawn on this map to depict changes in elevation. A
Polar Sterographic projection was selected from dozens of
1588

Sample of the raw data

NUM
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1
2
3
4
5
6

XN
1. 5000
1. 4942
1.4771
1.4485
1. 4089
1. 3584
1. 2976
1. 2268
1.1466
1.0576
0.9605
0.8561
0.7450
0.6283
0.5067
0.3813
0.2530
0.1227
0.0000
1. 4770
1.4720
1. 4546
1. 4265
1.3875
1.3378
1.2779
1.2082
1.1292
1.0416
0.9459
0.8430
0.7337
0.6187
0.4991
0.3755
0.2491
0.1208
0.0000
1. 4095
1. 4041
1.3880
1.3612
1. 3239
1.2765
1. 2193
1.1528
1.0775
0.9938
0.9026
0.8044
0.7001
0.5904
0.4762
0.3583
0.2377
0.1153
0.0000
1. 2990
1.2941
1.2792
1.2545
1. 2201
1.1764

YN
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.2605
0.2595
0.2565
0.2515
0.2446
0.2359
0.2253
0.2130
0.1991
0.1837
0.1668
0.1487
0.1294
0.1091
0.0880
0.0662
0.0439
0.0213
0.0000
0.5130
0.5111
0.5052
0.4954
0.4819
0.4646
0.4438
0.4196
0.3922
0.3617
0.3285
0.2928
0.2548
0.2149
0.1733
0.1304
0.0865
0.0420
0.0000
0.7500
0.7471
0.7385
0.7243
0.7044
0.6792

ZN
3.0000
3.1312
3.2614
3.3896
3.5148
3.6361
3.7525
3.8631
3.9671
4.0637
4.1521
4.2317
4.3019
4.3621
4.4118
4.4507
4.4785
4.4950
4.5000
3.0000
3.1312
3.2614
3.3896
3.5l48
3.6361
3.7525
3.8631
3.9671
4.0637
4.1521
4.2317
4.3019
4.3621
4.4118
4.4507
4.4785
4.4950
4.5000
3.0000
3.1312
3.2614
3.3896
3.5148
3.6361
3.7525
3.8631
3.9671
4.0637
4.1521
4.2317
4.3019
4.3621
4.4118
4.4507
4.4785
4.4950
4.5000
3.0000
3.1312
3.2614
3.3896
3.5148
3.6361

X
1.4996
1.4936
1.4762
1.4475
1. 4080
1.3574
1. 2966
1.2257
1.1457
1.0566
0.9597
0.8552
0.7440
0.6272
0.5056
0.3806
0.2516
0.1211
0.0004
1.4770
1.4712
1.4541
1. 4259
1. 3866
1.3366
1.2773
1.2072
1.1282
1. 0406
0.9447
0.8420
0.7323
0.6176
0.4978
0.3741
0.2475
0.1187
0.0003
1. 4099
1. 4037
1.3876
1.3604
1.3229
1.2757
1.2185
1.1521
1. 0767
0.9930
0.9013
0.8036
0.6992
0.5888
0.4750
0.3569
0.2356
0.1132
0.0003
1.2992
1.2932
1.2784
1.2537
1. 2194
1.1759

1589

-0.0010
-0.0018
-0.0020
-0.0020
-0.0018
-0.0018
-0.0017
-0.0019
-0.0015
-0.0019
-0.0014
-0.0019
-0.0013
-0.0016
-0.0009
-0.0018
-0.0008
-0.0017
-0.0001
0.2595
0.2583
0.2544
0.2498
0.2428
0.2343
0.2234
0.2113
0.1976
0.1817
0.1650
0.1469
0.1275
0.1072
0.0859
0.0642
0.0417
0.0193
-0.0001
0.5121
0.5099
0.5037
0.4941
0.4806
0.4631
0.4422
0.4181
0.3906
0.3604
0.3270
0.2912
0.2533
0.2134
0.1717
0.1283
0.0845
0.0398
-0.0001
0.7494
0.7460
0.7372
0.7231
0.7031
0.6780

2.9994
3.1310
3.2611
3.3893
3.5147
3.6363
3.7525
3.8630
3.9675
4.0637
4.1524
4.2320
4.3024
4.3627
4.4127
4.4519
4.4800
4.4957
4.5024
2.9997
3.1316
3.2610
3.3894
3.5147
3.6363
3.7528
3.8634
3.9672
4.0637
4.1527
4.2322
4.3026
4.3627
4.4132
4.4520
4.4800
4.4958
4.5024
2.9999
3.1316
3.2612
3.3897
3.5151
3.6361
3.7528
3.8636
3.9671
4.0643
4.1530
4.2325
4.3025
4.3630
4.4132
4.4521
4.4799
4.4957
4.5024
2.9998
3.1314
3.2610
3.3898
3.5151
3.6362

-0.0004
-0.0007
-0.0009
-0.0011
-0.0008
-0.0009
-0.0008
-0.0010
-0.0004
-0.0007
-0.0003
-0.0003
-0.0001
0.0001
0.0004
0.0010
0.0013
0.0006
0.0024
-0.0001
-0.0009
-0.0009
-0.0009
-0.0011
-0.0012
-0.0006
-0.0008
-0.0008
-0.0009
-0.0005
-0.0004
-0.0002
0.0000
0.0007
0.0008
0.0012
0.0006
0.0024
0.0000
-0.0008
-0.0009
-0.0011
-0.0012
-0.0012
-0.0010
-0.0007
-0.0010
-0.0005
-0.0005
-0.0002
-0.0002
0.0000
0.0007
0.0008
0.0009
0.0005
0.0024
-0.0002
-0.0013
-0.0014
-0.0011
-0.0012
-0.0010

Sample of SAS dataset "PLOTR"

aBS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

-0.45000
-0.40000
-0.35000
-0.30000
-0.25000
-0.20000
-0.15000
-0.10000
-0.05000
0.00000
0.05000
0.10000
0.15000
0.20000
0.25000
0.30000
0.35000
0.40000
-0.60000
-0.55000
-0.50000
~0.45000

-0.40000
-0.35000
-0.30000
-0.25000
-0.20000
-0.15000
-0.10000
-0.05000
0.00000
0.05000
0.10000
0.15000
0.20000
0.25000
0.30000
0.35000
0.40000
0.45000
0.50000
0.55000
0.60000
-0.75000
-0.70000
-0.65000
-0.60000

-2.00
-2.00
-2.00
-2.00
-2.00
-2.00
-2.00
-2.00
-2.00
-2.00
-2.00
-2.00
-2.00
-2.00
-2.00
-2.00
-2.00
-2.00
-1.95
-1. 95
-1. 95
-1. 95
-1. 95
-1.95
-1. 95
-1.95
-1.95
-1.95
-1.95
-1. 95
-1.95
-1. 95
-1. 95
-1.95
-1. 95
-1. 95
-1. 95
-1. 95
-1.95
-1.95
-1.95
-1.95
-1. 95
-1. 90
-1. 90
-1. 90
-1. 90

1590

DEVR

-.0018256
-.0018282
-.0018496
-.0018734
-.0018713
-.0018386
-.0017853
-.0017280
-.0016813
-.0016487
-.0016200
-.0015915
-.0015637
-.0015379
-.0015156
-.0014982
-.0014867
-.0014761
-.0019508
-.0019434
-.0019403
-.0019458
-.0019633
-.0019850
-.0020078
-.0020134
-.0019919
-.0019482
-.0018937
-.0018288
-.0017791
-.0017707
-.0017692
-.0017417
-.0016990
-.0016532
-.0016112
-.0015741
-.0015403
-.0015044
-.0014637
-.0014208
-.0013820
-.0019872
-.0019918
-.0019965
-.0019987

Code for generating contour plots


For this MCS, three test parts were used. Each part had it's surfaced probed in the following manner:
The domed surface (hemisphere) was defined in terms of curves, each curve represented a line of
longitude, starting at the middle (Equator) and ending at the top (North Pole). See Figure 1 below.
--~

)o..---CIJrve #2

L_

--~

L_

Figure 1
36 curves were defined around the part in 10 increments, with curve #1 =O longitude, curve #2 = 10
and so on moving counterclockwise around the part. Inspection points were defined along each curve in
5 increments of Latitude. Each part was measured twice at each point, which resulted in 1368
measured values. Note: the top of the part was measured for each curve, and so there was 72
measurements of the top. The rest of the part had 648 points, or 1296 measurements, for a total of 1368.

The Program
Three raw datasets are inputted in this macro. Each dataset has theoretical and actual X,Y and Z
coordinate values and a reference number (num) for the latitude. The raw data is presorted by longitude
(curve#).
%MACRO in;
DATA REP&n;
INFILE " DOME&n " ;
INPUT num xn yn zn x y z d;
(convert num into latitudes)
lat = (num*5)-5;
(the difference in radius values is calculated)
r&n = ((x**2+y**2+(z-1.5)**2)**.5) ((xn**2+yn**2+(zn-l.5)**2)**.5) ;
KEEP lat r&n;

1591

Assign curve and sub-sample numbers to raw data values. Convert curve #'s10 longitude values
DATA REP&n;
MERGE REP&n LABEL;
IF Cry >= 1 and Cry <= 10 ~EN do;
Ion = 90 + crv - 1)*10);~~d;
IF Cry > 10 and Cry <= 27 T.:EN do;
Ion = crv - 10) *10) - 180;'nd;
IF Cry >=28 and cry <= 36 THE,l do;
Ion = (crv - 28)*10;END;
DROP cry;

Pre-sort data prior to PROC MEANS


PROC SORT;
BY lat Ion sub;
RUN;

Combine sub-sample measures (each point was measured twicel into one response for each point.
PRoe MEANS NOPRINT;
BY lat Ion;
VAR r&n ;
OUTPUT OUT=AVE&n MEAN= mr&n;
RUN;
%MEND in;

Create model dataset for curve numbers and sub-sample numbers


DATA LABEL;
DO sub = 1 to 2;
DO cry = 1 to 36;
DO 1 = 1 to 19;
OUTPUT;
END; END; END;
DROP 1;
RUN;

(# of sub-samples)
(# of curves)
(# of latitudinal points)

Run macro IN for all three pans


%LET n=l; %IN;
%LET n=2; %IN;
%LET n=3; %IN;

Combine all three pans data into one and average the response for each point.
DATA RAW;
MERGE AVE1(DROP=_type__ fre~)
AVE2(DROP=_type__ fre~)
AVE3(DROP=_type__ fre~);
BY lat Ion;

Remove extra measurements for the top.


IF lat = 90 and Ion ne 180 THEN DELETE;
devr = mean(mr1,mr2,mr3) ;
KEEP lat Ion devr;
RUN;
1592

Project data points onto X-Y projection plane.

DATA PROJECTD;
SET RAW;
x = 2 * (tan(.785398 lat*3.14159)/360)*sin(lon*3.14159/180);
y = -2 * (tan(.785398 lat*3.14159)/360)*cos(lon*3.14159/180);
Fit the data using G3grid.

PROC G3GRID DATA=PROJECTD OUT=G30UT;


GRID y * x = devr /
.05 axis increment can be decreased for fmer resolution on the plot if you have enough memory

AXIS1 = -2 to 2 by .05
AXIS2 = -2 to 2 by .05
PARTIAL;
Remove excess data points from outside the O Lat ring (G3GRID fills in a rectangular area with fitted
points).

DATA PLOTR;
SET G30UT;
rsqd = ( Y**2 + X**2)**.5;
IF rsqd Ie 2.05;
DROP rsqd;
Prepare Annotation dataset, Note: there is a documented problem with HSYS='2', so I had to use '3'
which is pecentage of the screen area.

DATA GRID;
LENGTH function color style $8 text $40;
RETAIN xsys ysys hsys '3' style 'empty'
x y 50 when 'A';
Latitude Rings
function = 'pie';rotate = 360 ;line = 3 ;color = 'black';
size= 35;OUTPUT;
size= 32.07;OUTPUT;
size= 26.86;OUTPUT;
size= 20.21;OUTPUT;
size= 14.50;OUTPUT;
size= 9.38;OUTPUT;

1593

Longitude Lines
function='move';x=2S; y=SO; OUTPUT;
function='draw';x=7S; y=SO; line=l;size=l;OUTPUT;
function='move';x=SO; y=15; OUTPUT;
function='draw';x=SO; y=S8.13; line=l;size=l;OUTPUT;
function='move';x=SO; y=60.63; OUTPUT;
function='draw';x=SO; y=63.2S; line=l;size=l;OUTPUT;
function='move';x=SO; y=6S.7S; OUTPUT;
function='draw';x=SO; y=68.96; line=l;size=l;OUTPUT;
function='move';x=SO; y=71.46; OUTPUT;
function='draw';x=SO; y=75.61; line=l;size=l;OUTPUT;
function='move';x=SO; y=78.11; OUTPUT;
function='draw';x=SO; y=80.82; line~l;size=l;OUTPUT;
function='move';x=SO; y=83.32; OUTPUT;
function='draw';x=SO; y=83.7S; line=l;size=l;OUTPUT;
function='move';x=32.32; y=2S.2S; OUTPUT;
function='draw';x=67.68; y=74.7S; line=l;size=l;OUTPUT;
function='move';x=32.32; y=74.7S; OUTPUT;
function='draw';x=67.68; y=2S.2S; line=l;size=l;OUTPUT;
Label Latitude 60'
function='poly';x=49.00; y=S8.13;
style='msolid';color='white';OUTPUT;
function='polycont';x=Sl; y=S8.13; color='black';OUTPUT;
function='polycont';x=Sl; y=60.63; color='black';OUTPUT;
function='polycont';x=49; y=60.63; color='black';OUTPUT;
function='label';x=SO;y=S9.88;text='60';size=1.S;position='S';sty
le='swiss';color='black' ; OUTPUT;
position='5';style='swiss';color='black';OUTPUT;
Label Latitude 45'
function='poly';x=49.00; y=63.2S;
style='msolid';color='white';OUTPUT;
function='polycont';x=Sl; y=63.2S; color='black';OUTPUT;
function='polycont';x=51; y=6S.7S; color='black';OUTPUT;
function='polycont';x=49; y=6S.7S; color='black';OUTPUT;
function='label';x=SO;y=6S.00;text='4S';size=1.S;position='S';sty
le='swiss';color='black';OUTPUT;
position='5';style='swiss';color='black';OUTPUT;
Label Latitude 30'
function='poly';x=49.00; y=68.96;
style='msolid';color='white';OUTPUT;
function='polycont';x=51; y=68.96; color='black';OUTPUT;
function='polycont';x=Sl; y=71.46; color='black';OUTPUT;
function='polycont';x=49; y=71.46; color='black';OUTPUT;
function='label';x=SO;y=70.71;text='30';size=1.S;
position='5';style='swiss';color='black';OUTPUT;
Label Latitude 15'
function='poly';x=49.00; y=7S.61;
style='msolid' ;color='white' ; OUTPUT;
function='polycont';x=Sl; y=7S.61; color='black';OUTPUT;
function='polycont'ix=Sli y=78.11i color='black'iOUTPUTi
function='polycont';x=49; y=78.11; color='black';OUTPUT;
function='label';x=SO;y=77.36;text='lS';size=1.S;
position='S';style='swiss';color='black';OUTPUT;

1594

Label Latitude 5function='poly';x=49.00; y=80.82;


style='msolid';color='white';OUTPUT;
function='polycont';x=Sl; y=80.82; color='black';OuTPUT;
function='polycont';x=Sl; y=83.32; color='black';OuTPUT;
function= 'polycont' ;x=49; y=83. 32; color= 'black' ;OUTPUT;
function='label';x=SO;y=82.S7;text='S';size=1.S;
position='S';style='swiss';color='black';OUTPUT;
Label Latitude O
function='poly';x=49.00; y=83.7S;
style='msolid';color='white';OUTPUT;
function='polycont';x=Sl; y=83.7S; color='black';OUTPUT;
function='polycont';x=Sl; y=86.2S; color='black';OUTPUT;
function='polycont';x=49; y=86.2S; color='black';OUTPUT;
function='label';x=SO;y=8S.S0;text='O';size=1.S;
position='S';style='swiss';color='black';OUTPUT;
xc=80;
yc=SO;

(X position for coordinate system label)


(Y position for coordinate system label)

Label coordinate system


function='move';x=xc; y=yc+l0; OUTPUT;
function='draw';x=xc; y=yc; line=1;size=4;OUTPUT;
function='draw';x=xc+7; y=yc; line=1;size=4;OUTPUT;
function='poly';x=xc; y=yc+l0;
style='msolid';color='black';OUTPUT;
function='polycont';x=xc-.S; y=yc+8; color='black';OUTPUT;
function='polycont';x=xc+.S; y=yc+8; color='black';OUTPUT;
function='poly';x=xc+7; y=yc;
style='msolid';color='black';OUTPUT;
function='polycont';x=xc+S.S; y=yc+.7S; color='black';OUTPUT;
function='polycont';x=xc+S.S; y=yc-.7S; color='black';OUTPUT;
function='label';x=xc;y=yc+13;text='Y+';size=2;
position='S';style='swiss';color='black';OUTPUT;
function='label';x=xc+l0;y=yc+.S;text='X+';size=2;
position='S';style='swiss';color='black';OUTPUT;
DROP XC YC;
Annotate dataset for footnote and title;
DROP text;
LENGTH function color style $8 text $40;
RETAIN xsys ysys hsys '3' style 'swiss' color 'black'
x y 50 when 'A' size 3 function 'label' position '5';
x=SO;y=10;text='Average Deviation From Nominal'; OUTPUT;
x=SO;y=91;text='Resultant for all parts'; OUTPUT;
Combine annotate datasets
DATA anno;
SET grid text;
RUN;

1595

Set graphics options. "HPCOLOR" is a modified version of. Output is sent to a file, and then later
routed to a color printer on the LAN.

GOPTIONS RESET=all DEVICE=hpcolor FTEXT=swiss


GSFMODE=replace GACCESS='sasgastd>pr123';
PATTERN1 V=s C=red;
PATTERN2 V=s C=vdep;
PATTERN3 V=s C=vlip;
PATTERN4 V=s C=dav;
PATTERNS V=s C=blb;
PATTERN6 V=s C=white;
PATTERN? V=s C=vdabg;
PATTERNS V=s C=vlibg;
PATTERN9 V=s C=vilg;
PATTERN10 V=s C=cyan;
PATTERN11 V=s C=blue;
TITLE1 H=3 'N/C Milling Machine Capability Study';
LEGEND1 LABEL=none ACROSS=4 DOWN=3 FRAME ;
AXIS1 ORIGIN=(25,15)pct LENGTH=50pct C=white
MAJOR=none VALUE=none LABEL=none ;
AXIS2 ORIGIN=(25,15)pct LENGTH=?Opct C=white
MAJOR=none VALUE=none LABEL=none;
Create the plot

PROC GCONTOUR DATA = pIotr ;


PLOT X * Y = devr / PATTERN ANNO=anno
HAXIS = axis1 VAXIS = axis2 LEGEND=legend1
LEVELS = -.005 to .005 by .001;
RUN;

1596

Вам также может понравиться