hexagon logo

Recalling the part alignments inside of a Do/Until loop

Hello all,

I am writing a program where I have 4 parts in a fixture and loop the part program 4 times with a Do/Until loop. To save time and keep the program short, I want to open a second Do/Until loop for the second probe and recall the part alignment from the first loop on the second loop's counter. Can anyone provide me with an example of how I can do this?

Here's my program so far:

$$ NO,
            ================================
            FIXTURE ALIGNMENT FEATURES.
            ================================
PLN_TOP_FIXTURE=FEAT/PLANE,CARTESIAN,TRIANGLE
            THEO/<87.301,218.466,0>,<0,0,1>
            ACTL/<87.301,218.466,0>,<0,0,1>
            MEAS/PLANE,4
              MOVE/CLEARPLANE
              HIT/BASIC,NORMAL,<24.34,27.168,0>,<0,0,1>,<24.34,27.168,0>,USE THEO=YES
              HIT/BASIC,NORMAL,<26.057,414.633,0>,<0,0,1>,<26.057,414.633,0>,USE THEO=YES
              HIT/BASIC,NORMAL,<144.518,404.826,0>,<0,0,1>,<144.518,404.826,0>,USE THEO=YES
              HIT/BASIC,NORMAL,<154.288,27.237,0>,<0,0,1>,<154.288,27.237,0>,USE THEO=YES
            ENDMEAS/
A1         =ALIGNMENT/START,RECALL[emoticon:6D505171FAA4497C85C5CA27290C555D]OROTHY_MEDIUM_FIXTURE_4_UP,LIST=YES
              ALIGNMENT/LEVEL,ZPLUS,PLN_TOP_FIXTURE
              ALIGNMENT/TRANS,ZAXIS,PLN_TOP_FIXTURE
            ALIGNMENT/END
LIN_SIDE_FIXTURE=FEAT/LINE,CARTESIAN,UNBOUNDED
            THEO/<0,59.453,-5>,<0,1,0>
            ACTL/<0,59.453,-5.406>,<0,1,0>
            MEAS/LINE,2,ZPLUS
              MOVE/CLEARPLANE
              HIT/BASIC,NORMAL,<0,59.453,-5>,<-1,0,0>,<0,59.453,-6.508>,USE THEO=YES
              HIT/BASIC,NORMAL,<0,365.805,-5>,<-1,0,0>,<0,365.805,-4.304>,USE THEO=YES
            ENDMEAS/
A2         =ALIGNMENT/START,RECALL:A1,LIST=YES
              ALIGNMENT/LEVEL,ZPLUS,PLN_TOP_FIXTURE
              ALIGNMENT/TRANS,ZAXIS,PLN_TOP_FIXTURE
              ALIGNMENT/ROTATE,YPLUS,TO,LIN_SIDE_FIXTURE,ABOUT,ZPLUS
              ALIGNMENT/TRANS,XAXIS,LIN_SIDE_FIXTURE
            ALIGNMENT/END
PNT_FRONT_FIXTURE=FEAT/POINT,CARTESIAN
            THEO/<45.291,0,-3.209>,<0,-1,0>
            ACTL/<45.291,0,-3.209>,<0,-1,0>
            MEAS/POINT,1,WORKPLANE
              MOVE/CLEARPLANE
              HIT/BASIC,NORMAL,<45.291,0,-3.209>,<0,-1,0>,<45.291,0,-3.209>,USE THEO=YES
            ENDMEAS/
FIXTURE_ALIGNMENT=ALIGNMENT/START,RECALL:STARTUP,LIST=YES
              ALIGNMENT/LEVEL,ZPLUS,PLN_TOP_FIXTURE
              ALIGNMENT/TRANS,ZAXIS,PLN_TOP_FIXTURE
              ALIGNMENT/ROTATE,YPLUS,TO,LIN_SIDE_FIXTURE,ABOUT,ZPLUS
              ALIGNMENT/TRANS,XAXIS,LIN_SIDE_FIXTURE
              ALIGNMENT/TRANS,YAXIS,PNT_FRONT_FIXTURE
            ALIGNMENT/END
$$ NO,
            ========================================
            FIRST DO UNTIL LOOP FOR PROBE 1.
            ========================================
            ASSIGN/COUNTER=0
            DO/
              ASSIGN/COUNTER=COUNTER+1
              IF/COUNTER==1
                ASSIGN/OFFSET_X=0
                ASSIGN/OFFSET_Y=0
              END_IF/
              IF/COUNTER==2
                ASSIGN/OFFSET_X=0
                ASSIGN/OFFSET_Y=1*100
              END_IF/
              IF/COUNTER==3
                ASSIGN/OFFSET_X=0
                ASSIGN/OFFSET_Y=2*100
              END_IF/
              IF/COUNTER==4
                ASSIGN/OFFSET_X=0
                ASSIGN/OFFSET_Y=3*100
              END_IF/
SEQUENCE_1   =GENERIC/POINT,DEPENDENT,CARTESIAN,$
              NOM/XYZ,<0+0,0+0,0+0>,$
              MEAS/XYZ,<OFFSET_X,OFFSET_Y,0+0>,$
              NOM/IJK,<0+0,0+0,1+0>,$
              MEAS/IJK,<0+0,0+0,1+0>
A3           =ALIGNMENT/START,RECALL:FIXTURE_ALIGNMENT,LIST=YES
                ALIGNMENT/TRANS,XAXIS,SEQUENCE_1
                ALIGNMENT/TRANS,YAXIS,SEQUENCE_1
              ALIGNMENT/END
  $$ NO,
              ================================
              PART ALIGNMENT FEATURES.
              ================================
              MOVE/CLEARPLANE
CIR_XY       =FEAT/CONTACT/CIRCLE/DEFAULT,CARTESIAN,IN,LEAST_SQR
              THEO/<75,73,-25.214>,<0,0,1>,20.498
              ACTL/<75,73,-25.214>,<0,0,1>,20.498
              TARG/<75,73,-25.214>,<0,0,1>
              START ANG=0,END ANG=360
              ANGLE VEC=<1,0,0>
              DIRECTION=CCW
              SHOW FEATURE PARAMETERS=NO
              SHOW CONTACT PARAMETERS=NO
A4           =ALIGNMENT/START,RECALL:A3,LIST=YES
                ALIGNMENT/TRANS,XAXIS,CIR_XY
                ALIGNMENT/TRANS,YAXIS,CIR_XY
              ALIGNMENT/END
PLN_TOP_PART  =FEAT/PLANE,CARTESIAN,TRIANGLE
              THEO/<-0.197,-0.124,-19.066>,<0,0,1>
              ACTL/<-0.197,-0.124,-19.066>,<0,0,1>
              MEAS/PLANE,4
                MOVE/CLEARPLANE
                HIT/BASIC,NORMAL,<-6.241,-12.898,-19.066>,<0,0,1>,<-6.241,-12.898,-19.066>,USE THEO=YES
                HIT/BASIC,NORMAL,<5.684,-12.995,-19.066>,<0,0,1>,<5.684,-12.995,-19.066>,USE THEO=YES
                HIT/BASIC,NORMAL,<5.91,12.66,-19.066>,<0,0,1>,<5.91,12.66,-19.066>,USE THEO=YES
                HIT/BASIC,NORMAL,<-6.14,12.739,-19.066>,<0,0,1>,<-6.14,12.739,-19.066>,USE THEO=YES
              ENDMEAS/
A5           =ALIGNMENT/START,RECALL:A4,LIST=YES
                ALIGNMENT/LEVEL,ZPLUS,PLN_TOP_PART
                ALIGNMENT/TRANS,ZAXIS,PLN_TOP_PART
                ALIGNMENT/TRANS,XAXIS,CIR_XY
                ALIGNMENT/TRANS,YAXIS,CIR_XY
              ALIGNMENT/END
PNT2         =FEAT/POINT,CARTESIAN
              THEO/<-2.72,-13.921,-2.258>,<0.8660254,0,0.5>
              ACTL/<-2.72,-13.921,-2.258>,<0.8660254,0,0.5>
              MEAS/POINT,1,WORKPLANE
                MOVE/CLEARPLANE
                HIT/BASIC,NORMAL,<-2.72,-13.921,-2.258>,<0.8660254,0,0.5>,<-2.72,-13.921,-2.258>,USE THEO=YES
              ENDMEAS/
PNT3         =FEAT/POINT,CARTESIAN
              THEO/<2.646,-13.893,-2.385>,<-0.8660254,0,0.5>
              ACTL/<2.646,-13.893,-2.385>,<-0.8660254,0,0.5>
              MEAS/POINT,1,WORKPLANE
                MOVE/CLEARPLANE
                HIT/BASIC,NORMAL,<2.646,-13.893,-2.385>,<-0.8660254,0,0.5>,<2.646,-13.893,-2.385>,USE THEO=YES
              ENDMEAS/
PNT4         =FEAT/POINT,CARTESIAN,NO
              THEO/<-0.037,-13.907,-2.321>,<0,0,1>
              ACTL/<-0.037,-13.907,-2.321>,<0,0,1>
              CONSTR/POINT,MID,PNT2,PNT3
PNT5         =FEAT/POINT,CARTESIAN
              THEO/<2.701,13.872,-2.29>,<-0.8660254,0,0.5>
              ACTL/<2.701,13.872,-2.29>,<-0.8660254,0,0.5>
              MEAS/POINT,1,WORKPLANE
                MOVE/CLEARPLANE
                HIT/BASIC,NORMAL,<2.701,13.872,-2.29>,<-0.8660254,0,0.5>,<2.701,13.872,-2.29>,USE THEO=YES
              ENDMEAS/
PNT6         =FEAT/POINT,CARTESIAN
              THEO/<-2.973,13.873,-1.819>,<0.8660254,0,0.5>
              ACTL/<-2.973,13.873,-1.819>,<0.8660254,0,0.5>
              MEAS/POINT,1,WORKPLANE
                MOVE/CLEARPLANE
                HIT/BASIC,NORMAL,<-2.973,13.873,-1.819>,<0.8660254,0,0.5>,<-2.973,13.873,-1.819>,USE THEO=YES
              ENDMEAS/
PNT7         =FEAT/POINT,CARTESIAN,NO
              THEO/<-0.136,13.872,-2.055>,<0,0,1>
              ACTL/<-0.136,13.872,-2.055>,<0,0,1>
              CONSTR/POINT,MID,PNT5,PNT6
LIN_ROTATION_PART  =FEAT/LINE,CARTESIAN,UNBOUNDED,NO
              THEO/<-0.037,-13.907,-2.188>,<-0.0035702,0.9999936,0>
              ACTL/<-0.037,-13.907,-2.188>,<-0.0035702,0.9999936,0>
              CONSTR/LINE,BF,2D,PNT4,PNT7,,
              OUTLIER_REMOVAL/OFF,3
              FILTER/OFF,WAVELENGTH=0
PART_ALIGNMENT  =ALIGNMENT/START,RECALL:A5,LIST=YES
                ALIGNMENT/LEVEL,ZPLUS,PLN_TOP_PART
                ALIGNMENT/TRANS,ZAXIS,PLN_TOP_PART
                ALIGNMENT/ROTATE,YPLUS,TO,LIN_ROTATION_PART,ABOUT,ZPLUS
                ALIGNMENT/TRANS,XAXIS,CIR_XY
                ALIGNMENT/TRANS,YAXIS,CIR_XY
              ALIGNMENT/END
              MOVE/CLEARPLANE
CIR_INNER_DIAMETER  =FEAT/CONTACT/CIRCLE/DEFAULT,CARTESIAN,IN,LEAST_SQR
              THEO/<0,0,-6.148>,<0,0,1>,20.498
              ACTL/<0,0,-6.148>,<0,0,1>,20.498
              TARG/<0,0,-6.148>,<0,0,1>
              START ANG=0,END ANG=360
              ANGLE VEC=<0.9999936,-0.0035702,0>
              DIRECTION=CCW
              SHOW FEATURE PARAMETERS=NO
              SHOW CONTACT PARAMETERS=NO
  DIM INNTER_DIAMETER= LOCATION OF CIRCLE CIR_INNER_DIAMETER  UNITS=MM ,$
  GRAPH=OFF  TEXT=OFF  MULT=10.00  OUTPUT=BOTH  HALF ANGLE=NO
  AX    NOMINAL       +TOL       -TOL       MEAS        MAX        MIN        DEV     OUTTOL
  D       20.500      0.200      0.200     20.498      0.000      0.000     -0.002      0.000 ----#----
  END OF DIMENSION INNTER_DIAMETER
            UNTIL/COUNTER==4
$$ NO,
            ================================
            SWITCH TO PROBE 2.
            ================================
            MOVE/CLEARPLANE
            LOADPROBE/DOROTHY_PROBE
            TIP/T1A0B0, SHANKIJK=-1, 0.004, 0, ANGLE=0
$$ NO,
            ===============================================================
            SECOND LOOP TO RECALL ALIGNMENTS FROM THE PERVIOUS PARTS.
            ===============================================================​
  • I think I would save the first alignment as an external one, in the program folder, and recall it in the 2nd do/until.
  • So, my second loop would look something like this?

    $$ NO,
                ================================
                SWITCH TO PROBE 2.
                ================================
                MOVE/CLEARPLANE
                LOADPROBE/DOROTHY_PROBE
                TIP/T1A0B0, SHANKIJK=-1, 0.004, 0, ANGLE=0
    $$ NO,
                ===============================================================
                SECOND LOOP TO RECALL ALIGNMENTS FROM THE PERVIOUS PARTS.
                ===============================================================
                ASSIGN/COUNTER=0
                DO/
                  ASSIGN/COUNTER=COUNTER+1
                  IF/COUNTER==1
                    RECALL/ALIGNMENT,EXTERNAL,2ND_DO_UNTIL[1]
                  END_IF/
                  IF/COUNTER==2
                    RECALL/ALIGNMENT,EXTERNAL,2ND_DO_UNTIL[2]
                  END_IF/
                  IF/COUNTER==3
                    RECALL/ALIGNMENT,EXTERNAL,2ND_DO_UNTIL[3]
                  END_IF/
                  IF/COUNTER==4
                    RECALL/ALIGNMENT,EXTERNAL,2ND_DO_UNTIL[4]
                  END_IF/
                UNTIL/COUNTER==4​


    I'm not exactly sure how it works with the loop recognizing the part alignment iteration without enclosing the number inside of square brackets.
  • When you save the alignments, give them different names inside the loop:
    i.e.:

    ASSIGN/ALIGNSTR="PARTNUMBERGOESHERE_"
    ASSIGN/COUNT=COUNT+1
    ASSIGN/FILENAME=ALIGNSTR+COUNT+".aln"
    SAVE/ALIGNMENT,FILENAME,MACHINETOPARTS​


    Then later on you can use something like this to recall them:

    ASSIGN/PART=1
    WHILE/PART<33
    ASSIGN/ALNFILE="PARTNUMBERGOESHERE_"+PART
    RECALL/ALIGNMENT,EXTERNAL,ALNFILE
    Second batch of code here:
    PART=PART+1
    END_WHILE/
    
  • Hey, I tried the example code that ctw00 has posted and it works great! Thanks for the help!