hexagon logo

Default Math vs. Least Squares

I have a part that uses 2 cylinders as a common datum. There are multiple features positioned back to the common A-B datum. Using the default math algorithm and the simultaneous tolerance command I get all but one feature to pass. This feature is a diagonal through hole that is controlled in the X direction by a linear dimension and then in Y and Z by the cylindrical datum. Now if I change the datum math to least squares on just this feature it gives me a very good position. I am assuming this is not the correct way unless I change all the other related features to least squares datum math as well. But if I do the other features that were really good position wise with the default datum math now were failing.
I didn't mention that the 2 common datum cylinders also get ground to their final size later after the complete part is made.

Just wondering what you all think would be the best way to evaluate these features and if you can just have least squares math for one but default for the rest of the related positions.

Thanks all.
Parents
  • Most of my parts are really tight tolerance aircraft parts that come off of a lathe with an A-B datum structure.

    This is how I handle it:

    -Find part (read point, fixture alignment, whatever) and create a rough alignment thats good enough to "lock" you onto the part. Once you're good...
    -Probe Datum -A- as a cylinder (we'll call it CYL_A)
    -Create a GENERIC point at the START and another generic point at the END of CYL_A
    -Probe Datum -B- as a cylinder (we'll call it CYL_B)
    -Create a GENERIC point at the START and another generic point at the END of CYL_B
    -Construct a 3D line through the 4 points from -A- to -B- (we'll call it LIN_AB)
    -Create new alignment where you LEVEL to LIN_AB as well asset LIN_AB as two of your origins...define the rest of the alignment as you need to

    For the below code, this was a part with an A-B datum structure that had a top ID (-B-) that I could reach with a single probe at A0B0 and a bottom ID (-A-) that was below a lip so I had to measure it in 4 sections with a star probe and then construct the cylinder together



    
    MOVE/CLEARPLANE
    CYL_B =FEAT/CONTACT/CYLINDER/DEFAULT,CARTESIAN,IN,LEAST_SQR
    THEO/<0,0,-0.17313>,<0,0,1>,1.85075,0.43187
    ACTL/<0,0,-0.17313>,<0,0,1>,1.85075,0.43187
    TARG/<0,0,-0.17313>,<0,0,1>
    START ANG=4.3,END ANG=364.3
    ANGLE VEC=<1,0,0>
    DIRECTION=CCW
    SHOW FEATURE PARAMETERS=NO
    SHOW CONTACT PARAMETERS=NO
    
    CYL_A_SUB1 =FEAT/CONTACT/CYLINDER/DEFAULT,CARTESIAN,IN,LEAST_SQR
    THEO/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    ACTL/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    TARG/<0,0,-1.27>,<0,0,1>
    START ANG=45,END ANG=135
    ANGLE VEC=<1,0,0>
    DIRECTION=CCW
    SHOW FEATURE PARAMETERS=NO
    SHOW CONTACT PARAMETERS=NO
    
    CYL_A_SUB2 =FEAT/CONTACT/CYLINDER/DEFAULT,CARTESIAN,IN,LEAST_SQR
    THEO/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    ACTL/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    TARG/<0,0,-1.27>,<0,0,1>
    START ANG=45,END ANG=135
    ANGLE VEC=<0,1,0>
    DIRECTION=CCW
    SHOW FEATURE PARAMETERS=NO
    SHOW CONTACT PARAMETERS=NO
    
    CYL_A_SUB3 =FEAT/CONTACT/CYLINDER/DEFAULT,CARTESIAN,IN,LEAST_SQR
    THEO/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    ACTL/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    TARG/<0,0,-1.27>,<0,0,1>
    START ANG=45,END ANG=135
    ANGLE VEC=<-1,0,0>
    DIRECTION=CCW
    SHOW FEATURE PARAMETERS=NO
    SHOW CONTACT PARAMETERS=NO
    
    CYL_A_SUB4 =FEAT/CONTACT/CYLINDER/DEFAULT,CARTESIAN,IN,LEAST_SQR
    THEO/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    ACTL/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    TARG/<0,0,-1.27>,<0,0,1>
    START ANG=45,END ANG=135
    ANGLE VEC=<0,-1,0>
    DIRECTION=CCW
    SHOW FEATURE PARAMETERS=NO
    SHOW CONTACT PARAMETERS=NO
    
    CYL_A =FEAT/CYLINDER,CARTESIAN,IN,MAX_INSC,NO
    THEO/<0,0,-1.50849>,<0,0,1>,1.85075,0.37698
    ACTL/<0,0,-1.50849>,<0,0,1>,1.85075,0.37698
    CONSTR/CYLINDER,BFRE,HITS("CYL_A_SUB1),HITS("CYL_A_SUB2), ,HITS("CYL_A_SUB3),HITS("CYL_A_SUB4)
    
    PNT_CYL_A_START =GENERIC/POINT,DEPENDENT,CARTESIAN,$
    NOM/XYZ,<CYL_A.TX,CYL_A.TY,CYL_A.TSZ>,$
    MEAS/XYZ,<CYL_A.X,CYL_A.Y,CYL_A.SZ>,$
    NOM/IJK,<0*1,0*1,1*1>,$
    MEAS/IJK,<0*1,0*1,1*1>
    
    PNT_CYL_A_END =GENERIC/POINT,DEPENDENT,CARTESIAN,$
    NOM/XYZ,<CYL_A.TX,CYL_A.TY,CYL_A.TEZ>,$
    MEAS/XYZ,<CYL_A.X,CYL_A.Y,CYL_A.EZ>,$
    NOM/IJK,<0*1,0*1,1*1>,$
    MEAS/IJK,<0*1,0*1,1*1>
    
    PNT_CYL_B_START =GENERIC/POINT,DEPENDENT,CARTESIAN,$
    NOM/XYZ,<CYL_B.TX,CYL_B.TY,CYL_B.TSZ>,$
    MEAS/XYZ,<CYL_B.X,CYL_B.Y,CYL_B.SZ>,$
    NOM/IJK,<0*1,0*1,1*1>,$
    MEAS/IJK,<0*1,0*1,1*1>
    
    PNT_CYL_B_END =GENERIC/POINT,DEPENDENT,CARTESIAN,$
    NOM/XYZ,<CYL_B.TX,CYL_B.TY,CYL_B.TEZ>,$
    MEAS/XYZ,<CYL_B.X,CYL_B.Y,CYL_B.EZ>,$
    NOM/IJK,<0*1,0*1,1*1>,$
    MEAS/IJK,<0*1,0*1,1*1>
    
    LIN_AB =FEAT/LINE,CARTESIAN,UNBOUNDED,YES
    THEO/<0,0,-0.06198>,<0,0,1>
    ACTL/<0,0,-0.06198>,<0,0,1>
    CONSTR/LINE,BF,3D,PNT_CYL_A_START,PNT_CYL_A_END,PNT_CYL_B _END,PNT_CYL_B_START,,
    OUTLIER_REMOVAL/OFF,3
    FILTER/OFF,WAVELENGTH=0
    
    ALI_AB_CMMWCS =ALIGNMENT/START,RECALL:STARTUP,LIST=YES
    ALIGNMENT/LEVEL,ZPLUS,LIN_AB
    ALIGNMENT/ROTATE,XPLUS,TO,PLN_WCS_XP_POS1,ABOUT,ZPLUS
    ALIGNMENT/TRANS,XAXIS,LIN_AB
    ALIGNMENT/TRANS,YAXIS,LIN_AB
    ALIGNMENT/TRANS,ZAXIS,PLN_C
    ALIGNMENT/END
    
    
Reply
  • Most of my parts are really tight tolerance aircraft parts that come off of a lathe with an A-B datum structure.

    This is how I handle it:

    -Find part (read point, fixture alignment, whatever) and create a rough alignment thats good enough to "lock" you onto the part. Once you're good...
    -Probe Datum -A- as a cylinder (we'll call it CYL_A)
    -Create a GENERIC point at the START and another generic point at the END of CYL_A
    -Probe Datum -B- as a cylinder (we'll call it CYL_B)
    -Create a GENERIC point at the START and another generic point at the END of CYL_B
    -Construct a 3D line through the 4 points from -A- to -B- (we'll call it LIN_AB)
    -Create new alignment where you LEVEL to LIN_AB as well asset LIN_AB as two of your origins...define the rest of the alignment as you need to

    For the below code, this was a part with an A-B datum structure that had a top ID (-B-) that I could reach with a single probe at A0B0 and a bottom ID (-A-) that was below a lip so I had to measure it in 4 sections with a star probe and then construct the cylinder together



    
    MOVE/CLEARPLANE
    CYL_B =FEAT/CONTACT/CYLINDER/DEFAULT,CARTESIAN,IN,LEAST_SQR
    THEO/<0,0,-0.17313>,<0,0,1>,1.85075,0.43187
    ACTL/<0,0,-0.17313>,<0,0,1>,1.85075,0.43187
    TARG/<0,0,-0.17313>,<0,0,1>
    START ANG=4.3,END ANG=364.3
    ANGLE VEC=<1,0,0>
    DIRECTION=CCW
    SHOW FEATURE PARAMETERS=NO
    SHOW CONTACT PARAMETERS=NO
    
    CYL_A_SUB1 =FEAT/CONTACT/CYLINDER/DEFAULT,CARTESIAN,IN,LEAST_SQR
    THEO/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    ACTL/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    TARG/<0,0,-1.27>,<0,0,1>
    START ANG=45,END ANG=135
    ANGLE VEC=<1,0,0>
    DIRECTION=CCW
    SHOW FEATURE PARAMETERS=NO
    SHOW CONTACT PARAMETERS=NO
    
    CYL_A_SUB2 =FEAT/CONTACT/CYLINDER/DEFAULT,CARTESIAN,IN,LEAST_SQR
    THEO/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    ACTL/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    TARG/<0,0,-1.27>,<0,0,1>
    START ANG=45,END ANG=135
    ANGLE VEC=<0,1,0>
    DIRECTION=CCW
    SHOW FEATURE PARAMETERS=NO
    SHOW CONTACT PARAMETERS=NO
    
    CYL_A_SUB3 =FEAT/CONTACT/CYLINDER/DEFAULT,CARTESIAN,IN,LEAST_SQR
    THEO/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    ACTL/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    TARG/<0,0,-1.27>,<0,0,1>
    START ANG=45,END ANG=135
    ANGLE VEC=<-1,0,0>
    DIRECTION=CCW
    SHOW FEATURE PARAMETERS=NO
    SHOW CONTACT PARAMETERS=NO
    
    CYL_A_SUB4 =FEAT/CONTACT/CYLINDER/DEFAULT,CARTESIAN,IN,LEAST_SQR
    THEO/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    ACTL/<0,0,-1.27>,<0,0,1>,1.85075,0.47698
    TARG/<0,0,-1.27>,<0,0,1>
    START ANG=45,END ANG=135
    ANGLE VEC=<0,-1,0>
    DIRECTION=CCW
    SHOW FEATURE PARAMETERS=NO
    SHOW CONTACT PARAMETERS=NO
    
    CYL_A =FEAT/CYLINDER,CARTESIAN,IN,MAX_INSC,NO
    THEO/<0,0,-1.50849>,<0,0,1>,1.85075,0.37698
    ACTL/<0,0,-1.50849>,<0,0,1>,1.85075,0.37698
    CONSTR/CYLINDER,BFRE,HITS("CYL_A_SUB1),HITS("CYL_A_SUB2), ,HITS("CYL_A_SUB3),HITS("CYL_A_SUB4)
    
    PNT_CYL_A_START =GENERIC/POINT,DEPENDENT,CARTESIAN,$
    NOM/XYZ,<CYL_A.TX,CYL_A.TY,CYL_A.TSZ>,$
    MEAS/XYZ,<CYL_A.X,CYL_A.Y,CYL_A.SZ>,$
    NOM/IJK,<0*1,0*1,1*1>,$
    MEAS/IJK,<0*1,0*1,1*1>
    
    PNT_CYL_A_END =GENERIC/POINT,DEPENDENT,CARTESIAN,$
    NOM/XYZ,<CYL_A.TX,CYL_A.TY,CYL_A.TEZ>,$
    MEAS/XYZ,<CYL_A.X,CYL_A.Y,CYL_A.EZ>,$
    NOM/IJK,<0*1,0*1,1*1>,$
    MEAS/IJK,<0*1,0*1,1*1>
    
    PNT_CYL_B_START =GENERIC/POINT,DEPENDENT,CARTESIAN,$
    NOM/XYZ,<CYL_B.TX,CYL_B.TY,CYL_B.TSZ>,$
    MEAS/XYZ,<CYL_B.X,CYL_B.Y,CYL_B.SZ>,$
    NOM/IJK,<0*1,0*1,1*1>,$
    MEAS/IJK,<0*1,0*1,1*1>
    
    PNT_CYL_B_END =GENERIC/POINT,DEPENDENT,CARTESIAN,$
    NOM/XYZ,<CYL_B.TX,CYL_B.TY,CYL_B.TEZ>,$
    MEAS/XYZ,<CYL_B.X,CYL_B.Y,CYL_B.EZ>,$
    NOM/IJK,<0*1,0*1,1*1>,$
    MEAS/IJK,<0*1,0*1,1*1>
    
    LIN_AB =FEAT/LINE,CARTESIAN,UNBOUNDED,YES
    THEO/<0,0,-0.06198>,<0,0,1>
    ACTL/<0,0,-0.06198>,<0,0,1>
    CONSTR/LINE,BF,3D,PNT_CYL_A_START,PNT_CYL_A_END,PNT_CYL_B _END,PNT_CYL_B_START,,
    OUTLIER_REMOVAL/OFF,3
    FILTER/OFF,WAVELENGTH=0
    
    ALI_AB_CMMWCS =ALIGNMENT/START,RECALL:STARTUP,LIST=YES
    ALIGNMENT/LEVEL,ZPLUS,LIN_AB
    ALIGNMENT/ROTATE,XPLUS,TO,PLN_WCS_XP_POS1,ABOUT,ZPLUS
    ALIGNMENT/TRANS,XAXIS,LIN_AB
    ALIGNMENT/TRANS,YAXIS,LIN_AB
    ALIGNMENT/TRANS,ZAXIS,PLN_C
    ALIGNMENT/END
    
    
Children