OctoPrint中的GCODE脚本功能详解

OctoPrint中的GCODE脚本功能详解

OctoPrint OctoPrint 项目地址: https://gitcode.com/gh_mirrors/oct/OctoPrint

什么是GCODE脚本

GCODE脚本是OctoPrint提供的一项强大功能,允许用户在特定事件发生时自动执行预定义的GCODE指令序列。这些脚本可以极大地增强3D打印过程的自动化程度,让用户能够根据打印状态自动执行各种操作。

脚本的存放位置

OctoPrint默认会在以下目录中寻找GCODE脚本文件:

  • Linux系统:~/.octoprint/scripts/gcode
  • Windows系统:%APPDATA%\OctoPrint\scripts\gcode
  • macOS系统:~/Library/Application Support/OctoPrint/scripts/gcode

预定义脚本类型

OctoPrint支持多种预定义的脚本触发时机,每种都有特定的用途:

  1. 打印机连接相关

    • afterPrinterConnected:成功连接打印机后执行
    • beforePrinterDisconnected:主动断开打印机连接前执行
  2. 打印过程相关

    • beforePrintStarted:打印作业开始前执行
    • afterPrintCancelled:打印作业取消后执行
    • afterPrintDone:打印作业完成后执行
    • afterPrintPaused:打印暂停后执行
    • beforePrintResumed:打印恢复前执行
  3. 工具切换相关

    • beforeToolChange:工具切换命令(Tn)发出前执行
    • afterToolChange:工具切换命令(Tn)发出后执行

脚本模板引擎

OctoPrint使用Jinja2模板引擎来处理GCODE脚本,这意味着脚本不仅仅是简单的GCODE指令序列,而是可以包含条件判断、循环等高级编程特性的动态脚本。

模板上下文变量

在脚本执行时,OctoPrint会提供以下上下文变量:

  1. 打印机信息

    • printer_profile:包含当前打印机配置信息,如挤出机数量、构建体积、耗材直径等
  2. 位置信息

    • last_position:打印机通过M114报告的最后位置信息
      • 包含x、y、z、e坐标
      • 可能包含f(进给率)和t(当前工具)的跟踪值
  3. 温度信息

    • last_temperature:各工具和热床的最后报告温度
      • 包含实际温度和设定温度
  4. 风扇速度

    • last_fanspeed:最后设置的风扇速度
  5. 脚本信息

    • script:包含当前脚本的类型和名称
  6. 插件变量

    • plugins:插件提供的变量

实用代码片段

OctoPrint允许创建可重用的GCODE代码片段,存放在scripts/gcode/snippets目录中。这些片段可以通过{% snippet '片段名称' %}指令在其他脚本中引用。

默认代码片段示例

  1. 取消打印后脚本

    ; 禁用电机
    M84
    
    ; 禁用所有加热器
    {% snippet 'disable_hotends' %}
    {% snippet 'disable_bed' %}
    
    ; 禁用风扇
    M106 S0
    
  2. 禁用挤出机片段

    {% if printer_profile.extruder.sharedNozzle %}
    M104 T0 S0
    {% else %}
    {% for tool in range(printer_profile.extruder.count) %}
    M104 T{{ tool }} S0
    {% endfor %}
    {% endif %}
    
  3. 禁用热床片段

    {% if printer_profile.heatedBed %}
    M140 S0
    {% endif %}
    

高级应用示例

智能暂停与恢复脚本

对于单挤出机且不使用SD卡打印的用户,可以设置更智能的暂停恢复脚本:

  1. 暂停脚本

    {% if pause_position.x is not none %}
    ; 相对坐标模式
    G91
    M83
    
    ; 回抽耗材,Z轴略微上升
    G1 Z+5 E-5 F4500
    
    ; 绝对坐标模式
    M82
    G90
    
    ; 移动到安全位置
    G1 X0 Y0
    {% endif %}
    
  2. 恢复脚本

    {% if pause_position.x is not none %}
    ; 相对挤出模式
    M83
    
    ; 重新挤出耗材
    G1 E-5 F4500
    G1 E5 F4500
    G1 E5 F4500
    
    ; 绝对挤出模式
    M82
    
    ; 绝对坐标模式
    G90
    
    ; 重置E值
    G92 E{{ pause_position.e }}
    
    ; 移回暂停位置
    G1 X{{ pause_position.x }} Y{{ pause_position.y }} Z{{ pause_position.z }} F4500
    
    ; 恢复暂停前的进给率
    {% if pause_position.f is not none %}G1 F{{ pause_position.f }}{% endif %}
    {% endif %}
    

注意事项

  1. 多挤出机限制:当前固件实现通常只报告当前挤出机的E值,多挤出机系统的E值恢复可能不完整。

  2. SD卡打印限制:从SD卡打印时,OctoPrint无法准确跟踪工具选择和进给率。

  3. 位置记录:确保在设置中启用了"暂停时记录位置"和"取消时记录位置"选项,否则相关位置数据将不可用。

通过合理利用OctoPrint的GCODE脚本功能,用户可以极大地增强打印过程的自动化程度,实现更智能、更安全的打印控制。

OctoPrint OctoPrint 项目地址: https://gitcode.com/gh_mirrors/oct/OctoPrint

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

俞淑瑜Sally

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值