Klipper 귀환 타임아웃 문제
문제 설명
귀환 과정에서 통신 타임아웃 오류가 발생합니다:
Error during homing z: Communication timeout during homing
이 문제는 여러 MCU를 사용하는 Z축 귀환 시나리오에서 흔히 발생합니다. 귀환 중 호스트 컴퓨터의 부하가 높거나, 여러 MCU 간 통신 응답이 불안정하면 타임아웃이 발생할 수 있습니다.
- Klipper가 정상적으로 설치되어 실행 가능한지 확인하세요.
- 현재 사용자가 Klipper 설치 사용자인지 확인하세요.
- 아래 명령어의 경로가 실제 시스템과 일치하는지 확인하세요.
- Klipper 소스 코드를 수정하거나 스크립트를 추가하기 전에 관련 파일을 백업하는 것을 권장합니다.
- 타임아웃 시간 조정
- KlipperScreen 관리
방법 1: 타임아웃 시간 조정
이 방법은 Klipper 소스 파일 mcu.py를 직접 수정합니다. 귀환 타임아웃 문제를 확인할 때만 사용하는 것을 권장합니다. Klipper를 업데이트하면 수정 사항이 덮어쓰기될 수 있습니다. 문제 해결 또는 확인이 완료되면 기본값으로 복원하는 것이 좋습니다.
먼저 원본 파일을 백업합니다:
cp ~/klipper/klippy/mcu.py ~/klipper/klippy/mcu.py.bak
Klipper의 TRSYNC_TIMEOUT을 수정합니다:
sed -i 's/TRSYNC_TIMEOUT = [0-9.]*$/TRSYNC_TIMEOUT = 0.05/' ~/klipper/klippy/mcu.py
Klipper 서비스를 재시작합니다:
sudo systemctl restart klipper
현재 설정 확인:
grep "TRSYNC_TIMEOUT =" ~/klipper/klippy/mcu.py
기본값으로 복원이 필요한 경우:
sed -i 's/TRSYNC_TIMEOUT = [0-9.]*$/TRSYNC_TIMEOUT = 0.025/' ~/klipper/klippy/mcu.py
sudo systemctl restart klipper
백업 파일 복원이 필요한 경우:
cp ~/klipper/klippy/mcu.py.bak ~/klipper/klippy/mcu.py
sudo systemctl restart klipper
방법 2: KlipperScreen 관리
KlipperScreen을 임시로 종료하여 시스템 리소스를 확보하고, 귀환 과정에서 통신 타임아웃이 발생할 확률을 낮춥니다.
이 방법은 gcode_shell_command.py, 스크립트 디렉토리 및 매크로 구성을 추가합니다. 현재 시스템이 shell command 사용을 허용하는지, 스크립트 경로가 실제 설치 경로와 일치하는지 확인하세요.
필요한 파일 다운로드
표준 시스템:
git clone https://cnb.cool/3dmellow/public/klipper-klipperscreen-manager
curl -# -L --retry 3 --retry-delay 2 -o ~/klipper/klippy/extras/gcode_shell_command.py https://raw.githubusercontent.com/dw-0/kiauh/master/kiauh/extensions/gcode_shell_cmd/assets/gcode_shell_command.py
FlyOS-FAST 시스템:
cd /data
git clone https://cnb.cool/3dmellow/public/klipper-klipperscreen-manager
curl -# -L --retry 3 --retry-delay 2 -o /data/klipper/klippy/extras/gcode_shell_command.py https://raw.githubusercontent.com/dw-0/kiauh/master/kiauh/extensions/gcode_shell_cmd/assets/gcode_shell_command.py
스크립트 권한 설정
표준 시스템:
cd ~/klipper-klipperscreen-manager
chmod +x ~/klipper-klipperscreen-manager/scripts/*.sh
FlyOS-FAST 시스템:
cd /data/klipper-klipperscreen-manager
chmod +x /data/klipper-klipperscreen-manager/scripts/*.sh
구성 파일 생성
- Klipper 구성 디렉토리에
klipper_macros.cfg파일을 생성합니다. printer.cfg파일 상단에 다음을 추가합니다:
[include klipper_macros.cfg]
매크로 명령어 구성
klipper_macros.cfg에 다음 내용을 추가합니다. /data/klipper-klipperscreen-manager/scripts/를 실제 스크립트 경로로 변경하세요.
[gcode_shell_command disable_klipperscreen]
command: sh /data/klipper-klipperscreen-manager/scripts/disable_klipperscreen.sh
timeout: 5.0
verbose: True
[gcode_shell_command enable_klipperscreen]
command: sh /data/klipper-klipperscreen-manager/scripts/enable_klipperscreen.sh
timeout: 5.0
verbose: True
[gcode_macro RESTART_KlipperScreen]
variable_time: 60
gcode:
{% set wait_time = params.TIME|default(printer["gcode_macro RESTART_KlipperScreen"].time)|int %}
{action_respond_info("대기 시간: %s 초" % wait_time)}
RUN_SHELL_COMMAND CMD=disable_klipperscreen PARAMS={wait_time}
[gcode_macro ENABLE_KlipperScreen]
gcode:
{action_respond_info("KlipperScreen 즉시 시작")}
RUN_SHELL_COMMAND CMD=enable_klipperscreen
사용 방법
KlipperScreen 임시 종료:
RESTART_KlipperScreen
종료 시간 지정(예: 120초):
RESTART_KlipperScreen TIME=120
수동으로 KlipperScreen 즉시 시작:
ENABLE_KlipperScreen
이 방법은 KlipperScreen 인터페이스를 임시로 종료하여 시스템 리소스를 확보하고 CPU 부하를 낮춰 귀환 과정 중 통신 타임아웃을 줄입니다.
복원 방법
이 방법을 더 이상 사용하지 않을 경우, 순서대로 복원하세요:
printer.cfg에서[include klipper_macros.cfg]를 삭제하거나 주석 처리합니다.klipper_macros.cfg에서disable_klipperscreen,enable_klipperscreen,RESTART_KlipperScreen,ENABLE_KlipperScreen관련 구성을 삭제합니다.- 다운로드한 스크립트 디렉토리를 삭제합니다.
표준 시스템:
rm -rf ~/klipper-klipperscreen-manager
FlyOS-FAST 시스템:
rm -rf /data/klipper-klipperscreen-manager
시스템에 다른 기능이 gcode_shell_command.py에 의존하지 않는 경우, 이 파일도 삭제할 수 있습니다. 삭제하기 전에 다른 매크로가 RUN_SHELL_COMMAND를 사용하고 있지 않은지 확인하세요.