#cnc #gcode #cam #camotics #grbl

cnccoder

一个针对GRBL控制的CNC机器生成G代码操作库,并生成camotics项目进行仿真

3个不稳定版本

0.2.0 2024年4月29日
0.1.1 2023年10月31日
0.1.0 2023年7月4日

#290 in 算法

MIT/Apache

200KB
4.5K SLoC

cnccoder

cnccoder是一个用于编写切割指令并将其转换为G代码用于3轴CNC机器的crate。

与FreeCAD和类似软件从3D模型生成切割不同,它允许用户精确地编写CNC机器应该如何切割以及使用哪些工具的指令。

通过提供几个辅助切割函数程序,该crate可以将这些高级指令编译成G代码。

该crate还可以生成可用于模拟G代码的Camotics项目文件,以便在实际机器运行之前进行验证,从而降低损坏CNC机器和受伤的风险。

虽然G代码有多种风味,但到目前为止,该项目只针对使用Grbl控制器的CNC机器。

使用示例

简单平面程序的示例(来自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("planing", program, 0.5)?;

    Ok(())
}

要在Camotics中运行G代码仿真(如果已安装),只需运行

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

运行cargo run --example planing命令将生成当前目录中的G代码文件planing.gcode和Camotics项目文件planing.camotics

然后可以通过运行camotics planing.camotics在Camotics中打开这些文件。

这样您就可以轻松地模拟您的项目。

新功能愿望单

  • 使用具有定义错误的use thiserror而不是anyhow。
  • programs/模块提供更多可用的程序,例如,盒子、可重复使用的木制接合。
  • WASM构建和API,当前API由于使用工具和切割的枚举变体而与其不兼容。这目前还不被wasm-pack支持,因此可能需要暂时使用另一个API。
  • 支持基于字体的文本v雕刻。
  • 支持创建用于镶嵌的负v雕刻切割。

贡献

您可以通过多种方式提供帮助

  1. 尝试使用这个crate
  2. 报告任何问题、错误、缺失的文档或示例
  3. 创建有关crate API人机工学的反馈问题
  4. 扩展文档或示例
  5. 贡献代码更改

对crate或其功能/缺乏的反馈可能和代码贡献一样有价值。

代码贡献

尽管如此,代码贡献总是受欢迎的。创建一个合并请求,包括您的新切割、工具、程序或其他改进,并创建一个pull request。

确保任何新的/更改的面向公众的API都有适当的文档注释。

一旦pull request准备好合并,也可以将提交合并为每个特性或修复的单个提交。

此项目的提交信息应符合常规提交标准,以便可以自动计算semver版本并自动生成发布变更日志。

许可证

您可以选择在Apache许可证,版本2.0MIT许可证下许可。

除非您明确声明,否则您根据Apache-2.0许可证定义的任何有意提交给Serde的贡献,将如上所述双重许可,不附加任何额外条款或条件。

依赖关系

~3–28MB
~430K SLoC