Nomar记录一段历史
如何在打印前添加自动床调平?

我想在每次打印之前添加自动床调平。当我在configuration.h启用自动床位时,它只在菜单中显示自动床。我在cardreader.cpp找到了这段代码

void CardReader::openAndPrintFile(const char *name) { char cmd[4 + strlen(name) + 1]; // Room for "M23 ", filename, and null sprintf_P(cmd, PSTR("M23 %s"), name); for (char *c = &cmd[4]; *c; c++) *c = tolower(*c); enqueue_and_echo_command(cmd); enqueue_and_echo_commands_P(PSTR("M24")); }

并将其更改为

void CardReader::openAndPrintFile(const char *name) { char cmd[4 + strlen(name) + 1]; // Room for "M23 ", filename, and null sprintf_P(cmd, PSTR("M23 %s"), name); for (char *c = &cmd[4]; *c; c++) *c = tolower(*c); enqueue_and_echo_command("G28"); enqueue_and_echo_command("G29"); enqueue_and_echo_command(cmd); enqueue_and_echo_commands_P(PSTR("M24")); }

现在在每次打印之前,打印机会执行两次自动打印,但是当打印开始时,自动打印被忽略,打印机的行为就像在执行自动打印之前一样。

请帮我解决这个问题。

我使用的是 Marlin 固件 1.1.0。

为什么不将自动调平命令添加到起始 G 代码(在切片器中)?
我希望它是自动的,有时我只有 g 代码文件并且不可能编辑所有这些文件
@HadiBarak 如果配置正确,您将可以选择在手动开始打印之前自动调平床。这将在 Prepare -> bed leveling(或任何调用的选项)下。将它添加到起始 G 代码是最好的解决方案。但请确保将其放在 G28(自动归位)之后,打印某些内容时无法自动运行该命令,因为这是由起始 G 代码控制的。
@HadiBarak 您可以使用任何 TXT 编辑器编辑 Gcode,只需要在 G28 之后添加 G29。

5个回答

我不太精通 G 代码,但在Modern Machine Shop:Understanding G27、G28、G29 和 G30 中,我发现了您添加的G28G29代码的这些描述:

  • G28 :对于 G28 指令中包含的任何轴字母地址,机器首先(快速)移动到这些轴的中间位置。然后在指令轴上快速回零位置。

  • G29 : G29 也是两步指令。首先,它使机器移动(在指令轴上)到最近的G28指令中使用的中间位置。其次,它使机器移动到包含在G29指令中的位置。

所以在我看来你只需要这两个命令之一。您修改的代码似乎在启动时单独运行,而不是针对每个单独的打印。我将首先分别尝试对每个 G 命令进行修改,以便您可以确切地看到硬件上的差异。

我不知道如何处理所涉及的代码,但看起来您需要在另一个地方进行修改,例如在任何循环向打印机发送连续命令之前。

尽管我的流利程度有限,但希望这会有所帮助...

您找到的这些描述与专业 CNC 机床上的 G28/G29 命令有关。在 3D 打印机固件中,它们被(错误地)挪用于其他用途。 G28 执行到终点站的归位序列(这种 - 但不是真的 - 对应于您的描述),而 G29 启动自动床调平。

与其修改固件来处理这个问题,您是否考虑过在您的计算机上编写一个预处理脚本,在 G 代码中搜索G29 ,然后在未找到G29情况下在文件开头添加G28 / G29对?

@SeanHoulihane 我添加了一个 [answer](https://3dprinting.stackexchange.com/a/6777/5740),它描述了如何使用 OctoPrint
重新阅读问题后,似乎这可能是解决这种情况下问题的唯一方法,除非 Octoprint 可以执行与预处理相同的操作。

使用 Marlin 1.1.0,您可以在已存在 SD 卡的情况下打开打印机电源时自动运行 G 代码文件。

在卡的根目录添加一个名为auto0.g的文件,其中包含以下 G 代码:

 G28 ;Auto-homing G29 ;Bed leveling

通常,床调平图应重复用于所有后续打印,直到打印机关闭。

最多可以提供 10 个文件,从auto0.gauto9.g

您想发布这个(或其衍生版本)作为问题的答案[使用 Marlin 固件时,能否在插入 SD 卡时自动运行 G 代码脚本?](https://3dprinting.stackexchange.com/questions /6778/can-g-code-scripts-be-run-automatically-on-inserting-an-sd-card-when-using-marli)

我没有将G28 (家庭)和G29 (床位)放在配置中,而是将它放在 G 代码生成切片器中作为预印代码。这将自动将其添加到任何 G 代码切片的开头,在 G 代码运行时强制执行归位和调平。

另一个完全符合您要求的答案涉及使用打印服务器。打印服务器是一个应用程序,它通过 USB 连接从另一个设备运行打印机指令,这可以是您的计算机/笔记本电脑,或专用的Raspberry Pi (小型且价格合理的计算机)。这里进一步描述的一个这样的应用程序是OctoPrint (这可能很好地与其他应用程序一起完成,但需要首先检查!),该打印服务器应用程序允许集成许多第三方插件以及它已经提供的广泛功能集有开箱即用。其中一个功能是GCODE scripts (以这种方式拼写以匹配 Octoprint 设置菜单中的选项);此屏幕截图显示了一些详细信息:

GCODE 脚本菜单选项项

从图像中可以看出,有特定的“事件”可用于在特定事件发生时处理 G 代码命令,例如就在打印开始之前。您可以使用该事件来插入您的调平命令。


请注意,在图像中您会发现奇怪的 G 代码命令,如OCTO100OCTO110 ,这是名为“GCODE 系统命令”的插件的一个功能,它允许运行 shell 脚本来安排风扇。我只是在打印机空闲时关闭风扇的电源以消除打印机空闲时的噪音,只有在热端温度升高时才需要风扇。

随机文章