hexagon logo

How is concentricity calculated on pc-dmis?

So I've read multiple post on this same question, but nothing really explains what PC-Dmis is doing that i saw.

I have a print for basically a cup. Its calling out concentricity of the outside of the part to a cylinder on the inside of the part( datum a is a larger cylinder at the top of the part on the inside)

The outside the diameters check out of location from 0 but its not matching the concentricity. (is the deviation still x2 as radial distance from center?)

Datum A is X = 0.00 Y= 0.00

OD is  X= 0.0004  Y= -0.0013

Concentricity to A = 0.0218

Where did the 0.0218 come from?

  • my guess is that you have out-of-round conditions that differ from ID to OD

  • Current revision of Y14.5 (starting at 2018) has removed concentricity as a control, entirely, as it is the least effective means of controlling definition of a feature of size.

    If the part is shaped like a banana, your OD's output origin is just a small factor of the concentricity output.

    Concentricity is the delta from datum axis center, to the measured feature's axis, across/along that measured feature's entire axis line. 

    the feature's circular "Form" error is NOT a measured value of Concentricity.  it's ONLY looking at/comparing the centroids of the features.

    So if both your datum and the OD are warped, or if just your datum, or just your OD are warped, you will have to construe that datum as a perfect straight axis line someplace.  All of that warping will be picked up eventually as the axis's straightness projects away from the datum's pefect axis line.

    I recommend taking individual circular diameters, and extracting centroids of each circle.  then construct a 3d line for all those circle center points.  measure straightness of that line, and you will better understand why your concentricity is 0.0218"

  • Thank you, I will do this and try to explain this to our tooling guys.

  • If you measure concentricity on a cylinder, it will measure coaxiality. 

    Concentricity/coaxiality is an ISO dimension. In ASME it changed in 2018 to True Position.

    Concentricity measures centre point to a datum which can be a centre point or a centre line.

    Coaxiality measures centre line to a datum which is a centre line.

    The XYZ values you see are the centroids of the cylinders.

    Every circle of a cylinder has its own centroid, but PCDMIS will only show you the centroid of the full cylinder.

    What coaxiality does it  makes a datum by aligning the centerline of the cylinder and make it 0. It draws a cylinder around that line with a diameter of the tolerance.

    Then it will evaluate the centerline of the second cylinder on every level, so every circle.

    In this code you can see I made one of the circles (CIR3_2) 0.0200 out of the centre.

    In the coaxiality (DIM001) you can see that it reports the biggest deviation. The radius of the deviation is 0.0200 and it needs to convert to diameter, the same as the tolerance zone, so it will mulitply by 2.

                
    CIR1       =FEAT/CONTACT/CIRCLE/DEFAULT,CARTESIAN,OUT,LEAST_SQR
                THEO/<0,0,0>,<0,0,1>,10,0
                ACTL/<0,0,0>,<0,0,1>,10,0
                TARG/<0,0,0>,<0,0,1>
                START ANG=0,END ANG=360
                ANGLE VEC=<1,0,0>
                DIRECTION=CCW
                SHOW FEATURE PARAMETERS=NO
                SHOW CONTACT PARAMETERS=NO
    CIR2       =FEAT/CONTACT/CIRCLE/DEFAULT,CARTESIAN,OUT,LEAST_SQR
                THEO/<0,0,-10>,<0,0,1>,10,0
                ACTL/<0,0,-10>,<0,0,1>,10,0
                TARG/<0,0,-10>,<0,0,1>
                START ANG=0,END ANG=360
                ANGLE VEC=<1,0,0>
                DIRECTION=CCW
                SHOW FEATURE PARAMETERS=NO
                SHOW CONTACT PARAMETERS=NO
    CIR3       =FEAT/CONTACT/CIRCLE/DEFAULT,CARTESIAN,OUT,LEAST_SQR
                THEO/<0,0,-20>,<0,0,1>,10,0
                ACTL/<0,0,-20>,<0,0,1>,10,0
                TARG/<0,0,-20>,<0,0,1>
                START ANG=0,END ANG=360
                ANGLE VEC=<1,0,0>
                DIRECTION=CCW
                SHOW FEATURE PARAMETERS=NO
                SHOW CONTACT PARAMETERS=NO
    CIR4       =FEAT/CONTACT/CIRCLE/DEFAULT,CARTESIAN,OUT,LEAST_SQR
                THEO/<0,0,-30>,<0,0,1>,10,0
                ACTL/<0,0,-30>,<0,0,1>,10,0
                TARG/<0,0,-30>,<0,0,1>
                START ANG=0,END ANG=360
                ANGLE VEC=<1,0,0>
                DIRECTION=CCW
                SHOW FEATURE PARAMETERS=NO
                SHOW CONTACT PARAMETERS=NO
    CIR5       =FEAT/CONTACT/CIRCLE/DEFAULT,CARTESIAN,OUT,LEAST_SQR
                THEO/<0,0,-40>,<0,0,1>,10,0
                ACTL/<0,0,-40>,<0,0,1>,10,0
                TARG/<0,0,-40>,<0,0,1>
                START ANG=0,END ANG=360
                ANGLE VEC=<1,0,0>
                DIRECTION=CCW
                SHOW FEATURE PARAMETERS=NO
                SHOW CONTACT PARAMETERS=NO
    CIR6       =FEAT/CONTACT/CIRCLE/DEFAULT,CARTESIAN,OUT,LEAST_SQR
                THEO/<0,0,-50>,<0,0,1>,10,0
                ACTL/<0,0,-50>,<0,0,1>,10,0
                TARG/<0,0,-50>,<0,0,1>
                START ANG=0,END ANG=360
                ANGLE VEC=<1,0,0>
                DIRECTION=CCW
                SHOW FEATURE PARAMETERS=NO
                SHOW CONTACT PARAMETERS=NO
    $$ NO,
                
    CIR3_2     =FEAT/CONTACT/CIRCLE/DEFAULT,CARTESIAN,OUT,LEAST_SQR
                THEO/<0,0,-20>,<0,0,1>,10,0
                ACTL/<-0.02,0,-20>,<0,0,1>,10,0
                TARG/<0,0,-20>,<0,0,1>
                START ANG=0,END ANG=360
                ANGLE VEC=<1,0,0>
                DIRECTION=CCW
                SHOW FEATURE PARAMETERS=NO
                SHOW CONTACT PARAMETERS=NO
    CIR4_2     =FEAT/CONTACT/CIRCLE/DEFAULT,CARTESIAN,OUT,LEAST_SQR
                THEO/<0,0,-30>,<0,0,1>,10,0
                ACTL/<0.01,0,-30>,<0,0,1>,10,0
                TARG/<0,0,-30>,<0,0,1>
                START ANG=0,END ANG=360
                ANGLE VEC=<1,0,0>
                DIRECTION=CCW
                SHOW FEATURE PARAMETERS=NO
                SHOW CONTACT PARAMETERS=NO
    $$ NO,
                
    DATUM_CYLINDER=FEAT/CYLINDER,CARTESIAN,OUT,LEAST_SQR,NO
                THEO/<0,0,-23>,<0,0,-1>,10,50
                ACTL/<0,0,-23>,<0,0,-1>,10,50
                CONSTR/CYLINDER,BF,CIR1.HIT[1..6],CIR2.HIT[1..6],CIR3.HIT[1..6],CIR4.HIT[1..6],CIR5.HIT[1..6],CIR6.HIT[1..6],,
    CYLINDER   =FEAT/CYLINDER,CARTESIAN,OUT,LEAST_SQR,NO
                THEO/<0,0,-23>,<0,0,-1>,10,50
                ACTL/<0,0,-23>,<0,0,-1>,10,50
                CONSTR/CYLINDER,BF,CIR1.HIT[1..6],CIR2.HIT[1..6],CIR4_2,CIR3_2,CIR5.HIT[1..6],CIR6.HIT[1..6],,
    $$ NO,
                
                DATDEF/XX,FEATURES=DATUM_CYLINDER,,
    $$ NO,
                
    DIM001     =GEOMETRIC_TOLERANCE/STANDARD=ISO 1101,SHOWEXPANDED=YES,
                FEATURE_MATH=DEFAULT,DATUM_MATH=DEFAULT,
                UNITS=MM,OUTPUT=BOTH,ARROWDENSITY=100,
                SEGMENT_1,CONCENTRICITY,DIAMETER,0.01,__,XX,__,<dat>,
                TEXT=OFF,CADGRAPH=OFF,REPORTGRAPH=OFF,MULT=10,
                  MEASURED:
                    CYLINDER:0.0400,
                DATUMS/REPORTDATUMSIZE=OFF,
                  XX(DATUM_CYLINDER):NOM=10,+Tol=0.01,-Tol=-0.01,
                FEATURES/CYLINDER,,

    And do what  said. Evaluate the full cylinder so you know where the error is, or to locate a measuring error.

    You can do this by measuring a cylinder and exctracting the measuring points. Below is a cylinder of 3 levels with 8 points per level:

    CYLINDER   =FEAT/CONTACT/CYLINDER/DEFAULT,CARTESIAN,OUT,LEAST_SQR
                THEO/<0,0,-20>,<0,0,1>,10,100
                ACTL/<0,0,-20>,<0,0,1>,10,100
                TARG/<0,0,-20>,<0,0,1>
                START ANG=0,END ANG=360
                ANGLE VEC=<1,0,0>
                DIRECTION=CCW
                SHOW FEATURE PARAMETERS=NO
                SHOW CONTACT PARAMETERS=NO
    CIR1       =FEAT/CIRCLE,CARTESIAN,OUT,LEAST_SQR,NO
                THEO/<0,0,-20>,<0,0,1>,10
                ACTL/<0,0,-20>,<0,0,1>,10
                CONSTR/CIRCLE,BF,3D,CYLINDER.HIT[1..8],,
                OUTLIER_REMOVAL/OFF,3
                FILTER/OFF,UPR=0
    CIR2       =FEAT/CIRCLE,CARTESIAN,OUT,LEAST_SQR,NO
                THEO/<0,0,30>,<0,0,1>,10
                ACTL/<0,0,30>,<0,0,1>,10
                CONSTR/CIRCLE,BF,3D,CYLINDER.HIT[9..16],,
                OUTLIER_REMOVAL/OFF,3
                FILTER/OFF,UPR=0
    CIR3       =FEAT/CIRCLE,CARTESIAN,OUT,LEAST_SQR,NO
                THEO/<0,0,80>,<0,0,1>,10
                ACTL/<0,0,80>,<0,0,1>,10
                CONSTR/CIRCLE,BF,3D,CYLINDER.HIT[17..24],,
                OUTLIER_REMOVAL/OFF,3
                FILTER/OFF,UPR=0

    Or you can make seperate circles and construct a cylinder out of them. Below are 3 circles with 8 points each:

    CIR1       =FEAT/CONTACT/CIRCLE/DEFAULT,CARTESIAN,OUT,LEAST_SQR
                THEO/<0,0,0>,<0,0,1>,10,0
                ACTL/<0,0,0>,<0,0,1>,10,0
                TARG/<0,0,0>,<0,0,1>
                START ANG=0,END ANG=360
                ANGLE VEC=<1,0,0>
                DIRECTION=CCW
                SHOW FEATURE PARAMETERS=NO
                SHOW CONTACT PARAMETERS=NO
    CIR2       =FEAT/CONTACT/CIRCLE/DEFAULT,CARTESIAN,OUT,LEAST_SQR
                THEO/<0,0,-10>,<0,0,1>,10,0
                ACTL/<0,0,-10>,<0,0,1>,10,0
                TARG/<0,0,-10>,<0,0,1>
                START ANG=0,END ANG=360
                ANGLE VEC=<1,0,0>
                DIRECTION=CCW
                SHOW FEATURE PARAMETERS=NO
                SHOW CONTACT PARAMETERS=NO
    CIR3       =FEAT/CONTACT/CIRCLE/DEFAULT,CARTESIAN,OUT,LEAST_SQR
                THEO/<0,0,-20>,<0,0,1>,10,0
                ACTL/<0,0,-20>,<0,0,1>,10,0
                TARG/<0,0,-20>,<0,0,1>
                START ANG=0,END ANG=360
                ANGLE VEC=<1,0,0>
                DIRECTION=CCW
                SHOW FEATURE PARAMETERS=NO
                SHOW CONTACT PARAMETERS=NO
    CYLINDER   =FEAT/CYLINDER,CARTESIAN,OUT,LEAST_SQR,NO
                THEO/<0,0,-8>,<0,0,-1>,10,20
                ACTL/<0,0,-8>,<0,0,-1>,10,20
                CONSTR/CYLINDER,BF,CIR1.HIT[1..8],CIR2.HIT[1..8],CIR3.HIT[1..8],,

    I hope this helps.