In previous articles I showed you how to spend a lot of time and energy creating programs to measure features. Now that we have gone to all the trouble of making and manipulating datums and creating features it is time to discuss how we report them. As far as the DMIS standard is concerned the primary output format is the one included in that standard. Unfortunately this form of output is hard to read for some one not familiar with DMIS (it can be hard to read for those that are). An alternative and the one used by most users is the vendor output format. This format is the familiar columnar actual, nominal, deviation, etc. similar to the sample below:

CIRCLE:BORE_A
X-axis       190.043   190.000    -0.500    +0.500     0.043
Z-axis       104.944   105.000    -0.500    +0.500    -0.056
Diameter  382.298   383.635    -2.000    +2.000    -1.337


In this sample, the first line describes the type of feature being reported along with its name, while the following result block contains a column describing the type of result with further columns for actual, nominal, low tolerance, high tolerance and deviation values. These results make up a typical CMM report. The format of these columns is determined by the VFORM statement. This statement defines how many and what type of columns will be output using minor words like ACTNOM or ALL:

V(name)=VFORM/col (,col …) or ALL

For example:

V(RES_ALL)=VFORM/ALL
This example results in the output of all columns seen below:
              ACT    NOM        DEV          LO       HI         ERR
XAXIS   9.997  10.000     -0.003      -0.01    0.01


Another example:

V(RES_ACT_ONLY)=VFORM/ACT
This example reports only the actual result:
XAXIS   9.997

Depending on the type of CMM the ACTNOM, etc. headings may or may not be included. Other minor words are available that provide for graphic reporting but these rely on each individual manufacturers implementation. Refer to the DMIS standard for more information.

Having defined the content of the report we must now tell the system where it will go using the DISPLY statement. This statement has a number of minor words which correspond with system devices (PRINTTERMSTOR and COMM) followed by the name of a vendor format previously defined using the VFORM statement. It is also possible to simultaneously write DMIS output by adding the DMIS minor word as a parameter:

DISPLY/dev,V(name) and/or DMIS (,dev,V(name)) and/or DMIS …)

For example:

DISPLY/STOR,V(RES_ALL

This example uses the minor word STOR to tell the system that the RES_ALL format will be output to the default storage device (usually a result file that is predefined by the system).

Now that we have defined the format of the results and where they are going it is time to define tolerances that we can apply to our features in order to get pass or fail determinations. Tolerances are defined using the TOL statement:

T(name)=TOL/tol_type, tol, etc.

The tolerance syntax above is deliberately vague because the syntax changes depending on the tolerance type so I will list some examples.

For example:

T(X_TOL1)=TOL/CORTOL,XAXIS,-0.010,0.010

This example defines a coordinate tolerance along the X axis of +/-0.010. Tolerances are not usually attached to any particular feature which means that this tolerance can be used to determine the position of a feature from the current datum origin along the X axis as long as the position of that feature has a tolerance of +/-0.010 along that axis.

Another example:

T(D_TOL1)=TOL/DIAM,-0.0,0.050

This example defines a diameter tolerance that can be applied to any feature whose diameter has a positive allowance of 0.050 and no negative allowance from it’s defined nominal. Some tolerances must use other features as references against which the feature being output must be compared:

For example:

T(PERP_TOL1)=TOL/PERP,0.010,RFS,FA(FACE1)


This example defines a perpendicularity tolerance using FACE1 as a reference. This means that the feature being output will be compared against FACE1 for perpendicularity regardless of the position and orientation of each in the datum reference frame. You may also have noticed that there is a RFS minor word in the middle of the statement. This minor word can also be entered as MMC or LMC to apply maximum or least material condition allowance assuming that the feature being reported allows it. These allowances can also be applied to the reference feature but in this case have not been used (and wouldn’t be in the case of a face).

Another example:

T(TP_TOL1)=TOL/POS,2D,0.025,MMC,DAT(A),RFS,DAT(B),MMC,DAT(C),MMC

This example defines a true position tolerance of 0.025 as a two dimensional diameter zone with maximum material condition applied to the feature and datums B and C.

As discussed previously, none of the tolerance examples so far contain nominal information because the features being output have this information in their definitions. Here are a couple of tolerance types that do require nominal and tolerance values:

T(name)=TOL/DISTB/distance, lo_tol, hi_tol, dir, opt

and

T(name)=TOL/ANGLB/angle, lo_tol, hi_tol


These statements are used when two features are output together as a distance or angle. The distance has a few extra minor words to determine what direction it will be applied (XAXISYAXISZAXIS or PT2PT) and whether the measurement will be from the average or extremes of the features being used (AVGMIN or MAX).

For example:

T(DIST_TOL1)=TOL/DISTB,100,-0.010,0.010,XAXIS,MAX

This example defines a distance tolerance which should be 100 +/-0.010 when applied along the X axis and measured at the maximum extremes of the features being output.

Another example:

T(ANGLE_TOL1)=TOL/ANGLEB,30,-0.5,0.5
This example defines an angle tolerance of 30 degrees +/- 0.5.

I hope that the previous examples give you a good understanding of the application of tolerances in DMIS. Unfortunately it is impossible to cover all of the available tolerance types here, refer to the standard for further information.

Now that we have discussed the tools required for defining the applicable report tolerances we can discuss the means by which we features are reported. The statement provided by DMIS for feature output is (not surprisingly) the OUTPUT statement:

OUTPUT/FA(name) (,TA(name) …)

or

OUTPUT/ FA(name), FA(name) (,TA(name) …)

The first statement is designed to output individual features. All you do is insert the feature optionally followed by one or more tolerance to apply to that feature. The second example is designed to accept two features, usually followed by a distance or angle between tolerance.

For example:

T(TP1)=TOL/POS,2D,0.005,MMC
T(D1)=TOL/DIAM,0,0.005
OUTPUT/FA(CIRCLE1),TA(TP1),TA(D1)

This example defines true position and diameter tolerances which are then applied to a feature called CIRCLE1.

Another example:

T(DIST1)=TOL/DISTB,NOMINL,69.5,-0.1,0.1,PT2PT,AVG
OUTPUT/FA(CIRCLE1),FA(CIRCLE2),TA(DIST1)

This example defines a tolerance used to report the distance between two circles. The OUTPUT will report a direct (point to point) length from one circle center to the other.

Finally, a statement is provided by DMIS to place extra headers and notes into your reports. The TEXT statement can be used to show messages during program runtime but if you use the OUTFIL minor word it will send the text to the selected display devices:

TEXT/OUTFIL,’POSITION AND DIAMETER OF TOP FACE CIRCLE No 1’

This statement could have been used before the true position example above so that anyone reading the report would know what part of the component the name CIRCLE1 actually refers to.

As mentioned previously all of the output covered in this article will be written in the VFORM format to the system output locations listing in the DISPLY statement. In the next article about high level programming I will show you ways to take more control over the format and storage of your results.

Stephen Horsfall specializes in DMIS programming, training and consulting and is the author of ‘Step by Step DMIS Programming’. He can be at contacted at steve.horsfall@cmmts.com.