Kihagyás

Parancs sablonok

Ez a dokumentum a G-kód parancssorozatok gcode_macro (és hasonló) konfigurációs szakaszokban történő implementálásáról nyújt információt.

G-kód makró elnevezése

A G-kódos makronév esetében a nagy és kisbetűs írásmód nem fontos - a MY_MACRO és a my_macro ugyanúgy kiértékelődik, és kicsi vagy nagybetűvel is meghívható. Ha a makronévben számokat használunk, akkor azoknak a név végén kell állniuk (pl. a TEST_MACRO25 érvényes, de a MACRO25_TEST3 nem).

A G-kód formázása a konfigurációban

A behúzás fontos, amikor makrót definiálsz a konfigurációs fájlban. Többsoros G-kód szekvencia megadásához fontos, hogy minden sorban megfelelő behúzás legyen. Például:

[gcode_macro blink_led]
gcode:
  SET_PIN PIN=my_led VALUE=1
  G4 P2000
  SET_PIN PIN=my_led VALUE=0

Figyeljük meg, hogy a gcode: config opció mindig a sor elején kezdődik, valamint a G-kód makró további sorai soha nem kezdődnek a sor elején.

Leírás hozzáadása a makróhoz

A funkció azonosításának megkönnyítése érdekében rövid leírás adható hozzá. Adjunk hozzá description: egy rövid szöveget a funkció leírására. Ha nincs megadva, az alapértelmezett érték "G-kód makró". Például:

[gcode_macro blink_led]
description: Blink my_led one time
gcode:
  SET_PIN PIN=my_led VALUE=1
  G4 P2000
  SET_PIN PIN=my_led VALUE=0

A terminál megjeleníti a leírást, ha a HELP parancsot vagy az automatikus kitöltés funkciót használod.

Állapot mentése/visszaállítása G-kódos mozgásokhoz

Sajnos a G-kód parancsnyelv használata kihívást jelenthet. A nyomtatófej mozgatásának szabványos mechanizmusa a G1 parancson keresztül történik (a G0 parancs a G1 parancs álnevének tekinthető, és felcserélhető vele). Ez a parancs azonban a "G-kód elemzési állapotára" támaszkodik: M82, M83, G90 általi beállításra, G91, G92 és a korábbi G1 parancsok is. Egy G-kód makró létrehozásakor célszerű mindig kifejezetten beállítani a G-kód elemzési állapotát a G1 parancs kiadása előtt. (Ellenkező esetben fennáll annak a veszélye, hogy a G1 parancs nemkívánatos kérést fog végrehajtani.)

Ennek egyik gyakori módja, hogy a G1 mozdulatokat SAVE_GCODE_STATE-be csomagoljuk, G91, és RESTORE_GCODE_STATE-ba. Például:

[gcode_macro MOVE_UP]
gcode:
  SAVE_GCODE_STATE NAME=my_move_up_state
  G91
  G1 Z10 F300
  RESTORE_GCODE_STATE NAME=my_move_up_state

A G91 parancs a G-kód elemzési állapotot "relatív mozgatási módba" helyezi, a RESTORE_GCODE_STATE parancs pedig visszaállítja a makró belépése előtti állapotot. Ügyelj arra, hogy az első G1 parancsnál adj meg explicit sebességet (az F paraméterrel).

Sablon bővítés

A gcode_macro gcode: konfigurációs szakasz kiértékelése a Jinja2 sablonnyelv használatával történik. A kifejezéseket kiértékelhetjük futásidőben { } karakterekbe csomagolva, vagy használhatunk feltételes utasításokat {% %} karakterekbe csomagolva. A szintaxissal kapcsolatos további információkért lásd a Jinja2 dokumentációt.

Példa egy összetett makróra:

[gcode_macro clean_nozzle]
gcode:
  {% set wipe_count = 8 %}
  SAVE_GCODE_STATE NAME=clean_nozzle_state
  G90
  G0 Z15 F300
  {% for wipe in range(wipe_count) %}
    {% for coordinate in [(275, 4),(235, 4)] %}
      G0 X{coordinate[0]} Y{coordinate[1] + 0.25 * wipe} Z9.7 F12000
    {% endfor %}
  {% endfor %}
  RESTORE_GCODE_STATE NAME=clean_nozzle_state

Makró paraméterek

Gyakran hasznos a makrónak a meghívásakor átadott paraméterek vizsgálata. Ezek a paraméterek a params pszeudo változóval érhetők el. Például, ha a makró:

[gcode_macro SET_PERCENT]
gcode:
  M117 Now at { params.VALUE|float * 100 }%

SET_PERCENT VALUE=.2 értéket adsz, akkor M117 Most 20%-os értéken van. Vedd figyelembe, hogy a paraméternevek a makróban történő kiértékeléskor mindig nagybetűsek, és mindig karakterláncként kerülnek átadásra. Ha matematikai műveletet hajtunk végre, akkor azokat explicit módon egész számokká vagy lebegőszámokká kell konvertálni.

Gyakori a Jinja2 set direktíva használata egy alapértelmezett paraméter használatához és az eredmény hozzárendelése egy helyi névhez. Például:

[gcode_macro SET_BED_TEMPERATURE]
gcode:
  {% set bed_temp = params.TEMPERATURE|default(40)|float %}
  M140 S{bed_temp}

A "rawparams" változó

A futó makró teljes, be nem elemzett paraméterei a rawparams pszeudováltozóval érhetők el.

Vedd figyelembe, hogy ez magában foglalja az eredeti parancs részét képező megjegyzéseket is.

A sample-macros.cfg fájlban található egy példa arra, hogyan lehet felülírni az M117 parancsot a rawparams használatával.

A "nyomtató" változó

A nyomtató aktuális állapotát a printer álváltozóval lehet ellenőrizni (és megváltoztatni). Például:

[gcode_macro slow_fan]
gcode:
  M106 S{ printer.fan.speed * 0.9 * 255}

A rendelkezésre álló mezők a Referencia állapot dokumentumban vannak meghatározva.

Fontos! A makrók először teljes egészében kiértékelésre kerülnek, és csak ezután kerülnek végrehajtásra a kapott parancsok. Ha egy makró olyan parancsot ad ki, amely megváltoztatja a nyomtató állapotát, az állapotváltozás eredményei nem lesznek láthatóak a makró kiértékelése során. Ez akkor is furcsa viselkedést eredményezhet, ha egy makró más makrókat, hívó parancsokat generál, mivel a meghívott makró a meghíváskor kerül kiértékelésre (ami a hívó makró teljes kiértékelése után történik).

A konvenció szerint a printer után közvetlenül következő név a config szakasz neve. Így például a printer.fan a [fan] config szakasz által létrehozott ventilátor objektumra utal. Van néhány kivétel ez alól a szabály alól. Nevezetesen a gcode_move és a toolhead objektumok. Ha a config szakasz szóközöket tartalmaz, akkor a [ ] jellel lehet elérni. Például: printer["generic_heater my_chamber_heater"].temperature.

Vegyük figyelembe, hogy a Jinja2 set direktíva a printer hierarchiában lévő objektumhoz rendelhet helyi nevet. Ez olvashatóbbá teheti a makrókat és csökkentheti a gépelést. Például:

[gcode_macro QUERY_HTU21D]
gcode:
    {% set sensor = printer["htu21d my_sensor"] %}
    M117 Temp:{sensor.temperature} Humidity:{sensor.humidity}

Tevékenységek

A nyomtató állapotának megváltoztatására néhány parancs áll rendelkezésre. Például az { action_emergency_stop() } a nyomtatót leállítási állapotba helyezi. Vedd figyelembe, hogy ezek a műveletek a makró kiértékelésének időpontjában történnek, ami jelentős idővel a generált G-kód parancsok végrehajtása előtt történhet.

Elérhető "művelet" parancsok:

  • action_respond_info(msg): A megadott msg kiírása a /tmp/printer álterminálra. Az msg minden egyes sora "// " előtaggal lesz elküldve.
  • action_raise_error(msg): Megszakítja az aktuális makrót (és minden hívó makrót), és a megadott msg üzenetet kiírja a /tmp/printer pseudo-terminálra. Az msg első sora "!! " előtaggal, a további sorok pedig "// " előtaggal lesznek elküldve.
  • action_emergency_stop(msg): A nyomtatót leállítási állapotba helyezi. Az msg paraméter opcionális, hasznos lehet a leállítás okának leírása.
  • action_call_remote_method(method_name): Egy távoli ügyfél által regisztrált metódus hívása. Ha a metódus paramétereket fogad el, akkor azokat kulcsszavas argumentumokkal kell megadni, azaz: action_call_remote_method("print_stuff", my_arg="hello_world")

Változók

A SET_GCODE_VARIABLE parancs hasznos lehet a makróhívások közötti állapotmentéshez. A változók nevei nem tartalmazhatnak nagybetűket. Például:

[gcode_macro start_probe]
variable_bed_temp: 0
gcode:
  # Save target temperature to bed_temp variable
  SET_GCODE_VARIABLE MACRO=start_probe VARIABLE=bed_temp VALUE={printer.heater_bed.target}
  # Disable bed heater
  M140
  # Perform probe
  PROBE
  # Call finish_probe macro at completion of probe
  finish_probe

[gcode_macro finish_probe]
gcode:
  # Restore temperature
  M140 S{printer["gcode_macro start_probe"].bed_temp}

A SET_GCODE_VARIABLE használatakor mindenképpen vedd figyelembe a makró kiértékelésének és a parancs végrehajtásának időzítését.

Késleltetett G-kódok

A [delayed_gcode] konfigurációs opció késleltetett G-kód szekvencia végrehajtásához használható:

[delayed_gcode clear_display]
gcode:
  M117

[gcode_macro load_filament]
gcode:
 G91
 G1 E50
 G90
 M400
 M117 Load Complete!
 UPDATE_DELAYED_GCODE ID=clear_display DURATION=10

Amikor a fenti load_filament makró végrehajtódik, az extrudálás befejezése után megjelenik egy "Load Complete!" üzenet. A G-kód utolsó sora engedélyezi a "clear_display" delayed_gcode-ot, amely 10 másodperc múlva végrehajtásra van beállítva.

Az initial_duration konfigurációs beállítás beállítható úgy, hogy a nyomtató indításakor végrehajtsa a delayed_gcode parancsot. A visszaszámlálás akkor kezdődik, amikor a nyomtató a "ready" állapotba lép. Az alábbi delayed_gcode például a nyomtató elkészülte után 5 másodperccel végrehajtja a műveletet, és a kijelzőt "Üdvözlés!" üzenettel inicializálja:

[delayed_gcode welcome]
initial_duration: 5.
gcode:
  M117 Welcome!

Lehetséges, hogy egy késleltetett G-kód megismétlődik a G-kód opcióban történő frissítéssel:

[delayed_gcode report_temp]
initial_duration: 2.
gcode:
  {action_respond_info("Extruder Temp: %.1f" % (printer.extruder0.temperature))}
  UPDATE_DELAYED_GCODE ID=report_temp DURATION=2

A fenti delayed_gcode 2 másodpercenként elküldi az "// Extruder Temp: [ex0_temp]" kódot az Octoprintnek. Ez a következő G-kóddal törölhető:

UPDATE_DELAYED_GCODE ID=report_temp DURATION=0

Ha a display config section engedélyezve van, akkor lehetőség van a menü testreszabására a menu konfigurációs szakaszokkal.

A menüsablonokban a következő csak olvasható attribútumok állnak rendelkezésre:

  • menu.width - az elem szélessége (a megjelenített oszlopok száma)
  • menu.ns - elem névtere
  • menu.event - a szkriptet kiváltó esemény neve
  • menu.input - beviteli érték, csak input script kontextusban érhető el

A menüsablonokban a következő műveletek érhetők el:

  • menu.back(force, update): végrehajtja a menü vissza parancsát, az opcionális logikai paramétereket <force> és <update>.
    • Ha a <force> értéke True, akkor a szerkesztés is leáll. Az alapértelmezett érték False.
    • Ha az <update> értéke False, akkor a felsőbb tárolóelemek nem frissülnek. Az alapértelmezett érték True.
  • menu.exit(force) - végrehajtja a menüből való kilépés parancsát, opcionális boolean paraméter <force> alapértelmezett értéke False.
    • Ha a <force> értéke True, akkor a szerkesztés is leáll. Az alapértelmezett érték False.

Változók mentése lemezre

Ha a save_variables config section engedélyezve van, a SAVE_VARIABLE VARIABLE=<name> VALUE=<value> használható a változó lemezre mentésére, hogy az újraindítások során is használható legyen. Minden tárolt változó betöltődik a printer.save_variables.variables dict-be indításkor, és felhasználható a G-kód makrókban. A túl hosszú sorok elkerülése érdekében a makró elejére a következőket írhatjuk:

{% set svv = printer.save_variables.variables %}

Példaként a 2 az 1-ben nyomtatófej állapotának mentésére használható, és nyomtatás indításakor győződj meg arról, hogy az aktív fejet használd a T0 helyett:

[gcode_macro T1]
gcode:
  ACTIVATE_EXTRUDER extruder=extruder1
  SAVE_VARIABLE VARIABLE=currentextruder VALUE='"extruder1"'

[gcode_macro T0]
gcode:
  ACTIVATE_EXTRUDER extruder=extruder
  SAVE_VARIABLE VARIABLE=currentextruder VALUE='"extruder"'

[gcode_macro START_GCODE]
gcode:
  {% set svv = printer.save_variables.variables %}
  ACTIVATE_EXTRUDER extruder={svv.currentextruder}
Back to top