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 ACT, NOM, etc. or ALL:
V(name)=VFORM/col (,col …) or ALL
For example:
V(RES_ALL)=VFORM/ALL
This example results (pardon the pun) in the output of all columns as can be 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 ACT, NOM, 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 DISPLYstatement. This statement has a number of minor words which correspond with system devices (PRINT,TERM,STOR and COMM) followed by the name of a vendor format previously defined using theVFORM 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 RFSminor 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 (XAXIS, YAXIS, ZAXIS or PT2PT) and whether the measurement will be from the average or extremes of the features being used (AVG, MIN 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 TEXTstatement 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’ available from the Dimensional Metrology Standards Consortium (www.dmisstandard.org). He can be contacted at This email address is being protected from spambots. You need JavaScript enabled to view it. .