Convert Figma logo to code with AI

winder logoUniversal-G-Code-Sender

A cross-platform G-Code sender for GRBL, Smoothieware, TinyG and G2core.

1,986
775
1,986
175

Top Related Projects

5,757

An open source, embedded, high performance g-code-parser and CNC milling controller written in optimized C that will run on a straight Arduino

1,435

GRBL controller application with G-Code visualizer written in Qt.

Quick Overview

The Universal G-Code Sender is a Java-based application that serves as a user interface for controlling and communicating with CNC machines and 3D printers. It provides a comprehensive set of features for sending G-code commands, monitoring machine status, and managing print jobs.

Pros

  • Cross-Platform Compatibility: The application is built using Java, allowing it to run on Windows, macOS, and Linux operating systems.
  • Extensive Feature Set: The Universal G-Code Sender offers a wide range of features, including real-time machine status monitoring, file management, and custom command support.
  • Active Development and Community: The project has an active development team and a supportive community, ensuring ongoing improvements and bug fixes.
  • Open-Source: The project is open-source, allowing users to contribute, customize, and extend the functionality as needed.

Cons

  • Java-based: The application's reliance on Java may be a drawback for some users who prefer native desktop applications.
  • Learning Curve: The extensive feature set and configuration options may present a steeper learning curve for new users.
  • Limited Visualization: The application does not provide advanced 3D visualization or simulation capabilities for print jobs.
  • Potential Performance Issues: Depending on the hardware and the complexity of the CNC machine or 3D printer, the Java-based application may experience performance issues on older or less powerful systems.

Getting Started

To get started with the Universal G-Code Sender, follow these steps:

  1. Download the latest release of the application from the GitHub repository.
  2. Extract the downloaded archive to a directory of your choice.
  3. Run the UniversalGcodeSender.exe (Windows) or UniversalGcodeSender.jar (macOS/Linux) file to launch the application.
  4. Connect your CNC machine or 3D printer to your computer using the appropriate serial port or USB connection.
  5. Configure the connection settings in the Universal G-Code Sender, including the baud rate, port, and any other relevant parameters.
  6. Start sending G-code commands to your machine and monitor its status using the various features provided by the application.

For more detailed instructions and documentation, please refer to the project's README file on GitHub.

Competitor Comparisons

5,757

An open source, embedded, high performance g-code-parser and CNC milling controller written in optimized C that will run on a straight Arduino

Pros of grbl

  • Lightweight and efficient firmware for CNC machines
  • Runs on Arduino, making it cost-effective and accessible
  • Highly optimized for real-time performance

Cons of grbl

  • Limited to specific hardware platforms
  • Requires additional software for user interface and file management
  • Less user-friendly for beginners compared to all-in-one solutions

Code Comparison

grbl (motion control):

void mc_line(float *target, plan_line_data_t *pl_data)
{
  // Calculate and execute the motion
  plan_buffer_line(target, pl_data);
  sys.step_control = STEP_CONTROL_EXECUTE_SYS_MOTION;
  st_prep_buffer();
  st_wake_up();
}

Universal G-Code Sender (sending G-code):

private void sendStringToComm(String command) throws Exception {
    if (this.isConnected()) {
        this.comm.sendStringToComm(command + "\n");
        this.comm.streamCommands();
    }
}

The code snippets highlight the different focus areas of the projects. grbl emphasizes low-level motion control, while Universal G-Code Sender focuses on high-level command sending and communication with CNC machines.

1,435

GRBL controller application with G-Code visualizer written in Qt.

Pros of Candle

  • Candle provides a more modern and intuitive user interface compared to Universal G-Code Sender.
  • Candle supports a wider range of machine types, including 3D printers, CNC machines, and laser cutters.
  • Candle offers advanced features like job scheduling, macros, and custom G-code commands.

Cons of Candle

  • Candle may have a steeper learning curve for users who are familiar with Universal G-Code Sender.
  • Candle's development is less active compared to Universal G-Code Sender, with fewer contributors and updates.
  • Candle may have fewer third-party integrations and plugins compared to Universal G-Code Sender.

Code Comparison

Here's a brief comparison of the code structure between the two projects:

Universal G-Code Sender:

public class GcodeStreamSender extends SwingWorker<Void, String> {
    private final List<String> gcodeLineList;
    private final List<String> responseLineList;
    private final List<String> sentLineList;
    private final List<String> sentCommandList;
    private final List<String> sentCommandResponseList;
    private final List<String> sentCommandTimeList;
    private final List<String> sentCommandDurationList;
    private final List<String> sentCommandStatusList;
    private final List<String> sentCommandLineNumberList;
    private final List<String> sentCommandPositionList;
    // ...
}

Candle:

class GCodeSender(threading.Thread):
    def __init__(self, controller, gcode_queue, status_queue):
        super(GCodeSender, self).__init__()
        self.controller = controller
        self.gcode_queue = gcode_queue
        self.status_queue = status_queue
        self.running = True
        self.daemon = True
        self.start()

    def run(self):
        while self.running:
            try:
                gcode = self.gcode_queue.get(timeout=0.1)
                self.controller.send_gcode(gcode)
                self.status_queue.put(self.controller.get_status())
            except queue.Empty:
                pass
            # ...

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Universal G-Code Sender

Last commit Build Status Codebeat badge Crowdin Downloads Releases Discord

Universal G-Code Sender is a Java based, cross platform G-Code sender, compatible with GRBL, TinyG, g2core and Smoothieware.

Webpage: https://universalgcodesender.com/
Discussion forum: https://github.com/winder/Universal-G-Code-Sender/discussions
Discord chat: https://discord.com/invite/4DYywtyGYK
Translations: https://translate.universalgcodesender.com/

Technical details:

Downloads

Below you will find the latest release of UGS.
For older releases please visit the releases page.

UGS Platform
The next generation, feature packed variant based on the Netbeans Platform.
Unpack and start the program bin/ugsplatform

Latest release (v2.1.12)Nightly build
Windows 64-bit Windows 64-bitWindows 64-bit Windows 64-bit
Mac OSX Mac OSXMac OSX Mac OSX
Mac OSX Mac OSX ARM64Mac OSX ARM64 Mac OSX ARM64
Linux x64 Linux 64-bitLinux x64 Linux 64-bit
Linux ARM Linux ARMLinux ARM Linux ARM
Linux ARM Linux ARM64Linux ARM Linux ARM64
Zip All platformsZip All platforms

UGS Classic
A clean and lightweight variant of UGS (requires Java 17).
Unpack and start the program by double clicking the jar file. On some platforms you may need to run the included start script.

Latest release (v2.1.12)Nightly build
Zip All platformsZip All platforms

Screenshots

UGS Platform

UGS Platform main window

UGS Platform

Customizable panel layout

Customizable panel layout

Menu actions with customizable keybindings

Actions

Menu with plugins

Plugins

One of many plugins

Dowel Maker

Basic gcode editor

Basic gcode editor

Vector graphics designer for generating GCode toolpaths

Designer

UGS Classic

UGS Classic main window

Classic main window

UGS Classic with visualizer

Classic visualizer

Development

Show details on how to compile the software

For development we use Maven and Java 17 for compiling.

Compiling and starting the application

UGS Classic:

mvn install
mvn exec:java -Dexec.mainClass="com.willwinder.universalgcodesender.MainWindow" -pl ugs-core

UGS Platform:

mvn install
mvn nbm:run-platform -pl ugs-platform/application

Execute all tests

mvn test

Building the self-executing JAR

mvn install
mvn package -pl ugs-classic

Build a UniversalGcodeSender.zip release file

mvn package -pl ugs-classic assembly:assembly

Develop via IntelliJ

If you are more used to IntelliJ, you can also build, run and debug it there.

  • Run mvn nbm:run-platform -pl ugs-platform/application once via terminal to build everything
  • Import the Source, File -> New -> Project from existing Sources
  • Setup a new "Run Configuration", Java Application, with following settings:
    • Main Class: org.netbeans.Main
    • VM Options:
-Dpolyglot.engine.WarnInterpreterOnly=false
-Dnetbeans.user=$ProjectFileDir$/ugs-platform/application/target/userdir
-Dnetbeans.home=$ProjectFileDir$/ugs-platform/application/target/ugsplatform/platform
-Dnetbeans.logger.console=true
-Dnetbeans.indexing.noFileRefresh=true
-Dnetbeans.moduleitem.dontverifyclassloader=true
-Dnetbeans.dirs=$ProjectFileDir$/ugs-platform/application/target/ugsplatform/ugsplatform:$ProjectFileDir$/ugs-platform/application/target/ugsplatform/platform:$ProjectFileDir$/ugs-platform/application/target/ugsplatform/ide:$ProjectFileDir$/ugs-platform/application/target/ugsplatform/extra:$ProjectFileDir$/ugs-platform/application/target/ugsplatform/java
--add-opens=java.base/java.net=ALL-UNNAMED
--add-opens=java.base/java.lang.ref=ALL-UNNAMED
--add-opens=java.base/java.lang=ALL-UNNAMED
--add-opens=java.base/java.security=ALL-UNNAMED
--add-opens=java.base/java.util=ALL-UNNAMED
--add-opens=java.base/java.nio=ALL-UNNAMED
--add-exports=java.base/sun.reflect.annotation=ALL-UNNAMED
--add-opens=java.prefs/java.util.prefs=ALL-UNNAMED
--add-opens=java.desktop/javax.swing.plaf.basic=ALL-UNNAMED
--add-opens=java.desktop/javax.swing.text=ALL-UNNAMED
--add-opens=java.desktop/javax.swing=ALL-UNNAMED
--add-opens=java.desktop/java.awt=ALL-UNNAMED
--add-opens=java.desktop/java.awt.event=ALL-UNNAMED
--add-opens=java.desktop/sun.awt.X11=ALL-UNNAMED
--add-opens=java.desktop/javax.swing.plaf.synth=ALL-UNNAMED
--add-opens=java.desktop/com.sun.java.swing.plaf.gtk=ALL-UNNAMED
--add-opens=java.desktop/sun.awt.shell=ALL-UNNAMED
--add-opens=java.desktop/sun.awt.im=ALL-UNNAMED
--add-exports=java.desktop/sun.awt=ALL-UNNAMED
--add-exports=java.desktop/java.awt.peer=ALL-UNNAMED
--add-exports=java.desktop/com.sun.beans.editors=ALL-UNNAMED
--add-exports=java.desktop/sun.swing=ALL-UNNAMED
--add-exports=java.desktop/sun.awt.im=ALL-UNNAMED
--add-exports=java.desktop/com.sun.java.swing.plaf.motif=ALL-UNNAMED
  • Program arguments: --branding ugsplatform
  • Working dir: $ProjectFileDir$
  • Use classpath of module: ugs-platform-app
  • There is a runConfiguration in the repository, which should be available after importing the project

Supported by

JetBrains logo.