What's new
What's new

#3000 macro problem

meandean77

Aluminum
Joined
Jun 23, 2014
Location
United States
Need help with incorporating a fanuc #3000 macro into a renishaw part probe program. When I test the macro using only the minimum code to test the program logic and input values into variables nesacary to either cause an alarm or pass through the program depending on the values of the variables the #3000 alarm macro works perfectly . When I incorporate it into a fully functional program to use the part probe to determine the values of the concerning variables, the machine always throws a #3000 alarm regardless if the variable value is in tolerance or not? Fanuc 31-1
 
Should post the clip of the code where the trouble is occurring. Helps us understand what you are trying to do.

Based on how I read your problem, it may be because the control is reading ahead and pre-processing or buffering the macro. Insert a G31 on its own line just before the IF statements where you test the values of your variables for pass/fail condition. A standalone G31 is effective in preventing buffering.
 
Should post the clip of the code where the trouble is occurring. Helps us understand what you are trying to do.

Based on how I read your problem, it may be because the control is reading ahead and pre-processing or buffering the macro. Insert a G31 on its own line just before the IF statements where you test the values of your variables for pass/fail condition. A standalone G31 is effective in preventing buffering.
If that is the case, it would be better to insert G31 just before the #3000 block.
However, I believe, the problem is something else. It will be clear when the code is posted.
 
this works. alarms at 603 group as expected.
O1237 (TEST)

#601=.023

#602=-.01

#603=1.



G20

G17 G49 G0 G40 G90 G53 G80 Z0.0


IF[#601EQ0]GOTO105(SKIP IF 0)

IF[#601LT-.05]GOTO101(#601 OUT OF RANGE)

IF[#601GT.05]GOTO101(#601 OUT OF RANGE)


N105

IF[#602EQ0]GOTO106(SKIP IF 0)

IF[#602LT-.05]GOTO102(#602 OUT OF RANGE)

IF[#602GT.05]GOTO102(#602 OUT OF RANGE)


N106

IF[#603EQ0]GOTO107(SKIP IF 0)

IF[#603LT-.05]GOTO103(#603 OUT OF RANGE)

IF[#603GT.05]GOTO103(#603 OUT OF RANGE)


N101 #3000=1 ( #601 OUT OF RANGE)

N102 #3000=2 ( #602 OUT OF RANGE)

N103 #3000=3 ( #603 OUT OF RANGE)


N107 (ALL GOOD TO PROCEED)


M30
 
this does not work. alarms at #601 group even though the probed value of #601=.0231 which is well within range.
O1236 (PROBE WEB FACE 1)
(PALLET 5, MC1)

G20

G17 G49 G0 G40 G90 G53 G80 Z0.0

( WORK-OFFSETT--P1-1 )

( TOOL- )

G10 L20 P1 X-12.5949 Y-25.9844 Z-30.7085 B0


T100 M106


( CLEAR 601-603 )

#601=0

#602=0

#603=0


(*** MUST FILL OUT THESE VARIABLES ***)

(*** TARGET FROM CAD MODEL ***)

#611=0

#612=10.8511

#613=9.2699


(*** STOCK DIMENSIONS **)

#614=14.75 (X WIDTH)

#615=13.75 (Y WIDTH)


(** DEPTH TO DROP PROBE DOWN TO MEASURE WEB**)

#616=-.5


(**** END FILL OUT VALUES ****)


M19


M63

B0

M61

G90


G43 H100 Z25.

G65 P9832 (TURN ON PROBE)

G65 P9810 X#611 Y#612 F500. (POSITION XY)

G65 P9810 Z[#613+3.] F100. (POSITION Z FAST)

G65 P9810 Z[#613+.1] F25. (POSTION Z SLOW)

G65 P9811 Z#613 (PROBE FACE Z #613)



#603=#137-#613


G65 P9812 X#614 Z[#613+#616] (PROBE WEB X)



#601=#135-#611



G65 P9812 Y#615 Z[#613+#616] (PROBE WEB Y)



#602=#136-#612


G65 P9833 (TURN OFF PROBE)



(*** SET HOW FAR OFF PART CAN BE FROM CAD/CAM MODEL ***)


IF[#601EQ0]GOTO105(SKIP IF 0)

IF[#601LT-.15]GOTO101(#601 OUT OF RANGE)

IF[#601GT.15]GOTO101(#601 OUT OF RANGE)



N105

IF[#602EQ0]GOTO106(SKIP IF 0)

IF[#602LT-.05]GOTO102(#602 OUT OF RANGE)

IF[#602GT.05]GOTO102(#602 OUT OF RANGE)



N106

IF[#603EQ0]GOTO107(SKIP IF 0)

IF[#603LT-.05]GOTO103(#603 OUT OF RANGE)

IF[#603GT.05]GOTO103(#603 OUT OF RANGE)



N101 #3000=1 ( #601 OUT OF RANGE)

N102 #3000=2 ( #602 OUT OF RANGE)

N103 #3000=3 ( #603 OUT OF RANGE)


N107 (ALL GOOD TO PROCEED)


G49 G53

G5.1 Q0

G91 G28 Z0.0 M5

G28 X0.0 Y0.0

G90

( EST RUN TIME: MIN: 5 )

M30
 
If that is the case, it would be better to insert G31 just before the #3000 block.
However, I believe, the problem is something else. It will be clear when the code is posted.
i posted the code in the comments. i commented the test, that works perfectly, i also posted the production code that does not work. thank you for your assistance.
 
Should post the clip of the code where the trouble is occurring. Helps us understand what you are trying to do.

Based on how I read your problem, it may be because the control is reading ahead and pre-processing or buffering the macro. Insert a G31 on its own line just before the IF statements where you test the values of your variables for pass/fail condition. A standalone G31 is effective in preventing buffering.
i posted the code in the comments. i commented the test, that works perfectly, i also posted the production code that does not work. thank you for your assistance. i will give G31 a try.
 
You are redefining #601. Check the new value.
#601=.0231 which is well within range, yet #3000 alarm is thrown at the #601 group. the test program works perfectly and is proven. the problem is when its incorporated into a production program, even though #601 #602 #603 values are well within range. thank you for your assistance.
 
#601=.0231 which is well within range, yet #3000 alarm is thrown at the #601 group. the test program works perfectly and is proven. the problem is when its incorporated into a production program, even though #601 #602 #603 values are well within range. thank you for your assistance.
Insert #500 = #601 before the IF block and check #500 after the program ends.
 
Many probe setups use some of the #500 series variable to store probe tip data and calibration results. One must check what their system uses to know what addresses are available for use.
exactly. i have renishaw laser tool setter and part probe. laser uses #500-#549, part probe uses #550-#599. that's why i only use #600-#799 for my variables. also doing as sinha commented would just make #500 have the same value as #601 which i physically checked at the machine and is well within range.
 
Insert #500 = #601 before the IF block and check #500 after the program ends.
Actually, this suggestion does not make much sense. #601 is also a non-volatile variable. You can always read it after the program ends.
What value does it display?
 
Actually, this suggestion does not make much sense. #601 is also a non-volatile variable. You can always read it after the program ends.
What value does it display?
#601 reads #601=.0231 which is well within range #602 and #603 are also within range. the test program is proven to work perfectly. when that exact code is incorporated into a part probing program it always throws a #3000 alarm #601 out of range even though it is well within range
 
Turn the look ahead off before probing. Maybe reading a head.
I've tried G5.1 Q0 before every line of calculation, still exact same problem. I agree that it seems it's a read ahead problem. What's strange is that it only happens when incorporated into a probing routine. The macro alarm works perfectly with no machine movement and manually defining the variable values in the test program Monday I will try putting the alarm logic portion of the program into a separate sub program and see if that helps.
 








 
Back
Top