Hopefully self-reply is permissible when not due to too-rapid pressing
of send, but a useful update of progress.
On 07.02.12 20:47, Erik Christiansen wrote:
> To allow us to program "G96 D3000 S500", this time not starting the
> spindle, we also need to support:
>
> Spindle mode=CSS Revs<3000 Speed=500
While adding this syntax to the experimental grammar, it became clear
that there's not much to usefully swap the order of here, in practice.
After adding 12 lines to the grammar, and 4 or 5 to the lexer, plus some new
tokens, we now accept close to a full set of spindle commands, tolerating a
measure of input syntax variability. This as input:
»
Spindle Mode=CSS Revs<3000 Speed=500 ; Just setting the mode here.
Spindle On ; Defaults to CW.
Spindle CCW Mode=CSS Speed=500
Spindle ACW Mode=CSS Revs<3000 Speed = 500
Spindle CW Mode=CSS Speed = 500 Revs < 3000
N00006 Spindle Stop
Spindle Off
Spindle Mode = RPM ; Just setting the mode here.
Spindle RPM ; This should error.
«
now generates the following output:
»
G96 D3000 S500 ; Just setting the mode here.
M3 ; Defaults to CW.
M4 G96 S500
M4 G96 D3000 S500
M3 G96 S500 D3000
N00006 M5
M5
G97 ; Just setting the mode here.
Source line 9: syntax error
Spindle RPM ; This should error.
###^
«
In addition to error messages with a pointer to the offending input
word¹, some tolerance of language variability can be seen:
+ "ACW" or "CCW"
+ "Speed=500" or "Speed = 500". i.e. Spaces to suit the user.
+ "Off" or "Stop"
+ CSS accepts its D and S arguments in either order, so we don't have to
fuss. I'll have to install a simulator on this machine, sooner or
later, to check whether LinuxCNC is OK with the swap.
+ If present, spindle motion must appear before mode details, so the
reader doesn't need to scan the whole line to find out whether the
command sets the tool spinning, or is just setting the mode for later
use.
What particularly appeals about your approach is that mentally we can
now handle all spindle control as both a conceptual and a syntactic
whole. Instead of hunting in the docs for G and M codes for the
primitives, then manually making up "what" we want to do, out of the
bits of "how", we just state what should happen. Just enough abstraction
to be useful, not enough to lose track.
If Gene had had a complete version of this the other day, then he
perhaps wouldn't have become embroiled in G92, when G10 L2 was what was
needed. (That's not to say that this "language for the occasional CNC
user" doesn't need documentation too.)
Now what other bits of gcode could usefully be handled as a conceptual
unit, based on a common verb?
¹ A compiler is not really a substitute for documentation, so a user
should check the latter for what is permissible exactly where the tool
is pointing.
That said, we do go a bit further when it's easy to do:
Source line 27: Line number too long:
N000002 Rapid Z 50.00 ; Should detect line number length.
###^
The pointer is intended to signify that there is breakage in getting
to "^" from what closely precedes.
Erik
--
The reasonable man adapts himself to the world; the unreasonable
one persists in trying to adapt the world to himself.
Therefore all progress depends on the unreasonable man.
- George Bernard Shaw
------------------------------------------------------------------------------
Keep Your Developer Skills Current with LearnDevNow!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-d2d
_______________________________________________
Emc-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/emc-users