hexagon logo

Editing Features/Constructed Features Inside Loop Array?

Hello All,

Fairly new to loops in PCdmis and hoping someone can shed some light on this.

I have a simple loop setup to go through 2 parts. I found (through some extensive searching) that I can change which part is being dimensioned by adding a "[1]" or "[2]" to the feature being dimensioned.
If I add "[1]" to Point1 it will call up Point1 on Part 1. As seen in the code here:

DIM DIM1= LOCATION OF POINT POINT [1] UNITS=MM ,$
GRAPH=OFF TEXT=OFF MULT=10.00 OUTPUT=BOTH
AX MEAS NOMINAL +TOL -TOL DEV OUTTOL
X 19.969 20.000 0.050 0.050 -0.031 0.000 -#-------
Y 19.996 20.000 0.050 0.050 -0.004 0.000 ----#----
Z 0.005 0.000 0.050 0.050 0.005 0.000 ----#----
T 0.005 0.000 0.050 0.050 0.005 0.000 ----#----
END OF DIMENSION DIM1​

This works great, and I can add the bracketed numbers to each dimension to individually edit them. My question is: How do I do the same thing, but actually edit the feature itself, instead of just the measurement of it?

TLDR: I want to edit a single instance of a feature in a looping program without affecting the other instances of it. Is that possible?
Parents
  • I'm presuming you want to remeasure as that feature is often out of spec and/or method isn't reliable enough to pass it all the time?
    --If you are dumping all your dimension outputs within the end of the loop: you can assess which ones are OOS and prompt operator with the option to remeasure the OOS features.
    --If you are immediately dimensioning your features after measuring each feature, you can assess each feature for OOS and prompt operator with option to remeasure the oos feature.
    --If you are dimensioning outside of the loop, respectfully speaking, you are making a mistake in your methodology.

    here's how i assess if a part on an 8 cavity fixture is OOS and inform operators which one it is. (it was on a fixture that was pretty easy to put parts in too far, which i've since fixed).
    COMMENT/REPT,
    
    RECALL/ALIGNMENT,INTERNAL,A8_1
    $$ NO,
    This section evaluates if any of the first 8 samples fail, and will flag the auditor with a comment. If comment isn't responded to within 30 seconds, it will
    automatically continue, prompting to load samples 9-16. If responded with "NO", program will cancel without any Measurlink output,
    but will still output all data for cavities 1-8 to the C:\ drive location.
    ASSIGN/OT1=SUM(ARRAY(AA_1.D.OUTTOL <> 0, AB1_1.M.OUTTOL <> 0, AB2_1.M.OUTTOL <> 0, AB3_1.M.OUTTOL <> 0, AC1_1.M.OUTTOL <> 0, AC2_1.M.OUTTOL <> 0, AC3_1.M.OUTTOL <> 0, AD_1.D.OUTTOL <> 0, AE_1.M.OUTTOL <> 0, AF_1.M.OUTTOL <> 0))
    ASSIGN/OT2=SUM(ARRAY(AA_2.D.OUTTOL <> 0, AB1_2.M.OUTTOL <> 0, AB2_2.M.OUTTOL <> 0, AB3_2.M.OUTTOL <> 0, AC1_2.M.OUTTOL <> 0, AC2_2.M.OUTTOL <> 0, AC3_2.M.OUTTOL <> 0, AD_2.D.OUTTOL <> 0, AE_2.M.OUTTOL <> 0, AF_2.M.OUTTOL <> 0))
    ASSIGN/OT3=SUM(ARRAY(AA_3.D.OUTTOL <> 0, AB1_3.M.OUTTOL <> 0, AB2_3.M.OUTTOL <> 0, AB3_3.M.OUTTOL <> 0, AC1_3.M.OUTTOL <> 0, AC2_3.M.OUTTOL <> 0, AC3_3.M.OUTTOL <> 0, AD_3.D.OUTTOL <> 0, AE_3.M.OUTTOL <> 0, AF_3.M.OUTTOL <> 0))
    ASSIGN/OT4=SUM(ARRAY(AA_4.D.OUTTOL <> 0, AB1_4.M.OUTTOL <> 0, AB2_4.M.OUTTOL <> 0, AB3_4.M.OUTTOL <> 0, AC1_4.M.OUTTOL <> 0, AC2_4.M.OUTTOL <> 0, AC3_4.M.OUTTOL <> 0, AD_4.D.OUTTOL <> 0, AE_4.M.OUTTOL <> 0, AF_4.M.OUTTOL <> 0))
    ASSIGN/OT5=SUM(ARRAY(AA_5.D.OUTTOL <> 0, AB1_5.M.OUTTOL <> 0, AB2_5.M.OUTTOL <> 0, AB3_5.M.OUTTOL <> 0, AC1_5.M.OUTTOL <> 0, AC2_5.M.OUTTOL <> 0, AC3_5.M.OUTTOL <> 0, AD_5.D.OUTTOL <> 0, AE_5.M.OUTTOL <> 0, AF_5.M.OUTTOL <> 0))
    ASSIGN/OT6=SUM(ARRAY(AA_6.D.OUTTOL <> 0, AB1_6.M.OUTTOL <> 0, AB2_6.M.OUTTOL <> 0, AB3_6.M.OUTTOL <> 0, AC1_6.M.OUTTOL <> 0, AC2_6.M.OUTTOL <> 0, AC3_6.M.OUTTOL <> 0, AD_6.D.OUTTOL <> 0, AE_6.M.OUTTOL <> 0, AF_6.M.OUTTOL <> 0))
    ASSIGN/OT7=SUM(ARRAY(AA_7.D.OUTTOL <> 0, AB1_7.M.OUTTOL <> 0, AB2_7.M.OUTTOL <> 0, AB3_7.M.OUTTOL <> 0, AC1_7.M.OUTTOL <> 0, AC2_7.M.OUTTOL <> 0, AC3_7.M.OUTTOL <> 0, AD_7.D.OUTTOL <> 0, AE_7.M.OUTTOL <> 0, AF_7.M.OUTTOL <> 0))
    ASSIGN/OT8=SUM(ARRAY(AA_8.D.OUTTOL <> 0, AB1_8.M.OUTTOL <> 0, AB2_8.M.OUTTOL <> 0, AB3_8.M.OUTTOL <> 0, AC1_8.M.OUTTOL <> 0, AC2_8.M.OUTTOL <> 0, AC3_8.M.OUTTOL <> 0, AD_8.D.OUTTOL <> 0, AE_8.M.OUTTOL <> 0, AF_8.M.OUTTOL <> 0))
    ASSIGN/WHATCAV=IF(OT1<>0,"#1, ","")+IF(OT2<>0,"#2, ","")+IF(OT3<>0,"#3, ","")+IF(OT4<>0,"#4, ","")+IF(OT5<>0,"#5, ","")+IF(OT6<>0,"#6, ","")+IF(OT7<>0,"#7, ","")+IF(OT8<>0,"#8, ","")
    IF/SUM(ARRAY(OT1,OT2,OT3,OT4,OT5,OT6,OT7,OT8)) == 0
    GOTO/CONTINUEOUTPUT
    END_IF/
    ELSE/
    OOT1NOTE =COMMENT/YESNO,NO,FULL SCREEN=YES,AUTO-CONTINUE=NO,
    "Part(s) in fixture location(s) " + WHATCAV + " = out of tolerance. "
    "Continue Program for samples 9-16 (as applies)? "
    "Click YES to continue, or "
    "Click NO to end routine. "
    " --If no, data will NOT be sent to Measurlink."
    IF_GOTO/OOT1NOTE.INPUT=="NO",GOTO = END
    IF_GOTO/OOT1NOTE.INPUT=="YES",GOTO = CONTINUEOUTPUT
    END_ELSE/
    CONTINUEOUTPUT =LABEL
    


    you could modify this to asses which dim is out of spec and use flow controls (labels and if_goto or if/, operator comment, goto, /endif) before each feature to go back and remeasure that dim.

    --or respectfully speaking, you could improve the method to more robustly/repeatably measure that feature that isn't reproduceable.
Reply
  • I'm presuming you want to remeasure as that feature is often out of spec and/or method isn't reliable enough to pass it all the time?
    --If you are dumping all your dimension outputs within the end of the loop: you can assess which ones are OOS and prompt operator with the option to remeasure the OOS features.
    --If you are immediately dimensioning your features after measuring each feature, you can assess each feature for OOS and prompt operator with option to remeasure the oos feature.
    --If you are dimensioning outside of the loop, respectfully speaking, you are making a mistake in your methodology.

    here's how i assess if a part on an 8 cavity fixture is OOS and inform operators which one it is. (it was on a fixture that was pretty easy to put parts in too far, which i've since fixed).
    COMMENT/REPT,
    
    RECALL/ALIGNMENT,INTERNAL,A8_1
    $$ NO,
    This section evaluates if any of the first 8 samples fail, and will flag the auditor with a comment. If comment isn't responded to within 30 seconds, it will
    automatically continue, prompting to load samples 9-16. If responded with "NO", program will cancel without any Measurlink output,
    but will still output all data for cavities 1-8 to the C:\ drive location.
    ASSIGN/OT1=SUM(ARRAY(AA_1.D.OUTTOL <> 0, AB1_1.M.OUTTOL <> 0, AB2_1.M.OUTTOL <> 0, AB3_1.M.OUTTOL <> 0, AC1_1.M.OUTTOL <> 0, AC2_1.M.OUTTOL <> 0, AC3_1.M.OUTTOL <> 0, AD_1.D.OUTTOL <> 0, AE_1.M.OUTTOL <> 0, AF_1.M.OUTTOL <> 0))
    ASSIGN/OT2=SUM(ARRAY(AA_2.D.OUTTOL <> 0, AB1_2.M.OUTTOL <> 0, AB2_2.M.OUTTOL <> 0, AB3_2.M.OUTTOL <> 0, AC1_2.M.OUTTOL <> 0, AC2_2.M.OUTTOL <> 0, AC3_2.M.OUTTOL <> 0, AD_2.D.OUTTOL <> 0, AE_2.M.OUTTOL <> 0, AF_2.M.OUTTOL <> 0))
    ASSIGN/OT3=SUM(ARRAY(AA_3.D.OUTTOL <> 0, AB1_3.M.OUTTOL <> 0, AB2_3.M.OUTTOL <> 0, AB3_3.M.OUTTOL <> 0, AC1_3.M.OUTTOL <> 0, AC2_3.M.OUTTOL <> 0, AC3_3.M.OUTTOL <> 0, AD_3.D.OUTTOL <> 0, AE_3.M.OUTTOL <> 0, AF_3.M.OUTTOL <> 0))
    ASSIGN/OT4=SUM(ARRAY(AA_4.D.OUTTOL <> 0, AB1_4.M.OUTTOL <> 0, AB2_4.M.OUTTOL <> 0, AB3_4.M.OUTTOL <> 0, AC1_4.M.OUTTOL <> 0, AC2_4.M.OUTTOL <> 0, AC3_4.M.OUTTOL <> 0, AD_4.D.OUTTOL <> 0, AE_4.M.OUTTOL <> 0, AF_4.M.OUTTOL <> 0))
    ASSIGN/OT5=SUM(ARRAY(AA_5.D.OUTTOL <> 0, AB1_5.M.OUTTOL <> 0, AB2_5.M.OUTTOL <> 0, AB3_5.M.OUTTOL <> 0, AC1_5.M.OUTTOL <> 0, AC2_5.M.OUTTOL <> 0, AC3_5.M.OUTTOL <> 0, AD_5.D.OUTTOL <> 0, AE_5.M.OUTTOL <> 0, AF_5.M.OUTTOL <> 0))
    ASSIGN/OT6=SUM(ARRAY(AA_6.D.OUTTOL <> 0, AB1_6.M.OUTTOL <> 0, AB2_6.M.OUTTOL <> 0, AB3_6.M.OUTTOL <> 0, AC1_6.M.OUTTOL <> 0, AC2_6.M.OUTTOL <> 0, AC3_6.M.OUTTOL <> 0, AD_6.D.OUTTOL <> 0, AE_6.M.OUTTOL <> 0, AF_6.M.OUTTOL <> 0))
    ASSIGN/OT7=SUM(ARRAY(AA_7.D.OUTTOL <> 0, AB1_7.M.OUTTOL <> 0, AB2_7.M.OUTTOL <> 0, AB3_7.M.OUTTOL <> 0, AC1_7.M.OUTTOL <> 0, AC2_7.M.OUTTOL <> 0, AC3_7.M.OUTTOL <> 0, AD_7.D.OUTTOL <> 0, AE_7.M.OUTTOL <> 0, AF_7.M.OUTTOL <> 0))
    ASSIGN/OT8=SUM(ARRAY(AA_8.D.OUTTOL <> 0, AB1_8.M.OUTTOL <> 0, AB2_8.M.OUTTOL <> 0, AB3_8.M.OUTTOL <> 0, AC1_8.M.OUTTOL <> 0, AC2_8.M.OUTTOL <> 0, AC3_8.M.OUTTOL <> 0, AD_8.D.OUTTOL <> 0, AE_8.M.OUTTOL <> 0, AF_8.M.OUTTOL <> 0))
    ASSIGN/WHATCAV=IF(OT1<>0,"#1, ","")+IF(OT2<>0,"#2, ","")+IF(OT3<>0,"#3, ","")+IF(OT4<>0,"#4, ","")+IF(OT5<>0,"#5, ","")+IF(OT6<>0,"#6, ","")+IF(OT7<>0,"#7, ","")+IF(OT8<>0,"#8, ","")
    IF/SUM(ARRAY(OT1,OT2,OT3,OT4,OT5,OT6,OT7,OT8)) == 0
    GOTO/CONTINUEOUTPUT
    END_IF/
    ELSE/
    OOT1NOTE =COMMENT/YESNO,NO,FULL SCREEN=YES,AUTO-CONTINUE=NO,
    "Part(s) in fixture location(s) " + WHATCAV + " = out of tolerance. "
    "Continue Program for samples 9-16 (as applies)? "
    "Click YES to continue, or "
    "Click NO to end routine. "
    " --If no, data will NOT be sent to Measurlink."
    IF_GOTO/OOT1NOTE.INPUT=="NO",GOTO = END
    IF_GOTO/OOT1NOTE.INPUT=="YES",GOTO = CONTINUEOUTPUT
    END_ELSE/
    CONTINUEOUTPUT =LABEL
    


    you could modify this to asses which dim is out of spec and use flow controls (labels and if_goto or if/, operator comment, goto, /endif) before each feature to go back and remeasure that dim.

    --or respectfully speaking, you could improve the method to more robustly/repeatably measure that feature that isn't reproduceable.
Children