CAD CAM EDM DRO - Yahoo Group Archive

Re: [CAD_CAM_EDM_DRO] g-code parsers

on 2001-01-03 14:28:54 UTC
Les,

What you need is a "Get Token" routine, that knows about the these
special command letters (more if you like):

"N", "F", "G", "M", "A", "X", "Y", "Z", "R",
"I", "J", "K", "S", "T", "*", "(", ")",
" ", "\r", "\n"

These are returned separately. The GetToken routine also returns the
other stuff ( " 0.001") as strings, so that they can be scanned for
parameters:

sscanf(TokPtr, "%d", &n_parm) /* line number */

or an XYX coordinate, etc. Upon finding a command letter (search an
array), you dispatch to a line in a state machine where the next token
found will be the parameter: Y 1.00.

Typical parms needed:

int n_parm, g_parm, m_parm, t_parm;
double a_parm, x_parm, y_parm, z_parm;
double r_parm, i_parm, j_parm, k_parm;
double s_parm, f_parm;

Typical nodal parameters (nodal groups), and some default values:

int MoveMode = MOVE_LINEAR_INTERP;
int MovePlane = MOVE_PLANE_XY;
int MoveUnits = MOVE_INCH_UNITS;
int PositioningMode = MOVE_ABSOLUTE;
int ToolLengthComp = MOVE_TOOL_LEN_CANCEL;
int ToolMode = NO_TOOL;
int Mcode = 0;

As you "parse" a block (line), you set the nodal parameters (MoveMode =
G1), and the X,Y,Z parms, etc. We expect no more then one parm from
each nodal group (G1 X 1.0 Y 1.0 G17 G90).

After having parsed a line, we "use" the parms, a G1 and x_parm give us
enough info to move. We use the existing "state" of the Plane, Units,
ABS etc. parms to decide HOW to move.

Add as much error detection and error reporting as you desire (NEED).

Really not much more to it then that. We stay in a loop getting blocks
(lines), and parse each one, and then act upon them as necessary. Many
parms just get set as we find them (G17, G90 etc), others we wait until
the end of the line (a move, for example). If we want to get really
serious, we "read ahead", and put moves in a queue, and decide when and
when not to accelerate and decelerate (look ahead). Left as an exercise
for the reader.

Hope I haven't muttled this up to badly. But I think you get the gist
of it.

Alan KM6VV
PS, This might also give others a little bit of an idea what's going on
"under the hood".

PPS You don't really need string tests. Just look up tokens, and act
upon them in a well defined state machine. ;>)

New Year's Eve, just before our guests arrived, I got my first circle
cut using a controller I'm writing!

Les Watts wrote:
>
> In anticipation of getting the big gantry mill mechanically done
> I have been writing the control code in c. I am still waiting for some
> spiral bevel gears and angular contact bearings for the
> twin ball screw transmissions I have built.
>
> I began today on a g-code parser function. I want it to be very non-hardware
> specific- just a function that puts the commands and coordinates in a nice
> neat set of little arrays. Other functions will use that for hardware
> specific commands (to servo card with arc or NURBS interpolation). Most of
> those are written.
>
> I can do this but I really feel like I am reinventing the wheel.
> Parsing is noy the most fun code to write either. A gazzillion
> string tests.
>
> I wonder if anyone can point me to an already written c function that does
> this? I am not a c++ type but could be if it
> happens to be of that implementation.
>
> Thanks
>
> Les
>
> Leslie Watts
> L M Watts Furniture
> Tiger, Georgia USA
> http://www.rabun.net/~leswatts/wattsfurniturewp.html
>
> Welcome to CAD_CAM_EDM_DRO@...,an unmoderated list for the discussion of shop built systems, for CAD, CAM, EDM, and DRO.
>
> Addresses:
> Post message: CAD_CAM_EDM_DRO@egroups.com
> Subscribe: CAD_CAM_EDM_DRO-subscribe@egroups.com
> Unsubscribe: CAD_CAM_EDM_DRO-unsubscribe@egroups.com
> List owner: CAD_CAM_EDM_DRO-owner@egroups.com, wanliker@...
> Moderator: jmelson@... [Moderator]
> URL to this page: http://www.egroups.com/group/CAD_CAM_EDM_DRO
> FAQ: http://www.ktmarketing.com/faq.html
> bill,
> List Manager

Discussion Thread

Les Watts 2001-01-03 13:41:18 UTC g-code parsers andy@o... 2001-01-03 14:18:43 UTC Re: g-code parsers Alan Marconett KM6VV 2001-01-03 14:28:54 UTC Re: [CAD_CAM_EDM_DRO] g-code parsers Les Watts 2001-01-03 15:43:11 UTC re:g-code parsers Jon Elson 2001-01-03 16:27:55 UTC Re: [CAD_CAM_EDM_DRO] re:g-code parsers Alan Marconett KM6VV 2001-01-03 16:27:59 UTC re:g-code parsers Alan Marconett KM6VV 2001-01-03 16:35:27 UTC Re:g-code parsers Les Watts 2001-01-03 17:44:11 UTC Re: [CAD_CAM_EDM_DRO] re:g-code parsers Carlos Guillermo 2001-01-03 19:56:00 UTC RE: [CAD_CAM_EDM_DRO] re:g-code parsers ballendo@y... 2001-01-03 19:57:06 UTC re:re:g-code parsers Alan Marconett KM6VV 2001-01-03 20:00:39 UTC Re: [CAD_CAM_EDM_DRO] re:g-code parsers ballendo@y... 2001-01-03 20:06:04 UTC re:Re: re:g-code parsers