Skip to content

QCAD/CAM postprocesorius

QCAD/CAM gali eksportuoti CAD brėžinius į įvairius CAM (kompiuterinės gamybos) formatus. Šie formatai gali būti G kodo dialektai arba kiti, visiškai skirtingi formatai. Kiekvienas palaikomas CAM formatas apibrėžiamas konfigūracijos faile (arba „postprocesoriuje”), kuris yra ECMAScript (JavaScript) failas, įgyvendinantis formato detales. Visos prieinamos konfigūracijos saugomos kataloge postprocessors. Naujus formatų įgyvendinimus galima pridėti į tą pačią vietą.

Kiekviename konfigūracijos faile yra ECMAScript klasė su tokiu pat pavadinimu kaip scenarijaus failas. Jei scenarijaus failas vadinasi MyGCode.js, scenarijaus viduje apibrėžta klasė turi vadintis MyGCode.

ECMAScript klasė turi tiesiogiai arba netiesiogiai būti išvesta iš klasės CamExporterV2, kurią apibrėžia QCAD/CAM. CamExporterV2 apibrėžia CAM eksportuotojo konfigūracijos klasių pagrindinę struktūrą. Įvairūs CamExporterV2 metodai iškviečiami failo antraštei, įvairiems CAD brėžinio objektams ir poraštei eksportuoti. CamExporterV2 taip pat rūpinasi įvairiomis QCAD/CAM funkcijomis, pavyzdžiui, įrankio spindulio kompensacija, įėjimu / išėjimu, vidinių kontūrų pjovimu prieš išorinius kontūrus, kelio optimizavimu ir t. t.

CamExporterV2 pats nieko neišveda, bet vienas sukurtų tuščią failą. CamExporterV2 siūlo teksto srautą (QTextStream) rašyti į eksportuotą failą. Šis teksto srautas atskleidžiamas per nario kintamąjį this.stream.

Jei norima išvestis yra G kodo dialektas (pvz., G1 X10 Y20 tiesiniam judesiui), konfigūraciją galima išvesti iš esamos G kodo konfigūracijos, vadinamos GCodeBase, kuri apibrėžta faile GCodeBase.js. Taip yra daugumos mašinų valdiklių atveju. Vienas toks pavyzdinis konfigūracija G kodui išvesti milimetrais apibrėžta faile GCodeMM.js ir prieinama naudotojo sąsajoje kaip konfigūracija, vadinama G-Code (G41/G42) [mm].

Sukurkite failą su savo pasirinktu unikaliu pavadinimu. Šiame pavyzdyje savo naują konfigūraciją vadiname MyGCode ir įrašome ją į tokio pat pavadinimo failą, t. y. MyGCode.js savo QCAD/CAM diegimo kataloge postprocessors.

Failui sukurti ir parašyti galite naudoti mėgstamą paprasto teksto redaktorių, pavyzdžiui, Notepad Windows sistemoje, TextEdit macOS sistemoje arba vim, Emacs ir t. t. Linux sistemose.

MyGCode.js turi apibrėžti klasę, vadinamą MyGCode, kad būtų galiojanti QCAD/CAM konfigūracija. Nors griežtai kalbant ECMAScript kalboje klasių nėra, galime sukurti panašią koncepciją, pridėdami funkcijas prie konstruktoriaus funkcijos prototipo objekto. Kaip tiksliai tai veikia, nepatenka į šios dokumentacijos sritį. Vis dėlto yra paprastas šablonas, kurį galite naudoti visiems konfigūracijos failams.

Mūsų pavyzdyje klasės MyGCode apibrėžimas atrodo taip (atkreipkite dėmesį, kad eilutės, prasidedančios //, yra komentarai ir nėra būtini):

// Įtraukite GCodeBase.js, kuriame yra klasė 'GCodeBase',
// naudojama kaip pagrindas mūsų pačių konfigūracijai:
include("GCodeBase.js");
// Mūsų klasės konstruktorius:
function MyGCode(documentInterface, newDocumentInterface) {
// Iškvieskite bazinės klasės konstruktorių:
GCodeBase.call(this, documentInterface, newDocumentInterface);
}
// Išveskite mūsų klasę iš klasės GCodeBase:
MyGCode.prototype = new GCodeBase();
// Rodomas pavadinimas, rodomas naudotojo sąsajoje:
MyGCode.displayName = "My G-Code";

Dabar sukūrėme naują, visiškai veikiančią konfigūraciją, vadinamą „My G-Code”, kuri paruošta naudoti QCAD/CAM ir sukuria pagrindinį G kodą.

Aukščiau apibrėžtas konstruktorius iškviečia mūsų bazinės klasės GCodeBase konstruktorių. Konstruktoriuje galime nustatyti kai kuriuos savo konfigūracijos parametrus, tokius kaip norimas išvesties vienetas arba ar norime naudoti G41/G42 įrankio spindulio kompensacijai, ar apskaičiuoti įrankio kelio centrą.

Norėdami sukonfigūruoti išvesties vienetą (tai vienetas, kurio tikisi jūsų mašina ar valdiklis), galime nustatyti nario kintamąjį unit į Inch arba Millimeter, pavyzdžiui:

this.unit = RS.Inch;

arba

this.unit = RS.Millimeter;

Kiti nustatymai, kuriuos galima sukonfigūruoti konstruktoriuje, yra:

Kintamasis Galimos reikšmės Numatytoji Aprašymas
this.outputOffsetPath true arba false false Nustatykite į true, kad apskaičiuotumėte įrankio spindulio kompensaciją, o ne naudotumėte G41/G42.
this.lineNumber Skaičius 10 Pradinis skaičius, naudojamas eilučių numeravimui (N…).
this.lineNumberIncrement Skaičius 10 Eilutės numerio padidinimas nuo eilutės prie eilutės.
this.fileExtensions Masyvas [ "nc", "cnc" ] Failų plėtinių sąrašas, iš kurio naudotojas gali pasirinkti eksportuodamas per šį postprocesorių.

Visas konstruktorius gali atrodyti taip:

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

G kodo išvestis yra struktūrizuota į kodo blokus, kurie įrašomi į išvesties failą naudojant CAM eksporto funkciją QCAD/CAM. Pavyzdžiui, pirmasis įrašomas kodo blokas yra kodo blokas „header”. Kiekvienas kodo blokas apibrėžiamas nario kintamajame, kuris jį identifikuoja pagal pavadinimą, pavyzdžiui, this.header turi kodo bloką failo antraštei.

Kodo blokus galima nepaisyti, kad juose būtų bet koks kodas / tekstas. Kodo blokuose paprastai yra kintamieji dabartinėms X/Y koordinatėms, eilutės numeriui, pastūmos greičiui ir t. t. išvesti.

Tarkime, viena linija eksportuojama į G kodą. Linija eksportuojama su įrankio spindulio kompensacija linijos kairėje (G41). Į išvesties failą įrašomi kodo blokai yra tokie:

Kodo blokas Aprašymas Pavyzdinė išvestis
header Išvesties antraštė (visada pirmasis kodo blokas). G21 G17 G90 G40 G49 G80
rapidMoveZ Greitas judesys į saugos lygį. G0 Z100
rapidMove Greitas judesys į pirmojo kontūro pirmąją poziciją (čia linijos įėjimo pradžia). G0 X5 Y10
toolHeader Pirmasis blokas, kai naujas įrankis pradeda veikti (įrankio keitimas). T1
rapidMoveZ Greitas judesys žemyn į prošvaisos lygį (kabant virš medžiagos). G0 Z5
firstLinearMoveZ Pjovimas į medžiagą panardinimo greičiu. G1 Z-5 F50
toolpathHeader Pirmasis naujo įrankio kelio blokas.
contourHeader Pirmasis naujo kontūro blokas įrankio kelyje.
singleZPassHeader Vieno Z praėjimo antraštė. Pjauname visą gylį per vieną praėjimą.
zPassFirstHeader Pirmoji vieno ar kelių Z praėjimų antraštė.
linearMoveCompensationLeft Tiesinis judesys į linijos pradžios tašką palei įėjimą, įjungiant įrankio spindulio kompensaciją. G41 X10 Y10 F500
linearMove Tiesinis judesys palei liniją iki linijos pabaigos taško. X30 Y10
linearMoveCompensationOff Tiesinis judesys tolyn nuo pabaigos taško palei išėjimą, išjungiant įrankio spindulio kompensaciją. G40 X35 Y10
zPassLastFooter Paskutinė vieno ar kelių Z praėjimų poraštė.
singleZPassFooter Vieno Z praėjimo poraštė.
contourFooter Kontūro pabaiga.
toolpathFooter Įrankio kelio pabaiga.
linearMoveZ Judesys iš medžiagos į prošvaisos lygį. Z5
rapidMoveZ Judesys į saugos lygį. G0 Z100
toolFooter Šio įrankio pabaiga.
footer Programos pabaiga. M30

Daugelis šių kodo blokų paprastai nenaudojami ir neduoda išvesties (tuščias kodo blokas).

Nario kintamasis Kintamojo pavadinimas Aprašymas
inputFileName INFILENAME Įvesties failo pavadinimas (pvz., DXF failas).
inputFilePath INFILEPATH Įvesties failo pavadinimas su visu keliu.
fileName FILENAME Išvesties failo pavadinimas.
filePath FILEPATH Išvesties failo pavadinimas su visu keliu.
dateTime DATETIME Eksporto data ir laikas.
lineNumber N Dabartinis eilutės numeris.
spindleSpeed S Suklio greitis, paprastai aps./min.
feedRate F Pastūmos greitis.
plungeRate FP Panardinimo greitis.
xHomePosition XH Pradžios padėtis, kaip sukonfigūruota CAM konfigūracijoje.
yHomePosition YH
zHomePosition ZH
zSafety ZS Z saugos lygis įrankių keitimams ir pradžiai / pabaigai.
zClearance ZU Z prošvaisos lygis medžiagai priartėti.
zClearancePass ZUP Z prošvaisos lygis tarp kelių praėjimų.
zCuttingDepth ZD Z pjovimo lygis (bendras).
xFirstPosition XF Pirmojo kontūro pirmoji pozicija pirmajame įrankio kelyje.
yFirstPosition YF
xStartPosition X1 Objekto pradžia (linijos / lanko pradžios taškas).
yStartPosition Y1
zStartPosition Z1
xPosition X Dabartinė tikslinė pozicija. Dabartinės linijos / lanko pabaigos taškas.
yPosition Y
zPosition Z
xRelPosition XR Dabartinė tikslinė pozicija kaip santykinė koordinatė, atsižvelgiant į pradžios tašką.
yRelPosition YR
zRelPosition ZR
iArcCenterInc I Lanko centras, atsižvelgiant į pradžios tašką.
jArcCenterInc J
iArcCenterAbs IA Lanko centras, absoliutus.
jArcCenterAbs JA
arcRadius RADIUS Lanko spindulys.
arcDiameter DIAMETER Lanko skersmuo.
arcSweep SWEEP Lanko apimtis (lanko dengiamas kampas radianais, neigiamas pagal laikrodžio rodyklę).
tool T Dabartinis įrankis.
toolRadius TR Įrankio spindulys.
toolDiameter TD Įrankio skersmuo.
toolpathOrder TOOLPATH_ORDER Įrankio kelio eiliškumas įrankio kelių sąraše, pradedant 0 pirmajam įrankio keliui.
toolCalls TOOL_CALLS Kiek kartų šis įrankis buvo naudotas.
toolpathName TOOLPATH_NAME Dabartinio įrankio kelio pavadinimas (naudotojo apibrėžtas).
programName PROGRAM_NAME Programos pavadinimas, kaip naudotojo sukonfigūruota CAM konfigūracijoje.
xMin X_MIN Minimalios brėžinio ribos.
yMin Y_MIN
zMin Z_MIN
xMax X_MAX Maksimalios brėžinio ribos.
yMax Y_MAX
zMax Z_MAX

Norėdami pridėti ar pakeisti G kodus ar M kodus, ar kitą informaciją antraštėje ar poraštėje, konfigūracija gali nepaisyti nario kintamųjų header ir footer konstruktoriuje, pavyzdžiui, taip:

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

Norėdami naudoti absoliučias reikšmes lankų centro I/J reikšmėms, galite nepaisyti lanko kodo blokų taip:

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]";

QCAD/CAM automatiškai sujungia DXF šablono failą su tokiu pat pavadinimu kaip postprocesoriaus failas (jei prieinamas) nustatydamas ar perjungdamas postprocesorių. Tarkime, postprocesorius vadinasi „MyGCode”, įgyvendintas faile postprocessors/MyGCode.js. Sukurkite DXF failą su įrankių apibrėžimais faile postprocessors/MyGCode.dxf. Šiame faile gali būti įrankių apibrėžimai, numatytieji sluoksniai arba prieinamo paviršiaus ploto kontūras. Pastaba: bet koks matomas šablono failo turinys sujungiant automatiškai patalpinamas užrakintame sluoksnyje, todėl jis yra tik matomas, bet nepasirenkamas.