Crate cnccoder

source ·
Expand description

cnccoder is a crate for writing cutting instructions and converting them to G-code for use on 3 axis CNC machines.

Rather than generating cuts from 3D models as FreeCAD and similar software, it allows the user to precisely write the instructions for how the CNC machine should cut and which tools to use.

By providing several helper cutting functions and programs, the crate can then compile these higher level instructions down to G-code.

The crate can also generate project files for Camotics that can be used to simulate the G-code so that it can be verified before ran on an actual machine, reducing the risk of damaging the CNC machine and injury.

G-code does come in several flavors, but so far the project is only targeting CNC machines using the Grbl controller.

Example of a simple planing program (from examples/planing.rs):

use anyhow::Result;
use cnccoder::prelude::*;

fn main() -> Result<()> {
    // Create a program with metric measurements where the tool can travel freely at 10 mm
    // height, and move to 50 mm height for manual tool change.
    let mut program = Program::new(Units::Metric, 10.0, 50.0);

    // Create a cylindrical tool
    let tool = Tool::cylindrical(
        Units::Metric, // Unit for tool measurements
        20.0, // Cutter length
        10.0, // Cutter diameter
        Direction::Clockwise, // Spindle rotation direction
        10000.0, // Spindle speed (rpm)
        3000.0, // Max feed rate/speed that the cutter will travel with (mm/min)
    );

    // Get the tool context to extend the program
    let mut context = program.context(tool);

    // Append the planing cuts to the cylindrical tool context
    context.append_cut(Cut::plane(
        // Start at the x 0 mm, y 0 mm, z 3 mm coordinates
        Vector3::new(0.0, 0.0, 3.0),
        // Plane a 100 x 100 mm area
        Vector2::new(100.0, 100.0),
        // Plane down to 0 mm height (from 3 mm)
        0.0,
        // Cut at the most 1 mm per pass
        1.0,
    ));

    // Write the G-code (for CNC) `planing.gcode` and Camotics project file
    // `planing.camotics` (for simulation) to disk using a resolution value
    // of 0.5 for the Camotics simulation.
    write_project(&program, 0.5)?;

    Ok(())
}

To run the G-code simulation in Camotics (if installed), simply run:

$ cargo run --example planing && camotics planing.camotics

The cargo run --example planing command generates the G-code file planing.gcode and the Camotics project file planing.camotics in the current directory.

The files can then be opened in Camotics by running camotics planing.camotics.

In this way you can easily simulate your projects.

Modules§

  • Helper module for generating Camotics project files.
  • Module providing a variety of cuts that can be added to a program tool context.
  • Provides helpers for writing G-code and project files to disk.
  • Representations of all supported G-code instructions/commands for cnccoder.
  • A prelude module to simplify imports in projects using this crate.
  • The program module contains the highest level components. They are used to structure the a CNC programs, store and order the cuts and tools.
  • Easy to use ready made programs that each takes a measurement struct and can output the full G-code.
  • Module containing tool configurations for ballnose, conical, and cylindrical cutting tools.
  • Shared types used by cnccoder, such as Vector2, Vector3, Units, Direction, Axis and Bounds.
  • Small utility functions used in cnccoder.