如何在打印前添加自动床调平?

3D打印 马林鱼
2021-05-14 05:35:15

我想在每次打印之前添加自动床调平。当我在 中启用自动床位时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。

4个回答

与其修改固件来处理这个问题,您是否考虑过在您的计算机上使用预处理脚本,G29在 G 代码中搜索 a,然后在文件开头添加一个G28/G29对(如果没有G29找到)?

与其将G28(Home) 和G29(bed level) 放在配置中,不如将它放在 G 代码生成切片器中作为预印代码。这将自动将其添加到任何 G 代码切片的开头,在 G 代码运行时强制执行归位和调平。

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

GCODE 脚本菜单选项项

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


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

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

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

G28 ;Auto-homing
G29 ;Bed leveling

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

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