Universal-G-Code-Sender
A cross-platform G-Code sender for GRBL, Smoothieware, TinyG and G2core.
Top Related Projects
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:
- Download the latest release of the application from the GitHub repository.
- Extract the downloaded archive to a directory of your choice.
- Run the
UniversalGcodeSender.exe
(Windows) orUniversalGcodeSender.jar
(macOS/Linux) file to launch the application. - Connect your CNC machine or 3D printer to your computer using the appropriate serial port or USB connection.
- Configure the connection settings in the Universal G-Code Sender, including the baud rate, port, and any other relevant parameters.
- 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
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.
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
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
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:
- JSSC or JSerialComm for serial communication
- JogAmp for OpenGL
- Netbeans Platform
- JTS for geometric transformations
- Batik for reading SVG
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 |
---|---|
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
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 |
---|---|
![]() | ![]() |
Screenshots
UGS Platform
UGS Platform main window
Customizable panel layout
Menu actions with customizable keybindings
Menu with plugins
One of many plugins
Basic gcode editor
Vector graphics designer for generating GCode toolpaths
UGS Classic
UGS Classic main window
UGS Classic with 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:
- Main Class:
-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
Top Related Projects
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot