3. 使用变量与数学运算
任务目标
在Klipper宏中定义变量并执行数学运算,以挤出量计算为例:根据设定的层高、线宽与挤出长度,计算理论挤出体积,并将结果通过RESPOND输出到终端。
核心实现
# 计算挤出量并输出到终端
[gcode_macro CALC_EXTRUDE]
description: 根据层高、线宽和长度计算挤出体积
gcode:
# 定义输入变量(可通过宏参数覆盖)
{% set layer_height = params.LAYER_HEIGHT|default(0.2)|float %}
{% set line_width = params.LINE_WIDTH|default(0.4)|float %}
{% set extrude_len = params.EXTRUDE_LEN|default(100)|float %}
# 数学运算:矩形截面近似体积 V = 层高 × 线宽 × 长度
{% set volume = layer_height * line_width * extrude_len %}
# 输出到终端(RESPOND 的 msg 参数支持字符串拼接)
RESPOND msg="Extrude Volume: {volume:.3f} mm^3 (LH={layer_height}, LW={line_width}, L={extrude_len})"
运行方式
- 将上述配置保存至
printer.cfg(或通过[include]引入的独立cfg文件)。 - 重启Klipper固件或执行
FIRMWARE_RESTART使配置生效。 - 在控制台发送命令:
CALC_EXTRUDE LAYER_HEIGHT=0.3 LINE_WIDTH=0.5 EXTRUDE_LEN=120
验证方法
- 终端应显示:
Extrude Volume: 18.000 mm^3 (LH=0.3, LW=0.5, L=120)(0.3×0.5×120=18.0)。 - 不带参数执行
CALC_EXTRUDE,应输出默认值计算结果:0.2×0.4×100=8.000 mm³。 - 若参数缺失或非法,Klipper会报错提示,不会产生错误输出。
关键说明
- Jinja2模板中
params为宏参数字典,|default()过滤器用于设置缺省值,|float确保数值类型。 RESPOND的msg参数支持Jinja2表达式,{volume:.3f}为格式化输出保留3位小数。- 此宏仅演示变量与运算逻辑,实际挤出量还需考虑耗材直径、挤出机步进值等,但核心计算模式相同。