Deploying to gh-pages from @ Klipper3d/klipper@7793784640 🚀
This commit is contained in:
@@ -693,7 +693,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="G-Codes.html" class="md-nav__link">
|
||||
G-Kódok
|
||||
G-kódok
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@@ -1381,12 +1381,12 @@
|
||||
<p>A mikrokontroller funkcióinak nagy része az általános célú bemeneti/kimeneti érintkezőkkel (GPIO) való munkát foglalja magában. Annak érdekében, hogy az alacsony szintű architektúra specifikus kódot elvonatkoztassuk a magas szintű feladatkódtól, minden GPIO eseményt architektúra specifikus burkolatokban valósítunk meg (pl. <strong>src/avr/gpio.c</strong>). A kódot a gcc's "-flto -fwhole-program" optimalizálással fordítottuk, amely kiváló munkát végez a függvények sorolásában a fordítási egységeken keresztül, így a legtöbb ilyen apró GPIO függvény sorolva van a hívóikban, és nincs futásidejű költsége a használatuknak.</p>
|
||||
<h2 id="klippy-kod-attekintese">Klippy kód áttekintése<a class="headerlink" href="#klippy-kod-attekintese" title="Permanent link">¶</a></h2>
|
||||
<p>A gazdakódot (Klippy) egy olcsó számítógépen (például egy Raspberry Pi) kell futtatni a mikrokontrollerrel párosítva. A kód elsősorban Pythonban íródott, azonban a CFFI-t használja néhány funkció C kódban történő megvalósításához.</p>
|
||||
<p>A kezdeti végrehajtás a <strong>klippy/klippy.py</strong> fájlban kezdődik. Ez beolvassa a parancssori argumentumokat, megnyitja a nyomtató konfigurációs fájlját, példányosítja a fő nyomtatóobjektumokat, és elindítja a soros kapcsolatot. A G-Kód parancsok fő végrehajtása a process_commands() metódusban történik az <strong>klippy/gcode.py</strong> fájlban. Ez a kód a G-Kód parancsokat nyomtatóobjektum hívásokká fordítja le, amelyek gyakran a műveleteket a mikrovezérlőn végrehajtandó parancsokká alakítják (a mikrovezérlő kódjában a DECL_COMMAND makrón keresztül).</p>
|
||||
<p>A Klippy gazdagép kódjában négy szál van. A fő szál kezeli a bejövő G-Kód parancsokat. Egy második szál (amely teljes egészében a <strong>klippy/chelper/serialqueue.c</strong> C kódban található) az alacsony szintű IO-t kezeli a soros portal. A harmadik szál a Python kódban (lásd <strong>klippy/serialhdl.py</strong>) a mikrokontroller válaszüzeneteinek feldolgozására szolgál. A negyedik szál hibakeresési üzeneteket ír a naplóba (lásd <strong>klippy/queuelogger.py</strong>), hogy a többi szál soha ne blokkoljon a naplóíráskor.</p>
|
||||
<p>A kezdeti végrehajtás a <strong>klippy/klippy.py</strong> fájlban kezdődik. Ez beolvassa a parancssori argumentumokat, megnyitja a nyomtató konfigurációs fájlját, példányosítja a fő nyomtatóobjektumokat, és elindítja a soros kapcsolatot. A G-kód parancsok fő végrehajtása a process_commands() metódusban történik az <strong>klippy/gcode.py</strong> fájlban. Ez a kód a G-kód parancsokat nyomtatóobjektum hívásokká fordítja le, amelyek gyakran a műveleteket a mikrovezérlőn végrehajtandó parancsokká alakítják (a mikrovezérlő kódjában a DECL_COMMAND makrón keresztül).</p>
|
||||
<p>A Klippy gazdagép kódjában négy szál van. A fő szál kezeli a bejövő G-kód parancsokat. Egy második szál (amely teljes egészében a <strong>klippy/chelper/serialqueue.c</strong> C kódban található) az alacsony szintű IO-t kezeli a soros portal. A harmadik szál a Python kódban (lásd <strong>klippy/serialhdl.py</strong>) a mikrokontroller válaszüzeneteinek feldolgozására szolgál. A negyedik szál hibakeresési üzeneteket ír a naplóba (lásd <strong>klippy/queuelogger.py</strong>), hogy a többi szál soha ne blokkoljon a naplóíráskor.</p>
|
||||
<h2 id="mozgasparancs-kodfolyama">Mozgásparancs kódfolyama<a class="headerlink" href="#mozgasparancs-kodfolyama" title="Permanent link">¶</a></h2>
|
||||
<p>Egy tipikus nyomtatómozgás akkor kezdődik, amikor egy "G1" parancsot küldünk a Klippy gazdagépnek, és akkor fejeződik be, amikor a megfelelő lépésimpulzusok megjelennek a mikrokontrolleren. Ez a szakasz egy tipikus mozgatási parancs kódfolyamatát vázolja fel. A <a href="Kinematics.html">kinematika</a> dokumentum további információkat tartalmaz a mozgások mechanikájáról.</p>
|
||||
<ul>
|
||||
<li>A mozgás parancs feldolgozása a gcode.py fájlban kezdődik. A gcode.py célja a G-Kód lefordítása belső hívásokká. Egy G1 parancs a klippy/extras/gcode_move.py állományban lévő cmd_G1() parancsot hívja meg. A gcode_move.py kód kezeli az eredetváltozásokat (pl. G92), a relatív és abszolút pozíciók közötti változásokat (pl. G90) és az egységváltozásokat (pl. F6000=100mm/s). A kód útvonala a mozgatáshoz a következő: <code>_process_data() -> _process_commands() -> cmd_G1()</code>. Végül a ToolHead osztályt hívjuk meg a tényleges kérés végrehajtásához: <code>cmd_G1() -> ToolHead.move()</code></li>
|
||||
<li>A mozgás parancs feldolgozása a gcode.py fájlban kezdődik. A gcode.py célja a G-kód lefordítása belső hívásokká. Egy G1 parancs a klippy/extras/gcode_move.py állományban lévő cmd_G1() parancsot hívja meg. A gcode_move.py kód kezeli az eredetváltozásokat (pl. G92), a relatív és abszolút pozíciók közötti változásokat (pl. G90) és az egységváltozásokat (pl. F6000=100mm/s). A kód útvonala a mozgatáshoz a következő: <code>_process_data() -> _process_commands() -> cmd_G1()</code>. Végül a ToolHead osztályt hívjuk meg a tényleges kérés végrehajtásához: <code>cmd_G1() -> ToolHead.move()</code></li>
|
||||
<li>A ToolHead osztály (a toolhead.py állományban) kezeli a "look-ahead" és követi a nyomtatási műveletek időzítését. A fő kódútvonal egy mozdulathoz a következő: <code>ToolHead.move() -> MoveQueue.add_move() -> MoveQueue.flush() -> Move.set_junction() -> ToolHead._process_moves()</code>.<ul>
|
||||
<li>A ToolHead.move() létrehoz egy Move() objektumot a mozgás paramétereivel (cartesian térben, másodperc és milliméter egységekben).</li>
|
||||
<li>A kinematikai osztály lehetőséget kap az egyes mozgások ellenőrzésére (<code>ToolHead.move() -> kin.check_move()</code>). A kinematikai osztályok a klippy/kinematics/ könyvtárban találhatók. A check_move() kód hibát adhat ki, ha a mozgás nem érvényes. Ha a check_move() sikeresen befejeződik, akkor az alapul szolgáló kinematikának képesnek kell lennie a mozgás kezelésére.</li>
|
||||
@@ -1435,7 +1435,7 @@
|
||||
<li>Implementáljuk a C léptetőket kinematikai pozíciófüggvényeit minden léptetőhöz, ha azok még nem állnak rendelkezésre (lásd a kin_cart.c, kin_corexy.c és kin_delta.c fájlokat a klippy/chelper/ állományban). A függvénynek meg kell hívnia <code>move_get_coord()</code>, hogy egy adott mozgásidőt (másodpercben) cartesian koordinátává (milliméterben) konvertáljon, majd ebből a cartesian koordinátából kiszámítsa a kívánt léptető pozíciót (milliméterben).</li>
|
||||
<li>Az új kinematikai osztályban implementáljuk a <code>calc_position()</code> módszert. Ez a metódus kiszámítja a nyomtatófej pozícióját cartesian koordinátákban az egyes léptetőmotorok pozíciójából. Nem kell, hogy hatékony legyen, mivel jellemzően csak a kezdőpont és az érintési műveletek során hívjuk meg.</li>
|
||||
<li>Egyéb módszerek. Implementálja a <code>check_move()</code>, <code>get_status()</code> metódusokat, <code>get_steppers()</code>, <code>home()</code> és <code>set_position()</code> módszereket. Ezeket a függvényeket általában kinematikai specifikus ellenőrzések biztosítására használják. A fejlesztés kezdetén azonban használhatunk itt kazán-lemez szerű kódot.</li>
|
||||
<li>Tesztelési esetek végrehajtása. Készítsen egy G-Kód fájlt egy sor olyan mozgással, amelyekkel az adott kinematika fontos eseteit tesztelheti. Kövesse a <a href="Debugging.html">Hibakeresési dokumentációt</a>, hogy ezt a G-Kód fájlt mikrokontroller parancsokká alakítsa át. Ez hasznos a sarokesetek gyakorlására és a regressziók ellenőrzésére.</li>
|
||||
<li>Tesztelési esetek végrehajtása. Készítsen egy G-kód fájlt egy sor olyan mozgással, amelyekkel az adott kinematika fontos eseteit tesztelheti. Kövesse a <a href="Debugging.html">Hibakeresési dokumentációt</a>, hogy ezt a G-kód fájlt mikrokontroller parancsokká alakítsa át. Ez hasznos a sarokesetek gyakorlására és a regressziók ellenőrzésére.</li>
|
||||
</ol>
|
||||
<h2 id="portolas-uj-mikrokontrollerre">Portolás új mikrokontrollerre<a class="headerlink" href="#portolas-uj-mikrokontrollerre" title="Permanent link">¶</a></h2>
|
||||
<p>Ez a szakasz néhány tippet ad a Klipper mikrokontroller kódjának új architektúrára történő átviteléhez. Ez a fajta tevékenység jó beágyazott fejlesztési ismereteket és gyakorlati hozzáférést igényel a célmikrokontrollerhez.</p>
|
||||
@@ -1473,9 +1473,9 @@ Recv: // gcode homing: X:0.000000 Y:0.000000 Z:0.000000
|
||||
<p>A "stepper" pozíció (<code>stepper.get_commanded_position()</code>) az adott léptető pozíciója, ahogyan azt a kinematikai kód követi. Ez általában megfelel a kocsinak a sín mentén a konfigurációs fájlban megadott position_endstop-hoz viszonyított pozíciójának (mm-ben). (Egyes kinematikák a léptetők pozícióját milliméter helyett radiánban követik.) Ha a gép a lekérdezéskor mozgásban van, akkor a jelentett érték tartalmazza a mikrokontrollerben pufferelt mozgásokat, de nem tartalmazza a look-ahead sorban lévő mozgásokat. Használhatjuk a <code>toolhead.flush_step_generation()</code> vagy <code>toolhead.wait_moves()</code> hívásokat a look-ahead és a lépésgeneráló kód teljes kiürítéséhez.</p>
|
||||
<p>A "kinematic" pozíció (<code>kin.calc_position()</code>) a nyomtatófej "stepper" pozíciókból származtatott cartesian pozíciója, és a konfigurációs fájlban megadott koordinátarendszerhez képest relatív. Ez eltérhet a kért cartesian pozíciótól a léptetőmotorok szaggatottsága miatt. Ha a gép a "stepper" pozíciók felvételekor mozgásban van, akkor a jelentett érték tartalmazza a mikrokontrollerben pufferelt mozgásokat, de nem tartalmazza a look-ahead várólistán lévő mozgásokat. Használhatjuk a <code>toolhead.flush_step_generation()</code> vagy <code>toolhead.wait_moves()</code> hívásokat a look-ahead és a lépésgeneráló kód teljes kiürítéséhez.</p>
|
||||
<p>A "toolhead" pozíció (<code>toolhead.get_position()</code>) a nyomtatófej utolsó kért pozíciója cartesian koordinátákban a konfigurációs fájlban megadott koordinátarendszerhez képest. Ha a gép a lekérdezés kiadásakor mozgásban van, akkor a jelentett érték tartalmazza az összes kért mozgást (még azokat is, amelyek a pufferben vannak és a motorvezérlőknek való kiadásra várnak).</p>
|
||||
<p>A "gcode" pozíció a <code>G1</code> (vagy <code>G0</code>) parancs utolsó kért pozíciója cartesian koordinátákban, a konfigurációs fájlban megadott koordinátarendszerhez képest. Ez eltérhet a "toolhead" pozíciótól, ha egy G-Kód transzformáció (pl. bed_mesh, bed_tilt, skew_correction) van érvényben. Ez eltérhet az utolsó <code>G1</code> parancsban megadott tényleges koordinátáktól, ha a G-Kód origója megváltozott (pl, <code>G92</code>, <code>SET_GCODE_OFFSET</code>, <code>M221</code>). A <code>M114</code> parancs (<code>gcode_move.get_status()['gcode_position']</code>) az aktuális G-Kód koordinátarendszerhez viszonyított utolsó G-Kód pozíciót jelenti.</p>
|
||||
<p>A "gcode base" a G-Kód origójának helye cartesian koordinátákban a konfigurációs fájlban megadott koordinátarendszerhez képest. Az olyan parancsok, mint a <code>G92</code>, <code>SET_GCODE_OFFSET</code> és <code>M221</code> módosítják ezt az értéket.</p>
|
||||
<p>A "gcode homing" az a hely, amelyet a G-Kód origójaként (a konfigurációs fájlban megadott koordinátarendszerhez viszonyított cartesian koordinátákban) a <code>G28</code> home parancs után használni kell. A <code>SET_GCODE_OFFSET</code> parancs megváltoztathatja ezt az értéket.</p>
|
||||
<p>A "gcode" pozíció a <code>G1</code> (vagy <code>G0</code>) parancs utolsó kért pozíciója cartesian koordinátákban, a konfigurációs fájlban megadott koordinátarendszerhez képest. Ez eltérhet a "toolhead" pozíciótól, ha egy G-kód transzformáció (pl. bed_mesh, bed_tilt, skew_correction) van érvényben. Ez eltérhet az utolsó <code>G1</code> parancsban megadott tényleges koordinátáktól, ha a G-kód origója megváltozott (pl, <code>G92</code>, <code>SET_GCODE_OFFSET</code>, <code>M221</code>). A <code>M114</code> parancs (<code>gcode_move.get_status()['gcode_position']</code>) az aktuális G-kód koordinátarendszerhez viszonyított utolsó G-kód pozíciót jelenti.</p>
|
||||
<p>A "gcode base" a G-kód origójának helye cartesian koordinátákban a konfigurációs fájlban megadott koordinátarendszerhez képest. Az olyan parancsok, mint a <code>G92</code>, <code>SET_GCODE_OFFSET</code> és <code>M221</code> módosítják ezt az értéket.</p>
|
||||
<p>A "gcode homing" az a hely, amelyet a G-kód origójaként (a konfigurációs fájlban megadott koordinátarendszerhez viszonyított cartesian koordinátákban) a <code>G28</code> home parancs után használni kell. A <code>SET_GCODE_OFFSET</code> parancs megváltoztathatja ezt az értéket.</p>
|
||||
<h2 id="ido">Idő<a class="headerlink" href="#ido" title="Permanent link">¶</a></h2>
|
||||
<p>A Klipper működésének alapvető eleme az órák, időpontok és időbélyegek kezelése. A Klipper a nyomtatón végrehajtott műveleteket a közeljövőben bekövetkező események ütemezésével hajtja végre. Például egy ventilátor bekapcsolásához a kód ütemezheti egy GPIO-tű változását 100ms alatt. Ritkán fordul elő, hogy a kód azonnali műveletet próbál végrehajtani. Ezért az idő kezelése a Klipperben kritikus fontosságú a helyes működés szempontjából.</p>
|
||||
<p>A Klipper gazdaszoftverben háromféle időtípust követhetünk nyomon:</p>
|
||||
|
||||
Reference in New Issue
Block a user