# 分区热床 **Repository Path**: NBTP/zoned_bed ## Basic Information - **Project Name**: 分区热床 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-08 - **Last Updated**: 2026-08-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # zoned_bed 独立的 Klipper `extra` 模块,用于管理多个独立加热和独立热敏传感器组成的分区热床。 ## 当前能力 - 配置任意数量的热床分区。 - 每个分区由模块内部注册 Klipper 原生 heater,拥有独立传感器和 PID。 - 统一设置全部分区目标温度,或单独设置某个分区。 - 统一关闭分区加热。 - 根据 Klipper `exclude_object` 的对象多边形,开启与打印范围相交的分区。 - 通过 `get_status()` 导出各区当前温度、目标温度和加热状态。 - 启动时检查分区名称重复、数量限制和目标温度上限。 ## 安装 安装脚本会自动探测常见 Klipper 目录: ```bash ./install.sh ``` 也可明确指定 Klipper 源码目录: ```bash ./install.sh ~/klipper ``` 脚本会安装 `zoned_bed.py` 到 `klippy/extras/zoned_bed.py`。完成后重启 Klipper 以加载模块。 ## 配置示例 ```ini [exclude_object] [zoned_bed] zones: bed_a,bed_b bed_c,bed_d # 可选。省略时从 toolhead 的 XY 可运动范围自动获取。 bed_size: 350, 350 bed_origin: 0, 0 max_target: 110 default_target: 0 gcode_id: ZB bed_a_heater_pin: PA0 bed_a_sensor_type: EPCOS 100K B57560G504F bed_a_sensor_pin: PA1 bed_a_control: pid bed_a_pid_Kp: 60.0 bed_a_pid_Ki: 1.5 bed_a_pid_Kd: 500.0 bed_a_min_temp: 0 bed_a_max_temp: 120 bed_a_gcode_id: BA bed_b_heater_pin: PA2 bed_b_sensor_type: EPCOS 100K B57560G504F bed_b_sensor_pin: PA3 bed_b_control: pid bed_b_pid_Kp: 60.0 bed_b_pid_Ki: 1.5 bed_b_pid_Kd: 500.0 bed_b_min_temp: 0 bed_b_max_temp: 120 bed_b_gcode_id: BB ``` ## G-code ```text SET_ZONED_BED TARGET=60 SET_ZONED_BED ZONE=bed_front TARGET=65 SET_ZONED_BED ZONE=bed_rear TARGET=55 SET_ZONED_BED TARGET=0 GET_ZONED_BED_STATUS SET_ZONED_BED_FROM_OBJECTS TARGET=60 IDLE_TARGET=0 ZONED_BED_PID_CALIBRATE TEMPERATURE=60 TARGET=bed_a ZONED_BED_PID_CALIBRATE TEMPERATURE=60 TARGET=bed_a,bed_b ZONED_BED_PID_CALIBRATE TEMPERATURE=60 M140 S60 M190 S60 SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60 ``` 不要配置标准 `[heater_bed]` 段。`zoned_bed` 会注册 `heater_bed` 状态对象并接管 `M140`、`M190` 与 `SET_HEATER_TEMPERATURE HEATER=heater_bed`,因此切片器的标准热床命令可直接使用。发现 G-code 已定义 `exclude_object` 对象时,标准热床命令只加热对象范围命中的分区,其余分区关闭;没有对象定义时,标准热床命令会全区加热。`M190` 会先让目标分区同时开始加热,再逐区等待达到目标温度。 在切片器或上传流程启用 Klipper `exclude_object` 标记。标准热床命令会读取已经执行的 `EXCLUDE_OBJECT_DEFINE`:对象范围存在时开启与其相交的分区,其余区域关闭;对象范围尚未定义时全区加热。`SET_ZONED_BED_FROM_OBJECTS TARGET=<温度> IDLE_TARGET=<温度>` 可用于显式指定闲置分区温度。执行 `EXCLUDE_OBJECT` 后再次调用该命令可更新活动区域。 `zones` 按配置行组成二维数组,每行使用逗号分隔分区名称。数组行对应 Y 方向分块,数组列对应 X 方向分块。模块根据 `bed_size` 等分热床;省略 `bed_size` 时,模块在连接后读取 Klipper `toolhead` 的 XY 可运动范围并据此等分。显式 `bed_size` 与 `bed_origin` 用于热床范围和可运动范围不同的设备。各分区 heater 参数使用 `_