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})"

运行方式

  1. 将上述配置保存至printer.cfg(或通过[include]引入的独立cfg文件)。
  2. 重启Klipper固件或执行FIRMWARE_RESTART使配置生效。
  3. 在控制台发送命令: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位小数。
  • 此宏仅演示变量与运算逻辑,实际挤出量还需考虑耗材直径、挤出机步进值等,但核心计算模式相同。