element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • About Us
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Motors and Drives
  • Technologies
  • More
Motors and Drives
Blog CNC Fun: Powering up a Roland EGX-300 Desktop Engraver
  • Blog
  • Forum
  • Documents
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Motors and Drives to participate - click to join for free!
  • Share
  • More
  • Cancel
Group Actions
  • Group RSS
  • More
  • Cancel
Engagement
  • Author Author: shabaz
  • Date Created: 2 Aug 2025 5:23 PM Date Created
  • Views 788 views
  • Likes 11 likes
  • Comments 15 comments
  • roland
  • engraver
  • EGX-300
  • cnc
Related
Recommended

CNC Fun: Powering up a Roland EGX-300 Desktop Engraver

shabaz
shabaz
2 Aug 2025


Introduction

The Roland EGX-300 is an ancient (several decades old) CNC machine intended for applications such as engraving door signs. It cannot handle material larger than 305 x 230 mm. The machine has the footprint of a washing machine, and is about 350 mm high.

These machines can occasionally be acquired at low cost because businesses are throwing them out because the software requires old versions of Windows to operate.

I purchased one from a factory up North a few years ago, but never got around to switching it on : ) It’s summer hols now, and my two teenage nephews were bored, so we decided to see if we could get this machine up and running.

Hardware Setup

The EGX-300 has a parallel (Centronics) connector and a serial (RS-232) 25-way socket. It’s almost always easier to go with serial, so that’s what we did.

We purchased a UGREEN USB-to-Serial (9-pin DB9) adapter cable from Amazon, which was advertised to contain a PL2303 chip inside. That’s not supported by default in modern Windows 11, so we downloaded and installed the latest PL2303 driver from the Prolific website.

After that, when we plugged in the adapter cable, we could see a COM port appear in Windows Device Manager. Great!

To convert from 9-pin to 25-pin, we used a StarTech Cross Wired Null Modem F/M Cable. It needs to be a Null Modem cable to work.

image

Next, we powered up the machine. It has an LCD screen, and it’s possible to use the control panel below it to enter a menu, select the input mode to be Serial (not Parallel!), and then set up the communications parameters. We used 9600 baud (the only options are 4800 or 9600), 8 data bits, no parity, 1 stop bit, and RTS/CTS flow control (the only other option is XON/XOFF).

For more details regarding the configuration options, consult the EGX-300 PDF user manual. 

Making it Move!

There’s a PDF Programmer’s Manual that describes the instructions that can be sent to the EGX-300.

Initially, we sent a command using a serial terminal, but that’s not very practical. Instead, we used AI to help write a simple Python program called egx300_send.py to do it for us.

The PU command means “pen up”, and it can be followed by X and Y co-ordinates. The (0,0) position is indicated in the diagram above. I have not read in detail yet, but it’s possible to use different coordinate origins if required. I think the values are scaled such that 100 corresponds to 1 mm, but I have not confirmed this yet.

If you want to move the tool to the origin, you would send the following command:

PU0,0;

The semi-colon on the end is the terminator (it can be replaced by carriage return/line feed, but for now I prefer just sending the semi-colon).

Using the Python program, you could make the tool move in a rectangular path by issuing four commands together:

python .\egx300_send.py "PU4000,1000;PU4000,3000;PU1000,3000;PU1000,1000;"

So far, we have not dared to do a PD (pen down) instruction, since we need to study the documentation so we don’t wreck the tool.

The 10-second video here shows the rectangle path taken when the Python example shown above was executed:

You don't have permission to edit metadata of this video.
Edit media
x
image
Upload Preview
image

Summary

We took a scrap CNC machine and decided to connect it to a PC, using a serial (RS-232) connection. Some simple Python code was written to move the tool.

It’s still early days, there’s a lot more to study in order to understand how to use the machine at this low level, and then perhaps consider either using existing code, or custom code, in order to make the machine do some useful work.

It’s a fun project for kids to mess around with, and they can’t accidentally do much self-harm since the machine will not operate without the protective cover in place.

Thanks for reading!

  • Sign in to reply

Top Comments

  • shabaz
    shabaz 1 month ago in reply to DAB +1
    Hi DAB, You got me curious, and I checked for an 'operational time' value in the in-built menu. I can only find one for spindle operation hours, and it's currently at 52. I don't know if that's a lot…
  • Jan Cumps
    Jan Cumps 1 month ago +1
    There is still a Dr. Engrave installer on the Roland website: https://www.rolanddga.com/support/products/software/dr-engrave
  • beacon_dave
    beacon_dave 1 month ago in reply to shabaz +1
    "...I can only find one for spindle operation hours, and it's currently at 52. I don't know if that's a lot or not!..." Looks like the spindle has a life of around 2000hours, with a brushes change…
Parents
  • shabaz
    shabaz 1 month ago

    Quite interesting, I opened a random SVG file in FreeCAD, and then in its Path Workbench, create a New Job, then it is possible to click on edges, then click on Engrave. Then, I selected Post Process, and it generated the following G-Code.

    image

    Looking at the G-Code, the main part is half-way down, in the section "(Engrave)". It contains the co-ordinates for the paths for the tool. The Z height values are defaults, but it looks like they are configurable as seen on the left side.

    I'm surprised how straightforward all this is.

    The lengths are taken from the SVG file, but if it doesn't contain them, then a conversion is used, where 96 represents 25.4mm. I've confirmed that by looking in the SVG file.

    There's old Python code here: https://gitlab.com/heavydeck-projects/egx-cnc  in a folder called egxmake, which can translate that G-Code to CAMM-GL II. It's very limited and buggy, I made a few changes and got it to just-about generate the following:

    ;IN;CS6;CA8;IP0,0,30500,20500;LT;PA;

    PU;

    PU;PU;PU2725,-2725;
    PU;PD;PD2725,-2725;
    PD;PD79,-2725;
    PD;PD79,-79;
    PD;PD2725,-79;
    PU;PU0,0;PU;

    That Python code needs more work, but it's very promising. With this approach, there's no need to have any drivers or old software, all of it's open source. Needs a ton more work to recognize more sophisticated G-Code which might have arcs etc.

    Anyway, all this was just an experiment, I don't know if it's worth pursuing, if the simpler alternative is to just run old Windows. But I suspect the Roland software is more graphics-oriented, whereas the Python approach would allow very precise control, e.g. for PCB engraving (which I'm not currently interested in however). 

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • More
    • Cancel
Comment
  • shabaz
    shabaz 1 month ago

    Quite interesting, I opened a random SVG file in FreeCAD, and then in its Path Workbench, create a New Job, then it is possible to click on edges, then click on Engrave. Then, I selected Post Process, and it generated the following G-Code.

    image

    Looking at the G-Code, the main part is half-way down, in the section "(Engrave)". It contains the co-ordinates for the paths for the tool. The Z height values are defaults, but it looks like they are configurable as seen on the left side.

    I'm surprised how straightforward all this is.

    The lengths are taken from the SVG file, but if it doesn't contain them, then a conversion is used, where 96 represents 25.4mm. I've confirmed that by looking in the SVG file.

    There's old Python code here: https://gitlab.com/heavydeck-projects/egx-cnc  in a folder called egxmake, which can translate that G-Code to CAMM-GL II. It's very limited and buggy, I made a few changes and got it to just-about generate the following:

    ;IN;CS6;CA8;IP0,0,30500,20500;LT;PA;

    PU;

    PU;PU;PU2725,-2725;
    PU;PD;PD2725,-2725;
    PD;PD79,-2725;
    PD;PD79,-79;
    PD;PD2725,-79;
    PU;PU0,0;PU;

    That Python code needs more work, but it's very promising. With this approach, there's no need to have any drivers or old software, all of it's open source. Needs a ton more work to recognize more sophisticated G-Code which might have arcs etc.

    Anyway, all this was just an experiment, I don't know if it's worth pursuing, if the simpler alternative is to just run old Windows. But I suspect the Roland software is more graphics-oriented, whereas the Python approach would allow very precise control, e.g. for PCB engraving (which I'm not currently interested in however). 

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • More
    • Cancel
Children
No Data
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube