hexagon logo

A little prog to create an "autocalibration" of a rotary

I wrote this prog to calibrate the rotary, without using the rotary calibration window, so it can be used as an "autocalibration".
It uses 2 spheres, the "sph_rotary_disable" is fixed on the rotary, but sphere fixed on a rotary" isn't selected.
The origin of thermal compensation is fixed at the previous location of the rotary, IGNOREROTAB is ON.
Temp comp is setted on axes only.
By this way, the thermal expansion of the granit has a very few effect on the rotary center.

IGNOREROTAB/ON
            LOADPROBE/LSPX1_L50_D5
            TIP/T1A0B0, SHANKIJK=0, 0, 1, ANGLE=0
            ASSIGN/V7=GETROTABDATA("center")
            TEMPCOMP/ORIGIN=V7.X,V7.Y,V7.Z,CTE=0.0000115,Reference Temp=20
              ,Hi Threshold=40,Lo Threshold=10
              ,PART SENSOR NUM=9
              ,X AXIS TEMP=20.3561,Y AXIS TEMP=20.7799,Z AXIS TEMP=20.4879,PART TEMP=20.7451
            MOVE/ROTAB,0,SHORTEST,
            AUTOCALIBRATE/PROBE, PARAMETER_SET=A0B0, QUALTOOL_MOVED=NO,
                          SHOW_SUMMARY=NO, OVERWRITE_RESULTSFILE=NO
            AUTOCALIBRATE/PROBE, PARAMETER_SET=A0B0_sph_rotary_disable, QUALTOOL_MOVED=YES_DCC,
                          SHOW_SUMMARY=NO, OVERWRITE_RESULTSFILE=NO
            ASSIGN/V1=QUALTOOLDATA("xyz","sph_rotary_disable")-V7
C1         =COMMENT/INPUT,NO,FULL SCREEN=NO,
            Enter the number of positions
            ASSIGN/V8=360/(C1.INPUT)
REF1       =ALIGNMENT/START,RECALL:STARTUP,LIST=YES
              ALIGNMENT/TRANS_OFFSET,XAXIS,V7.X
              ALIGNMENT/TRANS_OFFSET,YAXIS,V7.Y
              ALIGNMENT/TRANS_OFFSET,ZAXIS,V7.Z
            ALIGNMENT/END
            MODE/DCC
            MOVE/POINT,NORMAL,<V1.X,V1.Y,V1.Z+200>
            CLEARP/ZPLUS,200,ZPLUS,0,ON
            ASSIGN/V3=SQRT(DOT(V1.XYZ,V1.XYZ))
            ASSIGN/ANG_R=RAD2DEG(ATAN(V1.Y/V1.X))
            IF/V1.X<0
              ASSIGN/ANG_R=180+ANG_R
            END_IF/
            ASSIGN/V6=0
            MOVE/ROTAB,0,SHORTEST,
V2         =LOOP/START,ID=YES,NUMBER=C1.INPUT,START=1,SKIP=,
              OFFSET:XAXIS=0,YAXIS=0,ZAXIS=0,ANGLE=0
              MOVE/CLEARPLANE
              ASSIGN/V4=COS(DEG2RAD(ANG_R))
              ASSIGN/V5=SIN(DEG2RAD(ANG_R))
SPH1         =FEAT/CONTACT/SPHERE/DEFAULT,CARTESIAN,OUT,LEAST_SQR
              THEO/<V3*V4,V3*V5,V1.Z>,<0,0,1>,20.0001
              ACTL/<-169.2387,43.7966,0.0122>,<0,0,1>,20.0002
              TARG/<V3*V4,V3*V5,V1.Z>,<0,0,1>
              START ANGLE 1=0,END ANG 1=360
              START ANGLE 2=0,END ANG 2=90
              ANGLE VEC=<1,0,0>
              SHOW FEATURE PARAMETERS=NO
              SHOW CONTACT PARAMETERS=NO
              ASSIGN/ANG_R=ANG_R+V8
              ASSIGN/V6=V6+V8
              MOVE/CLEARPLANE
              MOVE/ROTAB,V6,SHORTEST,
            LOOP/END
SCN1       =FEAT/SET,CARTESIAN
            THEO/<0,0,0.0047>,<0,0,1>
            ACTL/<0.0015,-0.0083,0.0028>,<0,0,1>
            CONSTR/SET,BASIC,SPH1[1..C1.INPUT],,
PL1        =FEAT/PLANE,CARTESIAN,TRIANGLE,NO
            THEO/<0,0,0.0047>,<0,0,1>
            ACTL/<0.0015,-0.0083,0.0028>,<0.0000261,-0.0000881,1>
            CONSTR/PLANE,BF,SCN1,,
            OUTLIER_REMOVAL/OFF,3
            FILTER/OFF,WAVELENGTH=0
CE1        =FEAT/CIRCLE,CARTESIAN,OUT,LEAST_SQR,NO
            THEO/<0,0,0.0047>,<0,0,1>,349.6367
            ACTL/<0.0018,-0.0085,0.0028>,<0.0000261,-0.0000881,1>,349.6343
            CONSTR/CIRCLE,BF,3D,SCN1,,
            OUTLIER_REMOVAL/OFF,3
            FILTER/OFF,UPR=0
            CALIBRATEROTAB/PLANE=PL1, CIRCLE=CE1,
            MEAS/XYZ=<490.0105,1690.0224,-797.695>, MEAS/IJK=<0.0000261,-0.0000881,1>



If you wonder why it's necessary to often calibrate the rotary, just imagine that the center "moves" after each homing, or after each time when you answer "Yes, the sphere moved"...
  • Definitely going to play with this.


    Be carefull, my rotary is along Z, yours is on Y, there are some values to be changed... Slight smile
  • Definitely going to play with this.


    I would change in the sphere SPH1 :
    THEO/<V3*V4,V1.Y,V3*V5>,<0,1,0>,20.0001 and the same in targets... But I can't check it for you Disappointed


  • Be carefull, my rotary is along Z, yours is on Y, there are some values to be changed... Slight smile


    I probably would have forgotten by the time I got around to it Wink

    I don't have thermal compensation (I don't think? I have 2013MR1 and was under the impression that was introduced in a later version).
    Do you believe this will make a difference?

    I don't find it necessary, as you've stated, and I don't think adding/removing it from my own antics would harm the program.
    I've been working on an autocalibration program as of late, and I would love to include the rotary in that.

    It's in its infancy, however. Maybe some day when my laptop finally arrives Slight smile



  • I don't have thermal compensation (I don't think? I have 2013MR1 and was under the impression that was introduced in a later version).
    Do you believe this will make a difference?



    I don't think that tempcomp is linked to a version, but to a cmm.
    And the temp comp is less important on a "little" cmm than on a large one.
    If the rotary is far from zero, the dilated length is important, so the expansion of the granite gives a kind of displacement of the rotary axis.
    The compensation calculates it to reduce the defect.

    I don't know about an Optiv thermal compensation, maybe some guys here could answer ?
  • Professor JEFMAN, this sort of endeavour is way above my head, but in my case, thermal expansion would have nothing to do with granite, since the rotary is bolted to an aluminum extrude.
    I think I shall try your offering (keeping in mind mine is a Y- table like the Inspector's.
    Your homing observation is spot-on. Mine has shown to change by .0003 with each machine start. Probably not much in Rotab-land, but with a longer part......who knows? Rolling eyes