OctoPrint中的GCODE脚本功能详解
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支持多种预定义的脚本触发时机,每种都有特定的用途:
-
打印机连接相关
afterPrinterConnected
:成功连接打印机后执行beforePrinterDisconnected
:主动断开打印机连接前执行
-
打印过程相关
beforePrintStarted
:打印作业开始前执行afterPrintCancelled
:打印作业取消后执行afterPrintDone
:打印作业完成后执行afterPrintPaused
:打印暂停后执行beforePrintResumed
:打印恢复前执行
-
工具切换相关
beforeToolChange
:工具切换命令(Tn)发出前执行afterToolChange
:工具切换命令(Tn)发出后执行
脚本模板引擎
OctoPrint使用Jinja2模板引擎来处理GCODE脚本,这意味着脚本不仅仅是简单的GCODE指令序列,而是可以包含条件判断、循环等高级编程特性的动态脚本。
模板上下文变量
在脚本执行时,OctoPrint会提供以下上下文变量:
-
打印机信息
printer_profile
:包含当前打印机配置信息,如挤出机数量、构建体积、耗材直径等
-
位置信息
last_position
:打印机通过M114报告的最后位置信息- 包含x、y、z、e坐标
- 可能包含f(进给率)和t(当前工具)的跟踪值
-
温度信息
last_temperature
:各工具和热床的最后报告温度- 包含实际温度和设定温度
-
风扇速度
last_fanspeed
:最后设置的风扇速度
-
脚本信息
script
:包含当前脚本的类型和名称
-
插件变量
plugins
:插件提供的变量
实用代码片段
OctoPrint允许创建可重用的GCODE代码片段,存放在scripts/gcode/snippets
目录中。这些片段可以通过{% snippet '片段名称' %}
指令在其他脚本中引用。
默认代码片段示例
-
取消打印后脚本
; 禁用电机 M84 ; 禁用所有加热器 {% snippet 'disable_hotends' %} {% snippet 'disable_bed' %} ; 禁用风扇 M106 S0
-
禁用挤出机片段
{% if printer_profile.extruder.sharedNozzle %} M104 T0 S0 {% else %} {% for tool in range(printer_profile.extruder.count) %} M104 T{{ tool }} S0 {% endfor %} {% endif %}
-
禁用热床片段
{% if printer_profile.heatedBed %} M140 S0 {% endif %}
高级应用示例
智能暂停与恢复脚本
对于单挤出机且不使用SD卡打印的用户,可以设置更智能的暂停恢复脚本:
-
暂停脚本
{% if pause_position.x is not none %} ; 相对坐标模式 G91 M83 ; 回抽耗材,Z轴略微上升 G1 Z+5 E-5 F4500 ; 绝对坐标模式 M82 G90 ; 移动到安全位置 G1 X0 Y0 {% endif %}
-
恢复脚本
{% 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 %}
注意事项
-
多挤出机限制:当前固件实现通常只报告当前挤出机的E值,多挤出机系统的E值恢复可能不完整。
-
SD卡打印限制:从SD卡打印时,OctoPrint无法准确跟踪工具选择和进给率。
-
位置记录:确保在设置中启用了"暂停时记录位置"和"取消时记录位置"选项,否则相关位置数据将不可用。
通过合理利用OctoPrint的GCODE脚本功能,用户可以极大地增强打印过程的自动化程度,实现更智能、更安全的打印控制。
OctoPrint 项目地址: https://gitcode.com/gh_mirrors/oct/OctoPrint
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考