How does the G-code Interpreter interpret?[SOLVED]
14 Jan 2014 11:56 - 17 Jan 2014 05:22 #42744
by clunc
How does the G-code Interpreter interpret?[SOLVED] was created by clunc
When I try to load--not run--a G-code program with this line:
#2002=ACOS[#2000/[2.0*#1002]]
Axis complains with the error message:
"Argument for acos out of range"
I've added a DEBUG statement and M2 just before the ACOS line, and determined that the program will then load, and running it provides a valid value for the argument (-1<= arg <=+1).
It is probably worth noting that the params from which the arg is calculated are the result of probing.
I'll try to do it with an ASIN or ATAN (with its wacky 2-argument syntax) if clarity isn't forthcoming with the ACOS.
I'm just very surprised that the compiler/interpreter is complaining about the argument even before the program runs so it can find out what it is!
Thanks for any insights.
clunc
#2002=ACOS[#2000/[2.0*#1002]]
Axis complains with the error message:
"Argument for acos out of range"
I've added a DEBUG statement and M2 just before the ACOS line, and determined that the program will then load, and running it provides a valid value for the argument (-1<= arg <=+1).
It is probably worth noting that the params from which the arg is calculated are the result of probing.
I'll try to do it with an ASIN or ATAN (with its wacky 2-argument syntax) if clarity isn't forthcoming with the ACOS.
I'm just very surprised that the compiler/interpreter is complaining about the argument even before the program runs so it can find out what it is!
Thanks for any insights.
clunc
Last edit: 17 Jan 2014 05:22 by clunc.
Please Log in or Create an account to join the conversation.
- Todd Zuercher
- Offline
- Platinum Member
Less
More
- Posts: 5007
- Thank you received: 1441
14 Jan 2014 12:37 #42745
by Todd Zuercher
Replied by Todd Zuercher on topic ACOS error, just LOADING G-code into AXIS (?)
Maybe you need to preload your variables with dummy values (that would be valid in your acos expression) that will then be over written once the probing occurs.
The following user(s) said Thank You: clunc
Please Log in or Create an account to join the conversation.
14 Jan 2014 21:18 - 14 Jan 2014 21:55 #42764
by clunc
Replied by clunc on topic ACOS error, just LOADING G-code into AXIS (?)
Todd,
In fact, I had set all vars to -9999 before I ever use them (so I can tell when they've been set later, and to increase the likelihood that any crash will be Spec-Tacular...).
...AND, now you cause me to think of it--I just wonder what those dummy values mean if, in fact, they are being plugged in on loading.
Thanks, it's something to check. All I could think of was "changing the font in the editor" because it seemed to make about as much (non)sense as anything else.
EDIT:
A first glance, just plugging in the large -9999 dummy values, suggested it might be the cause ACOS[BIGNUM/smallnum] = ACOS[ something >>1].
However, a closer look indicated that all the variables had been changed from their dummy values, by expressions, to values which would not have resulted in an out-of-range argument; which would mean that #PARAM=number is being interpreted by the loader, while #PARAM=[num/num] is not.
Q. Could someone explain what program evaluation, if any, takes place on loading a program?
--
clunc
In fact, I had set all vars to -9999 before I ever use them (so I can tell when they've been set later, and to increase the likelihood that any crash will be Spec-Tacular...).
...AND, now you cause me to think of it--I just wonder what those dummy values mean if, in fact, they are being plugged in on loading.
Thanks, it's something to check. All I could think of was "changing the font in the editor" because it seemed to make about as much (non)sense as anything else.
EDIT:
A first glance, just plugging in the large -9999 dummy values, suggested it might be the cause ACOS[BIGNUM/smallnum] = ACOS[ something >>1].
However, a closer look indicated that all the variables had been changed from their dummy values, by expressions, to values which would not have resulted in an out-of-range argument; which would mean that #PARAM=number is being interpreted by the loader, while #PARAM=[num/num] is not.
Q. Could someone explain what program evaluation, if any, takes place on loading a program?
--
clunc
Last edit: 14 Jan 2014 21:55 by clunc. Reason: add some observations and a question
Please Log in or Create an account to join the conversation.
14 Jan 2014 22:00 - 14 Jan 2014 22:01 #42765
by ArcEye
Replied by ArcEye on topic ACOS error, just LOADING G-code into AXIS (?)
Todd Zuercher wrote:
Todd is exactly right.
The problem is that Axis does not just 'load' a file, it goes through the interpreter as if it was running and the plot is rendered etc.
If you do assignments without any conditional tests that the values in the params are within range, you will get an error, even if those values would be filled in later.
Filling the params used with valid numbers is one way to get over it, but runs the risk of your being unable to differentiate between a return from probing and the default you initialised to
Might be better to test the values and output a warning for out of range values, without halting the program by trying to make the assignment
regards
EDIT I posted as you did but hopefully covers it
Maybe you need to preload your variables with dummy values (that would be valid in your acos expression) that will then be over written once the probing occurs.
Todd is exactly right.
The problem is that Axis does not just 'load' a file, it goes through the interpreter as if it was running and the plot is rendered etc.
If you do assignments without any conditional tests that the values in the params are within range, you will get an error, even if those values would be filled in later.
Filling the params used with valid numbers is one way to get over it, but runs the risk of your being unable to differentiate between a return from probing and the default you initialised to
Might be better to test the values and output a warning for out of range values, without halting the program by trying to make the assignment
regards
EDIT I posted as you did but hopefully covers it
Last edit: 14 Jan 2014 22:01 by ArcEye.
The following user(s) said Thank You: clunc
Please Log in or Create an account to join the conversation.
14 Jan 2014 22:09 #42766
by clunc
Replied by clunc on topic How/when does the G-code Interpreter interpret?
Changing subject line to broaden the question.
The program is executed by the "Interpreter" to which there are few operational clues in the G-code and INI file references.
Q. Could someone explain what program evaluation, if any, takes place on loading a program?
The program is executed by the "Interpreter" to which there are few operational clues in the G-code and INI file references.
Please Log in or Create an account to join the conversation.
15 Jan 2014 01:07 #42775
by andypugh
The graphical preview is generated by running a partial copy of the full interpreter (actually completely separate code).
If you are using the Axis GUI then you can just skip preview of troublesome lines. See section 11.7
www.linuxcnc.org/docs/html/gui/axis.html#_axis_preview_control
This probably also works for anything else which uses the same preview widget.
Replied by andypugh on topic ACOS error, just LOADING G-code into AXIS (?)
Q. Could someone explain what program evaluation, if any, takes place on loading a program?
The graphical preview is generated by running a partial copy of the full interpreter (actually completely separate code).
If you are using the Axis GUI then you can just skip preview of troublesome lines. See section 11.7
www.linuxcnc.org/docs/html/gui/axis.html#_axis_preview_control
This probably also works for anything else which uses the same preview widget.
The following user(s) said Thank You: clunc
Please Log in or Create an account to join the conversation.
15 Jan 2014 23:55 - 15 Jan 2014 23:57 #42834
by clunc
Replied by clunc on topic ACOS error, just LOADING G-code into AXIS (?)
@Todd Zuercher, @ArcEye, @andypugh
Thank you all. The mist has lifted from my eyes. Following Andy's link, I now put an (AXIS, stop) comment--I interpet that to mean "stop helping" :^)--on the line immediately before the ACOS and the script was read in just fine.
(Just discovered Named Parameters #<localvar>, #<_globalvar>, so I'm doing a complete rewrite, again. "You can always tell a programmer; but you cain't tell him much...")
Big Thanks!
--
clunc
Thank you all. The mist has lifted from my eyes. Following Andy's link, I now put an (AXIS, stop) comment--I interpet that to mean "stop helping" :^)--on the line immediately before the ACOS and the script was read in just fine.
(Just discovered Named Parameters #<localvar>, #<_globalvar>, so I'm doing a complete rewrite, again. "You can always tell a programmer; but you cain't tell him much...")
Big Thanks!
--
clunc
Last edit: 15 Jan 2014 23:57 by clunc. Reason: fix chars which are apparently being interpreted
Please Log in or Create an account to join the conversation.
Time to create page: 0.090 seconds