2021-11-28 16:46:54 [显示全部楼层]
35355浏览
查看: 35355|回复: 2

[教程] 【更新2】跟思兼学习Klipper(04) 解决Klipper不支持中文gcode文件

[复制链接]

跟着思兼学习Klipper(04) 解决新版 Klipper 不支持中文 gcode 文件问题

前言

原创文章,转载引用请务必注明链接,水平有限,如有疏漏,欢迎指正交流。【思兼 sjqlwy#gmail.com 2021年11月28日】

由于 Klipper 更新频率太高,新功能无法充分在各种情况下进行测试,所以经常有朋友升级之后出现各种报错,无法使用。这里介绍如何解决升级新版 Klipper v0.10.0-167 之后,无法使用含有中文(或者其他特殊符号) gcode 文件的问题。

【2021年12月5日 更新】修复使用 Klipper Python3 后,内存占用显示不正确的问题。

2021年12月18日 更新

1、精简版

  1. 修改 KIAUH 助手脚本,使能 Klipper Python3

    # Switch to Python3
    sed -i 's|python2|python3|g' ~/kiauh/scripts/install_klipper.sh
  2. 使用 KIAUH 助手删除旧版 Klipper Python2

    image-20211128154834873

  3. 重新安装 Klipper(Python3)

2、详解版

我之前一直使用的是 0.91 没升级,这次趁着重新调整主板,就想着顺便升级下主板固件,看看新的温敏传感器配置 sensor_type: Generic 3950 是否效果更好。于是问题来了,开始报错。总结一下升级之后会出现的问题及原因:

  • Q1:树莓派和主板固件版本不一致 | Klipper 固件由运行在树莓派上的【Klippy】和运行在主板上的【固件】组成,两者相辅相成,并且需要版本尽量一致。并且不管你使用多少块主板都要同步升降级,包括将树莓派作为 MCU 使用的情况。
  • Q2:新版 Klipper 固件不支持中文 gcode 文件 | 随着 Python2 停止维护,作者之前说过 新版的 Klipper v0.10.0 会逐渐转向使用 Python3,这次的问题就是 Python2 转 Python3 带来的 non-ASCII 编码问题。Moonraker 则一直使用Python3 开发。

其实关于版本升级,由于 Klipper 更新太快,有些功能用不到,我们挑有用的功能对应的版本升级就可以了。具体可以在四处找到更新信息:

  • <u>版本发布</u>                        (Releases

  • <u>配置文件更改</u>    (Config_Changes

  • 官方提交            (Commits

  • 合并申请            (Pull Requests

一般大家关注前 2 个就行,第 4 个有些改动则没有被合并到主分支。

2.1 问题描述

我之前上传有中文名称的 gcode 文件正常使用,升级到 v0.10.0-167 后报错,内容如下:

{'message': "'ascii' codec can't decode byte 0xe6 in position 3: ordinal not in range(128)", 'error': 'WebRequestError'} Internal error on command:"M20"

查询手册发现 M20 命令是列出 SD 卡内文件,手动执行也报错,搜索也发现有其他人遇到这个问题()。

2.2 解决方法

方法么,有两种:

2.2.1 使用 Release 版本

cd ~/klipper
# 注意会固定使用 Release 版本无法自动更新
git checkout v0.10.0
# 如果想恢复使用最新版本
git checkout master

2.2.2 使用 Klipper Python3

Klipper 其实一直都在测试迁移到 Python3,相关讨论:

要求是系统安装有 Python v3.6 及以上。对应的开发分支为:work-python3-20211001

image-20211128162439598

我们参考 Python3 support 里面介绍的方法,切换到 Klipper Python3:

# 停止 Klipper 服务
sudo service klipper stop
# 克隆最新的 work-python3-20211001 分支
cd ~/klipper && git fetch && git checkout origin/work-python3-20211001
# 创建 Python 虚拟环境
virtualenv -p python3 ~/python3-env
~/python3-env/bin/pip install -r ~/klipper/scripts/klippy-requirements.txt
# ~/python3-env/bin/python ~/klipper/klippy/klippy.py ~/printer.cfg -l /tmp/klippy.log
# 修改 Klipper 服务内容
sudo nano /etc/systemd/system/klipper.service
# ExecStart=/home/pi/python3-env/bin/python /home/pi/klipper/klippy/klippy.py /home/pi/klipper_config/printer.cfg -l /home/pi/klipper_logs/klippy.log -a /tmp/klippy_uds
# 重新载入 Klipper 配置并重启
sudo systemctl daemon-reload
sudo systemctl restart klipper

此时我们可以看到 Klipper 0.10.0 正常启动,并且 M20 可以正常列出 SD 卡带中文名称的 gcode 文件了。但是这种有个问题,我无法使用最新版的 Klipper 所带来的新功能。于是我们继续查看该分支的最新提交,发现其实新版 Klipper 已经可以较好地运行在 Python2/Python3 上了,只要修改安装脚本 install-octopi.sh 中为 python3 即可。

image-20211128163317924

对应查看 KIAUH 助手,也不支持 Klipper Python3,修改 install_klipper.sh 重新安装,成功。

image-20211128163549274

注意,此种情况会出现在 KIAUH 助手 以及 FluiddPI OS 上,前者是因为尚未切换到 Klipper Python3,后者是因为最新的 Fluidd v1.16.2 发布于2021年07月10日,彼时还停留在 Klipper v0.91 Python2

3、修复内存占用显示不正确的问题【已解决】

如下图所示,迁移到 Klipper Python3 后,偶然发现内存占用一直是 100%,参考 statistics: Fix memory usage reading on Python 3 ,进行修复,后续版本估计会更新。

image-20211205035456634

如下图所示修改 klipper/klippy/extras/statistics.py

image-20211205040813492

sed -i 's/import os, time, logging/import os, time, logging, io/g' ~/klipper/klippy/extras/statistics.py
sed -i '0,/meminfo/{s/open/io.open/}' ~/klipper/klippy/extras/statistics.py
sed -i '0,/meminfo/{s/rb/r/}' ~/klipper/klippy/extras/statistics.py
sudo systemctl restart klipper

image-20211205041136233

4、 关于自动共振抑制测试的问题

有朋友提问说切换到 Klipper Python3 后,使用 SHAPER_CALIBRATE 命令执行自动测试时会报错,类似 import matplotlib 时提示缺少库。我们以 SHAPER_CALIBRATE 为关键词搜索 Klipper 源码,锁定 klipper/scripts/calibrate_shaper.py 脚本,前两行内容如下:

#!/usr/bin/env python2
# Shaper auto-calibration script
#
# Copyright (C) 2020  Dmitry Butyugin <dmbutyugin@google.com>
# Copyright (C) 2020  Kevin O'Connor <kevin@koconnor.net>
#
# This file may be distributed under the terms of the GNU GPLv3 license.
from __future__ import print_function
import importlib, optparse, os, sys
from textwrap import wrap
import numpy as np, matplotlib

其它共振抑制相关脚本也是如此:

#!/usr/bin/env python
# Script to plot input shapers

我们回过来看 官方文档 关于软件安装部分的命令:

~/klippy-env/bin/pip install -v numpy
sudo apt update
sudo apt install python-numpy python-matplotlib

真相大白:

  1. Klipper 默认使用 Python2 创建虚拟环境,位于 ~/klippy-env/bin/
  2. numpy 包主要用于数学计算,安装两次:
    • 第 1 次安装到 Klipper 虚拟环境,用于测量加速度计噪音等,根据创建时使用 Python2 还是 Python3 安装对应版本
    • 第 2 次安装到系统,python-numpy 一般是 Python2,python3-numpy 一般是 Python3
  3. matplotlib 包主要用于绘图,所以只安装一次
  4. 默认自动测定命令调用系统的 Python2 而不是虚拟环境中的,当没有安装相关包时就会报错

解决方法:

  1. 如果继续使用 Python2 来生成数据,请注意正常安装 python-numpy  和 python-matplotlib 包即可

  2. 如果想使用 Python3 来运行脚本,请不要使用自动测定命令,参考 文档 手动使用 TEST_RESONANCES AXIS= 命令测定 X/Y 即可

    sudo apt update
    sudo apt install python3-numpy python3-matplotlib
    python3 ~/klipper/scripts/calibrate_shaper.py /tmp/resonances_x_*.csv -o /tmp/shaper_calibrate_x.png
    python3 ~/klipper/scripts/calibrate_shaper.py /tmp/resonances_y_*.csv -o /tmp/shaper_calibrate_y.png

    也可以修改 calibrate_shaper.py 内容为 #!/usr/bin/env python3 ,但是使用默认 python2 的脚本比较多,需要一个个修改,相对麻烦一些。

  3. 可能有用的调试命令:

    python -V
    ~/klippy-env/bin/python -V
    # 查看软件包安装状态,第二列 i 代表软件包安装并完成配置,下图代表 python2/3 版本的 numpy 已经正确安装
    pi@blv:~ $ dpkg -l *numpy
    Desired=Unknown/Install/Remove/Purge/Hold
    | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
    |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
    ||/ Name            Version      Architecture Description
    +++-===============-============-============-==================================================================
    ii  python-numpy    1:1.16.2-1   armhf        Numerical Python adds a fast array facility to the Python language
    un  python2.7-numpy <none>       <none>       (no description available)
    ii  python3-numpy   1:1.16.2-1   armhf        Fast array facility to the Python 3 language
    un  python3.7-numpy <none>       <none>       (no description available)

题外话

欢迎对 Klipper 固件感兴趣,以及对改版 CNC 加工的 Voron 三叉戟、v0、v2.4 感兴趣的朋友加群交流(QQ Group:490111638)

狭维失  初级技师

发表于 2022-10-14 14:42:12

在klipper/klippy/extras/virtual_sdcard.py 文件   
直接注释代码:gcmd.respond_raw("File opened:%s Size:%d" % (filename, fsize))

可以临时解决。
回复

使用道具 举报

pATAq  版主
 楼主|

发表于 2022-10-14 23:14:09

狭维失 发表于 2022-10-14 14:42
在klipper/klippy/extras/virtual_sdcard.py 文件   
直接注释代码:gcmd.respond_raw("File opened:%s Siz ...

现在都Python3 Klipper了,没有这问题。升级Python3才是根本的解决方法xD
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail