Přeskočit na obsah

Postprocesor QCAD/CAM

QCAD/CAM umí exportovat CAD výkresy do různých formátů používaných v CAM (počítačem podporovaná výroba). Tyto formáty mohou být dialekty G-kódu nebo jiné, zcela odlišné formáty. Každý podporovaný CAM formát je definován v konfiguračním souboru (neboli “postprocesoru”), což je soubor ECMAScript (JavaScript), který implementuje podrobnosti formátu. Všechny dostupné konfigurace jsou uloženy v adresáři postprocessors. Nové implementace formátů lze přidat na stejné místo.

Každý konfigurační soubor obsahuje třídu ECMAScript se stejným názvem jako soubor skriptu. Pokud se soubor skriptu jmenuje MyGCode.js, třída definovaná uvnitř skriptu se musí jmenovat MyGCode.

Třída ECMAScript musí být přímo nebo nepřímo odvozena od třídy CamExporterV2, kterou definuje QCAD/CAM. CamExporterV2 definuje základní strukturu konfiguračních tříd CAM exportéru. Různé metody v CamExporterV2 se volají za účelem exportu hlavičky souboru, jednotlivých entit v CAD výkresu a patičky. CamExporterV2 se rovněž stará o různé funkce QCAD/CAM, například o kompenzaci poloměru nástroje, nájezd / výjezd, řezání vnitřních kontur před vnějšími, optimalizaci drah atd.

CamExporterV2 sama o sobě nic nevypisuje, ale sama by vytvořila prázdný soubor. CamExporterV2 nabízí textový proud (QTextStream) pro zápis do exportovaného souboru. Tento textový proud je zpřístupněn prostřednictvím členské proměnné this.stream.

Pokud je požadovaným výstupem dialekt G-kódu (např. G1 X10 Y20 pro lineární pohyb), lze konfiguraci odvodit od existující konfigurace pro G-kód s názvem GCodeBase, která je definována v souboru GCodeBase.js. To platí pro většinu strojních řídicích systémů. Jedna taková ukázková konfigurace pro výstup G-kódu v milimetrech je definována v souboru GCodeMM.js a je v uživatelském rozhraní dostupná jako konfigurace s názvem G-Code (G41/G42) [mm].

Odvození konfigurace od GCodeBase

Sekce “Odvození konfigurace od GCodeBase”

Vytvořte soubor s jedinečným názvem dle vaší volby. Pro tento příklad nazveme naši novou konfiguraci MyGCode a uložíme ji do souboru se stejným názvem, tj. MyGCode.js, v adresáři postprocessors vaší instalace QCAD/CAM.

K vytvoření a zápisu souboru můžete použít svůj oblíbený editor prostého textu, například Notepad ve Windows, TextEdit v macOS nebo vim, Emacs atd. v systémech Linux.

MyGCode.js musí definovat třídu s názvem MyGCode, aby byl platnou konfigurací pro QCAD/CAM. Přestože v ECMAScriptu striktně vzato žádné třídy neexistují, můžeme vytvořit podobný koncept připojením funkcí k objektu prototype konstruktorové funkce. Jak přesně to funguje, je nad rámec této dokumentace. Existuje však přímočará šablona, kterou můžete použít pro všechny konfigurační soubory.

Pro náš příklad vypadá definice třídy MyGCode takto (všimněte si, že řádky začínající // jsou komentáře a nejsou povinné):

// Include GCodeBase.js which contains the class 'GCodeBase',
// used as base for our own configuration:
include("GCodeBase.js");
// Constructor of our class:
function MyGCode(documentInterface, newDocumentInterface) {
// Call constructor of base class:
GCodeBase.call(this, documentInterface, newDocumentInterface);
}
// Derive our class from class GCodeBase:
MyGCode.prototype = new GCodeBase();
// Display name shown in user interface:
MyGCode.displayName = "My G-Code";

Nyní jsme vytvořili novou, plně funkční konfiguraci s názvem “My G-Code”, která je připravena k použití v QCAD/CAM a produkuje základní G-kód.

Konstruktor, který jsme definovali výše, volá konstruktor naší základní třídy GCodeBase. V konstruktoru můžeme nastavit některé parametry naší konfigurace, jako je požadovaná výstupní jednotka nebo zda chceme použít G41/G42 pro kompenzaci poloměru nástroje, případně vypočítat střed dráhy nástroje.

Pro konfiguraci výstupní jednotky (to je jednotka očekávaná vaším strojem nebo řídicím systémem) můžeme nastavit členskou proměnnou unit na Inch nebo Millimeter, například:

this.unit = RS.Inch;

nebo

this.unit = RS.Millimeter;

Další nastavení, která lze konfigurovat v konstruktoru, jsou:

Proměnná Možné hodnoty Výchozí Popis
this.outputOffsetPath true nebo false false Nastavte na true pro výpočet kompenzace poloměru nástroje namísto použití G41/G42.
this.lineNumber Číslo 10 Počáteční číslo použité pro číslování řádků (N…).
this.lineNumberIncrement Číslo 10 Přírůstek čísla řádku mezi jednotlivými řádky.
this.fileExtensions Pole [ "nc", "cnc" ] Seznam přípon souborů, ze kterých si uživatel může vybrat při exportu tímto postprocesorem.

Úplný konstruktor může vypadat takto:

function MyGCode(documentInterface, newDocumentInterface) {
GCodeBase.call(this, documentInterface, newDocumentInterface);
this.unit = RS.Inch;
this.outputOffsetPath = true;
this.lineNumber = 1;
this.lineNumberIncrement = 1;
}

Definování výstupu G-kódu

Sekce “Definování výstupu G-kódu”

Výstup G-kódu je strukturován do bloků kódu, které se zapisují do výstupního souboru při použití funkce CAM export v QCAD/CAM. Například prvním zapisovaným blokem kódu je blok “header”. Každý blok kódu je definován v členské proměnné, která jej identifikuje podle názvu, například this.header obsahuje blok kódu pro hlavičku souboru.

Bloky kódu lze přepsat tak, aby obsahovaly libovolný kód / text. Bloky kódu obvykle obsahují proměnné pro výpis aktuálních souřadnic X/Y, čísla řádku, posuvu atd.

Řekněme, že se do G-kódu exportuje jedna čára. Čára je exportována s kompenzací poloměru nástroje vlevo od čáry (G41). Bloky kódu, které se zapisují do výstupního souboru, jsou následující:

Blok kódu Popis Ukázkový výstup
header Hlavička výstupu (vždy první blok kódu). G21 G17 G90 G40 G49 G80
rapidMoveZ Rychloposuv na bezpečnostní úroveň. G0 Z100
rapidMove Rychloposuv na první pozici první kontury (zde začátek nájezdu pro čáru). G0 X5 Y10
toolHeader První blok, když se uvádí do činnosti nový nástroj (výměna nástroje). T1
rapidMoveZ Rychloposuv dolů na úroveň přiblížení (nad materiálem). G0 Z5
firstLinearMoveZ Zaříznutí do materiálu rychlostí zanoření. G1 Z-5 F50
toolpathHeader První blok nové dráhy nástroje.
contourHeader První blok nové kontury v rámci dráhy nástroje.
singleZPassHeader Hlavička pro jeden Z průchod. Řežeme celou hloubku v jediném průchodu.
zPassFirstHeader První hlavička jednoho nebo více Z průchodů.
linearMoveCompensationLeft Lineární pohyb do počátečního bodu čáry podél nájezdu se zapnutím kompenzace poloměru nástroje. G41 X10 Y10 F500
linearMove Lineární pohyb podél čáry do koncového bodu čáry. X30 Y10
linearMoveCompensationOff Lineární pohyb pryč od koncového bodu podél výjezdu s vypnutím kompenzace poloměru nástroje. G40 X35 Y10
zPassLastFooter Poslední patička jednoho nebo více Z průchodů.
singleZPassFooter Patička pro jeden Z průchod.
contourFooter Konec kontury.
toolpathFooter Konec dráhy nástroje.
linearMoveZ Pohyb ven z materiálu na úroveň přiblížení. Z5
rapidMoveZ Pohyb na bezpečnostní úroveň. G0 Z100
toolFooter Konec pro tento nástroj.
footer Konec programu. M30

Mnoho z těchto bloků kódu obvykle zůstává nevyužito a neprodukuje žádný výstup (prázdný blok kódu).

Členská proměnná Název proměnné Popis
inputFileName INFILENAME Název vstupního souboru (např. soubor DXF).
inputFilePath INFILEPATH Název vstupního souboru s úplnou cestou.
fileName FILENAME Název výstupního souboru.
filePath FILEPATH Název výstupního souboru s úplnou cestou.
dateTime DATETIME Datum a čas exportu.
lineNumber N Aktuální číslo řádku.
spindleSpeed S Otáčky vřetena, obvykle ot/min.
feedRate F Posuv.
plungeRate FP Rychlost zanoření.
xHomePosition XH Domovská pozice dle konfigurace v konfiguraci CAM.
yHomePosition YH
zHomePosition ZH
zSafety ZS Bezpečnostní úroveň Z pro výměny nástroje a začátek / konec.
zClearance ZU Úroveň přiblížení Z pro přiblížení k materiálu.
zClearancePass ZUP Úroveň přiblížení Z mezi více průchody.
zCuttingDepth ZD Úroveň řezání Z (celková).
xFirstPosition XF První pozice první kontury v první dráze nástroje.
yFirstPosition YF
xStartPosition X1 Začátek entity (počáteční bod čáry / oblouku).
yStartPosition Y1
zStartPosition Z1
xPosition X Aktuální cílová pozice. Koncový bod aktuální čáry / oblouku.
yPosition Y
zPosition Z
xRelPosition XR Aktuální cílová pozice jako relativní souřadnice vzhledem k počátečnímu bodu.
yRelPosition YR
zRelPosition ZR
iArcCenterInc I Střed oblouku vzhledem k počátečnímu bodu.
jArcCenterInc J
iArcCenterAbs IA Střed oblouku, absolutní.
jArcCenterAbs JA
arcRadius RADIUS Poloměr oblouku.
arcDiameter DIAMETER Průměr oblouku.
arcSweep SWEEP Rozsah oblouku (úhel pokrytý obloukem v rad, záporný pro směr hodinových ručiček).
tool T Aktuální nástroj.
toolRadius TR Poloměr nástroje.
toolDiameter TD Průměr nástroje.
toolpathOrder TOOLPATH_ORDER Pořadí dráhy nástroje v seznamu drah nástroje, počínaje 0 pro první dráhu nástroje.
toolCalls TOOL_CALLS Kolikrát byl tento nástroj použit.
toolpathName TOOLPATH_NAME Název aktuální dráhy nástroje (definovaný uživatelem).
programName PROGRAM_NAME Název programu dle konfigurace uživatelem v konfiguraci CAM.
xMin X_MIN Minimální rozsah výkresu.
yMin Y_MIN
zMin Z_MIN
xMax X_MAX Maximální rozsah výkresu.
yMax Y_MAX
zMax Z_MAX

Změna hlavičky a patičky

Sekce “Změna hlavičky a patičky”

Chcete-li přidat nebo změnit G-kódy či M-kódy nebo jiné informace v hlavičce nebo patičce, může konfigurace přepsat členské proměnné header a footer v konstruktoru, například takto:

this.header = [ "[N] G0 Z100" ];
this.footer = [ "[N] G0 Z100", "[N] M30" ];

Chcete-li pro hodnoty I/J středu oblouků použít absolutní hodnoty, můžete přepsat bloky kódu oblouku takto:

this.firstArcCWMove = "[N] G2 [X] [Y] [IA] [JA] [F]";
this.arcCWMove = "[N] G2 [X] [Y] [IA] [JA] [F]";
this.firstArcCCWMove = "[N] G3 [X] [Y] [IA] [JA] [F]";
this.arcCCWMove = "[N] G3 [X] [Y] [IA] [JA] [F]";

Šablonový soubor postprocesoru

Sekce “Šablonový soubor postprocesoru”

QCAD/CAM automaticky vloží šablonový soubor DXF se stejným názvem jako soubor postprocesoru (je-li k dispozici) při nastavení nebo přepnutí postprocesoru. Řekněme, že se postprocesor jmenuje “MyGCode” a je implementován v postprocessors/MyGCode.js. Vytvořte soubor DXF s definicemi nástrojů v postprocessors/MyGCode.dxf. Tento soubor může obsahovat definice nástrojů, výchozí vrstvy nebo obrys dostupné pracovní plochy. Poznámka: Jakýkoli viditelný obsah šablonového souboru je při vkládání automaticky umístěn na uzamčenou vrstvu, takže je pouze viditelný, ale nelze jej vybrat.