![]() | |
| Home Page | Mark Forums Read | Today's Posts | My Replies | Classifieds | Reviews | Photo Gallery | Web Links | Share Files | Advertise With Us | Ad List |
| |||||||
| Fanuc Discuss Fanuc controllers here! |
| This forum is sponsored by: |
![]() |
| | LinkBack | Thread Tools | Search this Thread | Display Modes |
|
#1
| |||
| |||
A macro may use several local variables for intermediate calculations. Since such variables do not appear in the argument list, these are initially null variables (like #0). But when the macro is called these variables get modified. My question is that if the same calling program calls the macro again, will such variables be null variables again, or will they have the values stored in them during the previous call of the macro? I know that local variables of a macro are not defined outside the macro. But do these remain in the memory of CNC for subsequent call(s) of that particular macro? My guess is that these will always be null variables in every call of macro. I want a confirmation, please! |
|
#2
| |||
| |||
| Personaly i only use local variables for values which are calculated each time the macro runs. I use common variables ie #500 onward (Fanuc) to store set up parameters which I want to remain the same every time the macro is run and also these values will be retained at power off/on. Regards stu. |
|
#3
| ||||
| ||||
| According to the manual (see attached .jpg), variables #1-#33 and #100-#199 are initialized to null at power off. #500-#999 retain their values. I'm not in front of a control, so I can't verify what happens to the variables once the macro has run. |
|
#5
| |||
| |||
| It's been a while since I've written macros, but here's how I remember them working: The values of local variables are passed to the macro with "arguments", and can also be used within the macro for multi-step calculations. They hold their values within the macro, but if you return (M99) from the macro to the calling program and call the macro again, the local variables will have new values, based upon the new arguments. If no arguments are used to pass values to the macro, the values are null, like #0. A null variable has the numeric value of zero in a calculation. The "common" variables in the #100-#199 range do hold their values as you call macros and return from macros. They do lose their values when you turn the control off, however. The variables from #500 to #999 hold their values even if you power the control down and back up. |
| Sponsored Links |
|
#6
| |||
| |||
| But since they are local to the (level) of the sub call and not the sub itself and for just good progamming practice (regardless of the programming language) it would be a bad idea to assume it will always be true. Edit : So you should always set a local variable to a known value either in the line calling the sub or within the sub itself. I wish the macro sub calls used a stack system rather then that fixed number of levels. |
|
#7
| ||||
| ||||
| Its possible on some Fanucs that the commons #100-#199 will change to null with a control reset. There is a parameter to set that will stop this from happening. I only want them to clear at powerdown. My oi/mc came to me this way. |
|
#8
| |||
| |||
| It has been a while since I have worked on Fanuc, but if memory serves there is a machine parameter to govern what happens to # variables (well there was on M150i four yeears ago). Variables #1 to #33 are cleared at program stop and/or reset. Variables #100 to #199 may be set to clear at program stop, program reset or power down. Variables #500 and above are stored at power down and restored at power up. |
|
#9
| ||||
| ||||
Lets say our stack is at #1000 Let #996 to #999 be temporary X,Y,Z,A variables that can be destroyed by a call. Let #99 be our index. (start of program) #99 = 0 (set up #996 to #999 here if you need to) call subroutines, and you can nest them if you want. M30 (end of program) (---------------------) O1234 (subroutine label) (subroutine with X,Y,Z and A in #996,#997,#998 and #999) #99 = #99 + 4 (first lline) (access private stack) #[1000 + #99] = #996 (save X value) #[1001 + #99] = #997 (save Y value) #[1002 + #99] = #998 (save Z value) #[1003 + #99] = #999 (save A value) G1 X[#996] Y[#997] Z[#998] A[#999] (more G-Code) (other calls) #997 = 0 (you can destroy this if you want) (other calls) #99 = #99 - 4 (restore on exit this subroutine level) M99 (return) (end subroutine) Other subroutines called will have their own private stack if use the #99 calling and exit convention.
__________________ Super X3. 3600rpm. Three ways to fix things: The right way, the other way, and maybe your way, which is possibly a faster wrong way. |
![]() |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
| Thread Tools | Search this Thread |
| Display Modes | |
| |
Similar Threads | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| macro variables | sinha_nsit | Fanuc | 5 | 01-15-2008 03:42 AM |
| Local variables | jorgehrr | G-Code Programing | 4 | 02-19-2007 03:03 PM |
| Variables/Macro uses.... | theemudracer | Fanuc | 12 | 12-13-2006 01:45 PM |
| Variables/Macro use ???? | theemudracer | G-Code Programing | 2 | 12-11-2006 09:47 AM |
| G65 local variables help | FanukRC | G-Code Programing | 7 | 07-25-2006 06:00 PM |