586,102 active members*
2,606 visitors online*
Register for free
Login
Results 1 to 9 of 9
  1. #1
    Join Date
    Feb 2006
    Posts
    1792

    local variables of a macro

    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. #2
    Join Date
    Mar 2006
    Posts
    61
    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. #3
    Join Date
    Mar 2003
    Posts
    2932
    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.
    Attached Thumbnails Attached Thumbnails Variable Types.jpg  

  4. #4
    Join Date
    Feb 2006
    Posts
    1792
    Quote Originally Posted by dcoupar View Post
    ...I'm not in front of a control, so I can't verify what happens to the variables once the macro has run.
    If possible, kindly verify and let us know.

  5. #5
    Join Date
    Sep 2005
    Posts
    767
    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.

  6. #6
    Join Date
    May 2007
    Posts
    781
    Quote Originally Posted by sinha_nsit View Post
    My guess is that these will always be null variables in every call of macro. I want a confirmation, please!
    It is possible that on some machines they may retain values from the last time the sub was called.

    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. #7
    Join Date
    Jan 2007
    Posts
    91
    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. #8
    Join Date
    Oct 2007
    Posts
    499
    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. #9
    Join Date
    Jun 2007
    Posts
    3757

    Lightbulb Make your own stack if you want one.

    Quote Originally Posted by Andre' B View Post
    It is possible that on some machines they may retain values from the last time the sub was called.

    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.
    Note: THIS SHOULD WORK IN Mach3, but I know nothing about Fanuc Syntax.

    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. Sheridan 6"x24" Lathe + more. Three ways to fix things: The right way, the other way, and maybe your way, which is possibly a faster wrong way.

Similar Threads

  1. macro variables
    By sinha_nsit in forum Fanuc
    Replies: 5
    Last Post: 01-15-2008, 10:42 AM
  2. Local variables
    By jorgehrr in forum G-Code Programing
    Replies: 4
    Last Post: 02-19-2007, 10:03 PM
  3. Variables/Macro uses....
    By theemudracer in forum Fanuc
    Replies: 12
    Last Post: 12-13-2006, 08:45 PM
  4. Variables/Macro use ????
    By theemudracer in forum G-Code Programing
    Replies: 2
    Last Post: 12-11-2006, 04:47 PM
  5. G65 local variables help
    By FanukRC in forum G-Code Programing
    Replies: 7
    Last Post: 07-26-2006, 12:00 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •