mirror of
https://github.com/Klipper3d/klipper.git
synced 2025-08-08 14:34:06 -06:00
Deploying to gh-pages from @ Klipper3d/klipper@14eec15267 🚀
This commit is contained in:
parent
25c5c9ff97
commit
e6a2f98252
30 changed files with 76 additions and 71 deletions
|
@ -1439,7 +1439,7 @@
|
|||
</ul>
|
||||
<p>A fentiek soknak tűnhetnek egy mozdulat végrehajtásához. Az egyetlen igazán érdekes rész azonban a ToolHead és a kinematikai osztályokban található. Ez a kódnak azon része, amely meghatározza a mozgásokat és azok időzítését. A feldolgozás többi része többnyire csak kommunikáció és munka.</p>
|
||||
<h2 id="gazdamodul-hozzaadasa">Gazdamodul hozzáadása<a class="headerlink" href="#gazdamodul-hozzaadasa" title="Permanent link">¶</a></h2>
|
||||
<p>A Klippy host kódja dinamikus modulbetöltési képességgel rendelkezik. Ha a nyomtató konfigurációs fájljában található egy "[my_module]" nevű konfigurációs szakasz, akkor a szoftver automatikusan megpróbálja betölteni a klippy/extras/my_module.py modult. Ez a modulrendszer a Klipper új funkciók hozzáadásának előnyben részesített módszere.</p>
|
||||
<p>A Klippy gazdakódja dinamikus modulbetöltési képességgel rendelkezik. Ha a nyomtató konfigurációs fájljában található egy "[my_module]" nevű konfigurációs szakasz, akkor a szoftver automatikusan megpróbálja betölteni a klippy/extras/my_module.py modult. Ez a modulrendszer a Klipper új funkciók hozzáadásának előnyben részesített módszere.</p>
|
||||
<p>Egy új modul hozzáadásának legegyszerűbb módja, ha egy meglévő modult használunk hivatkozásként. Lásd <strong>klippy/extras/servo.py</strong> példaként.</p>
|
||||
<p>A következők is hasznosak lehetnek:</p>
|
||||
<ul>
|
||||
|
@ -1448,15 +1448,15 @@
|
|||
<li>A <code>config.get_printer()</code> metódus segítségével megkapjuk a fő "printer" osztályra való hivatkozást. Ez a "printer" osztály tárolja a hivatkozásokat az összes "nyomtató objektumra", amelyet már példányosítottak. A <code>printer.lookup_object()</code> metódus segítségével megkereshetjük a többi nyomtató objektumra mutató hivatkozásokat. Szinte minden funkció (még az alapvető kinematikai modulok is) egy ilyen nyomtató objektumba vannak kapszulázva. Vegyük azonban figyelembe, hogy egy új modul példányosításakor nem minden más nyomtató objektumot példányosítottunk. A "gcode" és a "pins" modulok mindig elérhetőek lesznek, de a többi modul esetében érdemes elhalasztani a keresést.</li>
|
||||
<li>Az eseménykezelőket a <code>printer.register_event_handler()</code> módszerrel regisztrálhatja, ha a kódot más nyomtató objektumok által kiváltott "events" során kell meghívni. Minden esemény neve egy karakterlánc, és a konvenció szerint az eseményt kiváltó fő forrásmodul neve, valamint az eseményt kiváltó művelet rövid neve (pl. "klippy:connect"). Az egyes eseménykezelőknek átadott paraméterek az adott eseményre jellemzőek (ahogy a kivételkezelés és a végrehajtási kontextus is). Két gyakori indítási esemény a következő:<ul>
|
||||
<li>klippy:connect - Ez az esemény az összes nyomtató objektum példányosítása után generálódik. Általában más nyomtató objektumok keresésére, a konfigurációs beállítások ellenőrzésére és a kezdeti "handshake" végrehajtására használják a nyomtató hardverével.</li>
|
||||
<li>klippy:ready - Ez az esemény az összes csatlakozási kezelő sikeres befejezése után generálódik. Jelzi, hogy a nyomtató átvált a normál műveletek kezelésére kész állapotba. Ebben a visszahívásban ne jelezzen hibát.</li>
|
||||
<li>klippy:ready - Ez az esemény az összes csatlakozási kezelő sikeres befejezése után generálódik. Jelzi, hogy a nyomtató átvált a normál műveletek kezelésére kész állapotba. Ebben a visszahívásban ne jelezz hibát.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Ha hiba van a felhasználó konfigurációjában, mindenképpen hívja fel a figyelmet a <code>load_config()</code> vagy a "connect event" fázisokban. Használd a <code>raise config.error("my error")</code> vagy <code>raise printer.config_error("my error")</code> hibajelzést.</li>
|
||||
<li>A "pins" modul segítségével konfigurálhat egy tűt a mikrokontrollerben. Ez általában a <code>printer.lookup_object("pins").setup_pin("pwm", config.get("my_pin"))</code>-hoz hasonló módon történik. A visszakapott objektumot ezután futásidőben lehet utasítani.</li>
|
||||
<li>Ha hiba van a felhasználó konfigurációjában, mindenképpen hívd fel a figyelmet a <code>load_config()</code> vagy a "connect event" fázisokban. Használd a <code>raise config.error("my error")</code> vagy <code>raise printer.config_error("my error")</code> hibajelzést.</li>
|
||||
<li>A "pins" modul segítségével konfigurálhatsz egy tűt a mikrokontrollerben. Ez általában a <code>printer.lookup_object("pins").setup_pin("pwm", config.get("my_pin"))</code>-hoz hasonló módon történik. A visszakapott objektumot ezután futásidőben lehet utasítani.</li>
|
||||
<li>Ha a nyomtató objektum definiál egy <code>get_status()</code> metódust, akkor a modul <a href="Status_Reference.html">állapotinformációt</a> exportálhat a <a href="Command_Templates.html">makrókon</a> és az <a href="API_Server.html">API Szerveren</a> keresztül. A <code>get_status()</code> metódusnak egy Python szótárat kell visszaadnia, amelynek kulcsai karakterláncok, értékei pedig egész számok, lebegő számok, karakterláncok, listák, szótárak, True, False vagy None. Használhatók tuplik (és nevesített tuplik) is (ezek az API-kiszolgálón keresztül történő eléréskor listaként jelennek meg). Az exportált "immutable" listákat és szótárakat. Ha tartalmuk megváltozik, akkor egy új objektumot kell visszaküldeni a <code>get_status()</code> parancsból, különben az API-kiszolgáló nem fogja észlelni a változásokat.</li>
|
||||
<li>Ha a modulnak hozzáférésre van szüksége a rendszer időzítéséhez vagy külső fájlleírókhoz, akkor a <code>printer.get_reactor()</code> segítségével hozzáférhetünk a globális "event reactor" osztályhoz. Ez a reactor osztály lehetővé teszi az időzítők ütemezését, a fájlleírók bemenetének várakozását, valamint a gazdakód "sleep" használatát.</li>
|
||||
<li>Ne használj globális változókat. Minden állapotot a <code>load_config()</code> függvény által visszaadott nyomtató objektumban kell tárolni. Ez azért fontos, mert ellenkező esetben a RESTART parancs nem az elvártaknak megfelelően fog működni. Szintén hasonló okokból, ha bármilyen külső fájl (vagy foglalat) megnyílt, akkor mindenképpen regisztráljunk egy "klippy:disconnect" eseménykezelőt, és zárjuk be őket ebből a visszahívásból.</li>
|
||||
<li>Kerülje a más nyomtató objektumok belső tagváltozóinak elérését (vagy az aláhúzással kezdődő metódusok hívását). Ennek a konvenciónak a betartása megkönnyíti a jövőbeli változások kezelését.</li>
|
||||
<li>Kerüld a más nyomtató objektumok belső tagváltozóinak elérését (vagy az aláhúzással kezdődő metódusok hívását). Ennek a konvenciónak a betartása megkönnyíti a jövőbeli változások kezelését.</li>
|
||||
<li>Javasoljuk, hogy a Python osztályok Python konstruktorában minden tagváltozóhoz értéket rendeljen. (És ezért kerülje a Python azon képességének kihasználását, hogy dinamikusan hozzon létre új tagváltozókat.)</li>
|
||||
<li>Ha egy Python változónak lebegőpontos értéket kell tárolnia, akkor ajánlott mindig lebegőpontos konstansokkal hozzárendelni és kezelni a változót (és soha ne használjunk egészértékű konstansokat). Például részesítsük előnyben a <code>self.speed = 1.</code> értéket a <code>self.speed = 1</code> értékkel szemben, és részesítsük előnyben a <code>self.speed = 2 értéket. * x</code> a <code>self.speed = 2 * x</code> helyett. A lebegőpontos értékek következetes használatával elkerülhetők a Python-típuskonverziók nehezen hibakereshető furcsaságai.</li>
|
||||
<li>Ha a modult a Klipper főkódjába való beépítésre küldöd, mindenképpen helyezz el egy szerzői jogi megjegyzést a modul tetején. Az előnyben részesített formátumot lásd a meglévő moduloknál.</li>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue