Shop OBEX P1 Docs P2 Docs Learn Events
Books or info on writing an basic not BASIC interpreter — Parallax Forums

Books or info on writing an basic not BASIC interpreter

Damien AllenDamien Allen Posts: 103
edited 2007-03-07 18:48 in General Discussion
Hi does anybody have any useful links or books on writing a basic (simple)·interpreter. I need to write an interpreter for G-Codes for my little CNC mill i'm starting to build. I've read through the very large post on the forum concerning building a CNC mill and it's not quite what i'm after.

I would like the prop to control the whole system using VGA for the display and input programs directly or save/load programs to an SD card thanks to rockicki.

Any info is appreciated

Damo

Comments

  • Mike GreenMike Green Posts: 23,101
    edited 2007-03-06 20:02
    How about starting with FemtoBasic. There's a version that uses a VGA display and already can save/load to an SD card (and read/write data to an SD card). It's fairly straightforward to add specialized statements. Have a look: http://forums.parallax.com/showthread.php?p=634092.
  • Damien AllenDamien Allen Posts: 103
    edited 2007-03-06 20:05
    Thanks Mike, are you familiar with G-code syntax? Do you have enough free time to write an introduction or tutorial? I'm fairly novice programmer and it would be a nice for a gentle introduction to the subject

    Damo
  • Mike GreenMike Green Posts: 23,101
    edited 2007-03-06 20:19
    Never heard of G-code. It will be some time before I get around to documenting much more. Have a look at two routines in FemtoBasic.spin, "factor" and "texec". Both are big case statements using an initial token code to identify the statement or expression factor to be handled. There is a table near the beginning with the text for the tokens (tok00, tok01, etc.). The program is stored with the tokens replaced by a byte from 128 (token 0) and up which makes parsing much easier. A routine "spaces" skips blanks and stops (and returns) the first non-blank. A routine "skipspaces" moves ahead to the next character, then skips over any blanks. For example, if you're looking for a left bracket followed by an expression and a closing bracket, you'd do
    if spaces <> "[noparse][[/noparse]"
       abort @syn    ' abort with a syntax error message
    skipspaces
    value := expr   ' process any expression value
    if spaces <> "]"
       abort @syn
    skipspaces
    
    
  • Damien AllenDamien Allen Posts: 103
    edited 2007-03-06 20:22
    Cheers Mike, I'll get stuck in shortly.

    Just for reference. http://en.wikipedia.org/wiki/G-code
  • Brian_BBrian_B Posts: 841
    edited 2007-03-06 20:42
    Mike,
    g-code is kind of like logo , but instead of moving a turtle your moving a tool bit. :- )

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Thank's Brian


    www.truckwiz.com

    ·"Imagination is more important than knowledge..." ·· Albert Einstein
  • T ChapT Chap Posts: 4,198
    edited 2007-03-06 20:43
    How are you going to generate the Gcode? If it is a large file do you intend to read it in line by line or in chuncks off the SD reader? Are you using steppers with step/direction for motion? Do you need arc/circular interpolation? I would think that just running lines of XYZ would be fairly simple on the Propeller, just read each line and have each motor move to it's new coordinate, then read the next line. Circles and arcs are another thing, there are few guys here that have some machines running non-Gcode machine code, they are doing circles and arcs and could probably explain where to start looking to get that code done.

    Do you have a software that will run the steppers already? Mach3 is a good software to borrow some ideas from for the Prop concept.


    You need different headers for different routines: Routing would be one routine, drilling is another.

    
    //drill command here includes tool height above material during travel, drill depth, drill method(one move or peck=X distance per Zdrill move)
    X1.0000 Y2.3000
    X1.0000 Y4.3000
    X1.0000 Y5.3000
    X1.0000 Y6.3000
    
    

    Post Edited (originator) : 3/6/2007 8:51:02 PM GMT
  • Mike GreenMike Green Posts: 23,101
    edited 2007-03-06 21:32
    For a start, FemtoBasic is an integer arithmetic interpreter and you will need fixed point (probably not floating point because of the loss of accuracy in conversion to binary). Circles and arcs will take some work. Maybe you'll want to convert to floating point to use the trig functions, then back to fixed point. The G-code looks really simple to process (other than what you actually do with the commands). I'd throw out most of FemtoBasic and just use it as a guide. How would you edit it? FemtoBasic uses a simple line number based scheme and G-code doesn't require line numbers. I don't think anyone has done a finished editor for the Propeller.
  • T ChapT Chap Posts: 4,198
    edited 2007-03-06 22:03
    Typical Gcode uses numbers to .0000

    A circle or arc requires the starting coordinate for XY, and the radius start and end (I,J). Here is a circle with its center at X0 Y0, 1" radius, F = Inches Per Minute

    There are variations of how this is done, but here is a simple version of a 1" radius circle with center at 0,0

    G2 CW interpolate
    G3 CCW interpolate

    
    G0 X1.0000 Y0.000 Z2.000   'start here
    G1 Z-0.3000  F5     'plunge tool into material  .3 deep  Punge into material at F5  speed
    G3 I-1.0000 J0.0000 F10  'move tool at F10 to route the circle
    G0 Z2.000    'done, move tool back up to 2 above material surface  
    
    
    



    The software reading this code will move the stepper(or servo) in the correct steps and direction(interpolated)

    A 1" x 1" square Gcode: G0 is a rapid move to position the motors for a cut. The Z(Tool) is referenced to 0 by lowering tool to material surface, then Zero out the axis. G1 is a linear move, for any new coordinate, move the tool that direction at the speed. A circle can actually be cut this way, just use many short lines based on some resolution.
    G0 X0.0000 Y1.0000 Z2.0000   'get into position to start
    G1 Z-0.3000 F5   'plunge into material
    X1.0000 F10    'move tool at 10 ipm
    Y0.0000
    X0.0000
    Y1.0000
    G0 Z2.0000    'done, move tool back up
    
    
    
    
    
    

    Post Edited (originator) : 3/6/2007 10:48:28 PM GMT
  • Phil Pilgrim (PhiPi)Phil Pilgrim (PhiPi) Posts: 23,514
    edited 2007-03-06 22:25
    Another option you might consider is to write a PC program to preprocess the G-codes and output integer data that's easier for your mill to interpret. In the worst case, it could even interpolate arcs into a series of short, straight-line segments.

    -Phil
  • Damien AllenDamien Allen Posts: 103
    edited 2007-03-07 12:25
    I was going to use a PC to draw/model what I want and get it to output G-Code, using the prop for basic editing and monitoring of position. Hopefully I'd like to read the whole program and display it if possible. Bearing in mind i'm very new to this stuff and I learn by doing, an I know some of what i'm proposing may not be possible.
    I would like circular/arc interpolation and line numbers wouldn't be a problem

    I'm fairly certain most of the background work as far as the control side is concerned has been achieved by a helpful fellow on these forums called NEWZED.
    I believe his positioning info/program is embedded inside his spin program and he must upload a new program to the prop everytime he needs to machine something different, hopefully NEWZED may be nice enough to clarify this.

    That just leaves the display, interpreter and SD card to figure out. I realise I may need two props for this.

    Thanks for everyones input so far [noparse]:)[/noparse]

    Damo

    Edit: Sorry it took me so long to reply. I'm in England and have to sleep

    Post Edited (Damien Allen) : 3/7/2007 12:34:22 PM GMT
  • GadgetmanGadgetman Posts: 2,436
    edited 2007-03-07 18:48
    Have you checked on Amazon.com?
    (Links to a search for 'interpreter' in the Computers & Internet category)

    smile.gif

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Don't visit my new website...
Sign In or Register to comment.