向 Marlin 2.0 添加自定义 M 或 G 代码

3D打印 马林鱼
2021-05-06 07:44:45

向 Marlin 添加自定义 M 代码不适用于 Marlin 2.0

如何将自定义 G 代码或 M 代码添加到 Marlin 2.0?Marlin_main.cpp 文件不存在。

一般来说,对于 Marlin 2.0,事情组织得更好,但分成更多的文件。

2个回答

2.0.x中的代码与1.1.x的老分支类似,G-code在 中解析gcode.cpp,具体在process_parsed_command

void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/)

在 case 语句中,从 G 代码文件中读取的代码被解析(解释)并G28()调用适当的方法(例如调用void GcodeSuite::G28()

如果您想创建自己的代码,从那里开始可能是一个想法。还要考虑在 10,000 范围内使用不同的字母和/或代码,这样它就不会与新实现的 G 代码发生冲突。

  1. 如果添加新代码,请在 >10,000 中选择一个代码。但在这个例子中我会选择 13
  2. 导航到 Marlin 的“src”文件夹
  3. 编辑第gcode.cpp223 行附近的文件以使用新的未使用编号。例如,这将为标签创建一个新的 G 代码功能G13
  ...
  // Handle a known G, M, or T
  switch (parser.command_letter) {
    case 'G': switch (parser.codenum) {
      case 13: G13(); break;
      case 0: case 1: G0_G1(  
  ...
  1. gcode.hadd: 的 第 375 行 static void G13();声明它。

  2. 就我而言,我正在从模拟系统读取值。所以我去src/temperatures复制M105.cppG13.cpp然后在我替换GcodeSuite::M105GcodeSuite::G13. 我正在使用它来计算使用 [scale][1] 的东西的重量,但现在我只想测试功能,所以这是我的测试功能:


void GcodeSuite::G13() {

  SERIAL_ECHOPGM(MSG_OK);
  SERIAL_ECHOLNPGM("here is where weights are broadcast");

}

这也是我在 M105.cpp 的新副本(一个名为 G13.cpp 的新文件)中更改的唯一部分。文件中还有更多的东西,而不仅仅是这几行。

  1. 上传到板

  2. 当要进行八字打印并输入时,G13我得到:


Send: G13
Recv: okhere is where weights are broadcast

可以做更多的工作以使其看起来不错,但这是困难的部分。[1]:https : //www.instructables.com/id/Arduino-Bathroom-Scale-With-50-Kg-Load-Cells-and-H/