Kihagyás

# Hibakeresés

Ez a dokumentum a Klipper hibakeresési eszközeinek egy részét ismerteti.

## Regressziós tesztek futtatása

A Klipper GitHub fő tárolója a "github actions"-t használja egy sor regressziós teszt futtatásához. Hasznos lehet néhány ilyen tesztet helyben futtatni.

A forráskód "whitespace check" a következővel futtatható:

    ./scripts/check_whitespace.sh

A Klippy regressziós tesztcsomag számos platformról igényel "adatszótárakat". A legegyszerűbben úgy szerezhetjük be őket, ha letöltjük őket a githubról. Miután letöltöttük az adatszótárakat, a regressziós csomag futtatásához használjuk a következőket:

    tar xfz klipper-dict-20??????.tar.gz
    ~/klippy-env/bin/python ~/klipper/scripts/test_klippy.py -d dict/ ~/klipper/test/klippy/*.test

## Parancsok kézi küldése a mikrokontrollernek

Normális esetben a G-kód parancsokat a klippy.py folyamat fordítja Klipper mikrokontroller parancsokra. Azonban az is lehetséges, hogy manuálisan küldjük el ezeket az MCU-parancsokat (a Klipper forráskódjában a DECL_COMMAND() makróval jelölt függvények). Ehhez futtasd a következőket:

    ~/klippy-env/bin/python ./klippy/console.py /tmp/pseudoserial

Az eszközön belül a "HELP" parancsban találsz további információkat a funkcióiról.

Néhány parancssori opció is rendelkezésre áll. További információkért futtasd a: `~/klippy-env/bin/python ./klippy/console.py --help` parancsot

## A G-kód fájlok lefordítása mikrokontroller-parancsokra

A Klippy gazdagép kódja futhat kötegelt üzemmódban, hogy előállítsa a G-kód fájlhoz tartozó alacsony szintű mikrokontroller-parancsokat. Ezeknek az alacsony szintű parancsoknak a vizsgálata hasznos, amikor megpróbálod megérteni az alacsony szintű hardver műveleteit. Az is hasznos lehet, hogy összehasonlítsuk a mikrokontroller-parancsok közötti különbséget egy kódváltás után.

A Klippy futtatásához ebben a kötegelt üzemmódban egy egyszeri lépés szükséges a mikrokontroller "adatszótár" létrehozásához. Ez a mikrokontroller kódjának lefordításával történik, hogy megkapjuk az out/klipper.dict fájlt:

    make menuconfig
    make

Ha a fentiek megtörténtek, a Klipper futtatása batch üzemmódban is lehetséges (a Telepítés python virtuális környezet és a printer.cfg) fájl létrehozásához szükséges lépéseket lásd:

    ~/klippy-env/bin/python ./klippy/klippy.py ~/printer.cfg -i test.gcode -o test.serial -v -d out/klipper.dict

A fenti művelet egy test.serial fájlt fog létrehozni a bináris soros kimenettel. Ez a kimenet lefordítható olvasható szöveggé a következővel:

    ~/klippy-env/bin/python ./klippy/parsedump.py out/klipper.dict test.serial > test.txt

Az eredményül kapott test.txt fájl a mikrokontroller parancsok ember által olvasható listáját tartalmazza.

A kötegelt üzemmód letilt bizonyos válasz/kérés parancsokat a működés érdekében. Ennek eredményeképpen a tényleges parancsok és a fenti kimenet között némi eltérés lesz. A generált adatok teszteléshez és ellenőrzéshez hasznosak; nem használhatóak valódi mikrokontrollerhez való elküldésre.

## Mozgáselemzés és adatnaplózás

A Klipper támogatja a belső mozgástörténet naplózását, amely később elemezhető. Ennek a funkciónak a használatához a Klippert az API Szerver engedélyezésével kell elindítani.

Az adatnaplózást a `data_logger.py` eszközzel lehet engedélyezni. Például:

    ~/klipper/scripts/motan/data_logger.py /tmp/klippy_uds mylog

Ez a parancs csatlakozik a Klipper API-kiszolgálóhoz, feliratkozik az állapot- és mozgásinformációkra, és naplózza az eredményeket. Két fájl jön létre. Egy tömörített adatfájl és egy indexfájl (pl. `mylog.json.gz` és `mylog.index.gz`). A naplózás elindítása után lehetőség van nyomtatások és egyéb műveletek elvégzésére. A naplózás a háttérben folytatódik. Ha befejeztük a naplózást, nyomjuk meg a `ctrl-c` billentyűkombinációt a `data_logger.py` eszközből való kilépéshez.

Az így kapott fájlok a `motan_graph.py` eszközzel olvashatók és grafikusan ábrázolhatók. A grafikonok Raspberry Pi-n történő generálásához egyszeri lépésben telepíteni kell a "matplotlib" csomagot:

    sudo apt-get update
    sudo apt-get install python-matplotlib

Kényelmesebb lehet azonban az adatfájlokat a `scripts/motan/` könyvtárban található Python-kóddal együtt egy asztali gépre másolni. A mozgáselemző szkripteknek minden olyan gépen futniuk kell, amelyre a Python és a Matplotlib legújabb verziója telepítve van.

A grafikonok a következő parancs segítségével hozhatók létre:

    ~/klipper/scripts/motan/motan_graph.py mylog -o mygraph.png

A `-g` opciót használhatjuk a grafikusan ábrázolandó adatkészletek megadására (ez egy Python literal-t fogad el, amely listák listáját tartalmazza). Például:

    ~/klipper/scripts/motan/motan_graph.py mylog -g '[["trapq(toolhead,velocity)"], ["trapq(toolhead,accel)"]]'

Az elérhető adatkészletek listája a `-l` opcióval érhető el. Például:

    ~/klipper/scripts/motan/motan_graph.py -l

Lehetőség van arra is, hogy minden egyes adatkészlethez matplotlib ábrázolási opciókat adj meg:

    ~/klipper/scripts/motan/motan_graph.py mylog -g '[["trapq(toolhead,velocity)?color=red&alpha=0.4"]]'

Számos matplotlib opció áll rendelkezésre; néhány példa: "color", "label", "alpha" és "linestyle".

A `motan_graph.py` eszköz számos más parancssori opciót is támogat a `--help` opcióval megtekintheted a listát. Kényelmes lehet magát a motan_graph.py szkriptet is megtekinteni/módosítani.

A `data_logger.py` eszköz által előállított nyers adatnaplók az API Szerver című dokumentumban leírt formátumot követik. Hasznos lehet az adatokat egy Unix-paranccsal megvizsgálni, mint például a következő: `gunzip < mylog.json.gz | tr '\03' '\n' | less`

## Terhelési grafikonok generálása

A Klippy naplófájl (/tmp/klippy.log) tárolja a sávszélességre, a mikrokontroller terhelésre és a gazdagép pufferterhelésre vonatkozó statisztikákat. Hasznos lehet ezeket a statisztikákat grafikusan ábrázolni a nyomtatás után.

A grafikon generálásához egy alkalommal telepíteni kell a "matplotlib" csomagot:

    sudo apt-get update
    sudo apt-get install python-matplotlib

Ezután grafikonok készíthetők:

    ~/klipper/scripts/graphstats.py /tmp/klippy.log -o loadgraph.png

Ezután megtekinthetjük az eredményül kapott loadgraph.png fájlt.

Különböző grafikonok készíthetők. További információért futtasd: `~/klipper/scripts/graphstats.py --help`

## Információk kinyerése a klippy.log fájlból

A Klippy naplófájl (/tmp/klippy.log) szintén tartalmaz hibakeresési információkat. Van egy logextract.py szkript, amely hasznos lehet egy mikrokontroller leállásának vagy hasonló problémának az elemzésekor. Általában valami ilyesmivel futtatható:

    mkdir work_directory
    cd work_directory
    cp /tmp/klippy.log .
    ~/klipper/scripts/logextract.py ./klippy.log

A szkript kinyeri a nyomtató konfigurációs fájlját, és kinyeri az MCU leállítási adatait. Az MCU leállításából származó információsor (ha van ilyen) időbélyegek szerint át lesz rendezve, hogy segítse az ok-okozati forgatókönyvek diagnosztizálását.

## Tesztelés simulavr-rel

A simulavr eszköz lehetővé teszi egy Atmel ATmega mikrokontroller szimulálását. Ez a szakasz leírja, hogyan lehet teszt G-kód fájlokat futtatni a simulavr segítségével. Javasoljuk, hogy ezt egy asztali gépen futtasd (nem Raspberry Pi), mivel a hatékony futtatáshoz erős CPU-ra van szükség.

A simulavr használatához töltsd le a simulavr csomagot, és fordítsd le python támogatással. Vedd figyelembe, hogy a build rendszernek telepítenie kell néhány csomagot (például a swig-et) ahhoz, hogy a python modult fel tudja építeni.

    git clone git://git.savannah.nongnu.org/simulavr.git
    cd simulavr
    make python
    make build

Győződjünk meg róla, hogy a fenti fordítás után a ./build/pysimulavr/_pysimulavr.*.so fájl jött létre:

    ls ./build/pysimulavr/_pysimulavr.*.so

Ennek a parancsnak egy adott fájlt kell jelentenie (pl. ./build/pysimulavr/_pysimulavr.cpython-39-x86_64-linux-gnu.so), nem pedig hibát.

Ha Debian-alapú rendszert használsz (Debian, Ubuntu, stb.), akkor telepítheted a következő csomagokat, és *.deb fájlokat generálhatsz a simulavr rendszerszintű telepítéséhez:

    sudo apt update
    sudo apt install g++ make cmake swig rst2pdf help2man texinfo
    make cfgclean python debian
    sudo dpkg -i build/debian/python3-simulavr*.deb

A Klipper lefordításához a simulavr-ben való használathoz futtasd a következőt:

    cd /path/to/klipper
    make menuconfig

és fordítsd le a mikrokontroller szoftvert egy AVR atmega644p számára, és válaszd a SIMULAVR szoftver emulációs támogatást. Ezután lefordíthatjuk a Klippert (futtassuk `make`), majd indítsuk el a szimulációt a következőkkel:

    PYTHONPATH=/path/to/simulavr/build/pysimulavr/ ./scripts/avrsim.py out/klipper.elf

Vegyük észre, hogy ha a python3-simulavr-t az egész rendszerre telepítettük, akkor nem kell beállítanunk a `PYTHONPATH` értéket, és egyszerűen futtathatjuk a szimulátort mint

    ./scripts/avrsim.py out/klipper.elf

Ezután, ha a simulavr egy másik ablakban fut, futtathatjuk a következőt, hogy G-kódot olvassunk be egy fájlból (pl. "test.gcode"), feldolgozzuk a Klippy-vel, és elküldjük a simulavr-ben futó Klipper-nek (lásd Telepítés a python virtuális környezet létrehozásához szükséges lépéseket):

    ~/klippy-env/bin/python ./klippy/klippy.py config/generic-simulavr.cfg -i test.gcode -v

### A simulavr használata gtkwave-vel

A simulavr egyik hasznos funkciója, hogy képes jelhullámgeneráló fájlokat létrehozni az események pontos időzítésével. Ehhez kövesd a fenti utasításokat, de futtasd az avrsim.py programot a következő parancssorral:

    PYTHONPATH=/path/to/simulavr/src/python/ ./scripts/avrsim.py out/klipper.elf -t PORTA.PORT,PORTC.PORT

A fentiek létrehoznak egy avrsim.vcd fájlt a PORTA és PORTB GPIO-k minden egyes módosításával kapcsolatos információkkal. Ezt aztán a gtkwave segítségével meg lehetne nézni a következővel:

    gtkwave avrsim.vcd

Back to top