Skip to content

Postprocesorul QCAD/CAM

QCAD/CAM poate exporta desene CAD în diverse formate folosite în CAM (fabricație asistată de calculator). Aceste formate pot fi dialecte de cod G sau alte formate complet diferite. Fiecare format CAM acceptat este definit într-un fișier de configurare (sau „postprocesor”) care este un fișier ECMAScript (JavaScript) ce implementează detaliile formatului. Toate configurațiile disponibile sunt stocate în directorul postprocessors. Noi implementări de format pot fi adăugate în aceeași locație.

Fiecare fișier de configurare conține o clasă ECMAScript cu același nume ca fișierul de script. Dacă fișierul de script se numește MyGCode.js, clasa definită în interiorul scriptului trebuie să se numească MyGCode.

Clasa ECMAScript trebuie să derive direct sau indirect din clasa CamExporterV2, care este definită de QCAD/CAM. CamExporterV2 definește structura de bază a claselor de configurare a exportatorilor CAM. Diverse metode din CamExporterV2 sunt apelate pentru a exporta antetul fișierului, diferitele entități din desenul CAD și subsolul. CamExporterV2 se ocupă, de asemenea, de diversele funcții ale QCAD/CAM, de exemplu compensarea razei sculei, intrarea/ieșirea (lead in / lead out), tăierea contururilor interioare înaintea celor exterioare, optimizarea traseului etc.

CamExporterV2 nu produce nimic de la sine, ci ar genera un fișier gol. CamExporterV2 oferă un flux de text (QTextStream) în care se scrie fișierul exportat. Acest flux de text este expus prin variabila membru this.stream.

Dacă rezultatul dorit este un dialect de cod G (de exemplu G1 X10 Y20 pentru o mișcare liniară), configurația poate fi derivată din configurația existentă pentru codul G, numită GCodeBase, care este definită în fișierul GCodeBase.js. Acesta este cazul pentru majoritatea controlerelor de mașină. Un astfel de exemplu de configurație pentru generarea codului G în milimetri este definit în fișierul GCodeMM.js și disponibil în interfața utilizatorului sub numele de configurație G-Code (G41/G42) [mm].

Derivarea unei configurații din GCodeBase

Section titled “Derivarea unei configurații din GCodeBase”

Creați un fișier cu un nume unic ales de dumneavoastră. Pentru acest exemplu, numim noua noastră configurație MyGCode și o stocăm într-un fișier cu același nume, adică MyGCode.js, în directorul postprocessors al instalării dumneavoastră QCAD/CAM.

Puteți folosi editorul de text simplu preferat pentru a crea și scrie fișierul, de exemplu Notepad sub Windows, TextEdit sub macOS sau vim, Emacs etc. sub sistemele Linux.

MyGCode.js trebuie să definească o clasă numită MyGCode pentru a fi o configurație validă pentru QCAD/CAM. Deși, strict vorbind, în ECMAScript nu există clase, putem crea un concept similar atașând funcții la obiectul prototype al unei funcții constructor. Cum funcționează acest lucru exact depășește domeniul acestei documentații. Există însă un șablon simplu pe care îl puteți folosi pentru toate fișierele de configurare.

Pentru exemplul nostru, definiția clasei MyGCode arată astfel (rețineți că liniile care încep cu // sunt comentarii și nu sunt obligatorii):

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

Acum am creat o configurație nouă, pe deplin funcțională, numită „My G-Code”, care este gata de utilizare în QCAD/CAM și produce cod G de bază.

Constructorul definit mai sus apelează constructorul clasei noastre de bază GCodeBase. În constructor putem seta unii parametri pentru configurația noastră, cum ar fi unitatea de ieșire dorită sau dacă dorim să folosim G41/G42 pentru compensarea razei sculei sau să calculăm centrul traseului sculei.

Pentru a configura unitatea de ieșire (adică unitatea așteptată de mașina sau controlerul dumneavoastră), putem seta variabila membru unit la Inch sau Millimeter, de exemplu:

this.unit = RS.Inch;

sau

this.unit = RS.Millimeter;

Alte setări care pot fi configurate în constructor sunt:

Variabilă Valori posibile Implicit Descriere
this.outputOffsetPath true sau false false Setați la true pentru a calcula compensarea razei sculei în loc să folosiți G41/G42.
this.lineNumber Număr 10 Numărul inițial folosit pentru numerotarea liniilor (N…).
this.lineNumberIncrement Număr 10 Incrementarea numărului de linie de la o linie la alta.
this.fileExtensions Array [ "nc", "cnc" ] Lista de extensii de fișier pe care utilizatorul le poate alege la exportul prin acest postprocesor.

Un constructor complet ar putea arăta astfel:

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

Ieșirea de cod G este structurată în blocuri de cod care sunt scrise în fișierul de ieșire atunci când se folosește funcția de export CAM din QCAD/CAM. De exemplu, primul bloc de cod care este scris este blocul de cod „header”. Fiecare bloc de cod este definit într-o variabilă membru care îl identifică prin nume, de exemplu this.header conține blocul de cod pentru antetul fișierului.

Blocurile de cod pot fi suprascrise pentru a conține orice cod/text. Blocurile de cod conțin de obicei variabile pentru a genera coordonatele curente X/Y, numărul de linie, viteza de avans etc.

Să presupunem că o singură linie este exportată în cod G. Linia este exportată cu compensarea razei sculei la stânga liniei (G41). Blocurile de cod care sunt scrise în fișierul de ieșire sunt următoarele:

Bloc de cod Descriere Exemplu de ieșire
header Antetul ieșirii (întotdeauna primul bloc de cod). G21 G17 G90 G40 G49 G80
rapidMoveZ Deplasare rapidă la nivelul de siguranță. G0 Z100
rapidMove Deplasare rapidă la prima poziție a primului contur (aici începutul intrării pentru linie). G0 X5 Y10
toolHeader Primul bloc când intră în acțiune o sculă nouă (schimbare de sculă). T1
rapidMoveZ Deplasare rapidă în jos la nivelul de degajare (deasupra materialului). G0 Z5
firstLinearMoveZ Pătrunderea în material la viteza de plonjare. G1 Z-5 F50
toolpathHeader Primul bloc al unui nou traseu de sculă.
contourHeader Primul bloc al unui nou contur din cadrul unui traseu de sculă.
singleZPassHeader Antet pentru o singură trecere Z. Tăiem întreaga adâncime într-o singură trecere.
zPassFirstHeader Primul antet al uneia sau mai multor treceri Z.
linearMoveCompensationLeft Deplasare liniară către punctul de început al liniei de-a lungul intrării, activând compensarea razei sculei. G41 X10 Y10 F500
linearMove Deplasare liniară de-a lungul liniei până la punctul de sfârșit al liniei. X30 Y10
linearMoveCompensationOff Deplasare liniară în afara punctului de sfârșit de-a lungul ieșirii, dezactivând compensarea razei sculei. G40 X35 Y10
zPassLastFooter Ultimul subsol al uneia sau mai multor treceri Z.
singleZPassFooter Subsol pentru o singură trecere Z.
contourFooter Sfârșitul conturului.
toolpathFooter Sfârșitul traseului de sculă.
linearMoveZ Ieșirea din material la nivelul de degajare. Z5
rapidMoveZ Deplasare la nivelul de siguranță. G0 Z100
toolFooter Sfârșit pentru această sculă.
footer Sfârșitul programului. M30

Multe dintre aceste blocuri de cod sunt de obicei nefolosite și nu produc nicio ieșire (bloc de cod gol).

Variabilă membru Nume de variabilă Descriere
inputFileName INFILENAME Numele fișierului de intrare (de exemplu fișier DXF).
inputFilePath INFILEPATH Numele fișierului de intrare cu calea completă.
fileName FILENAME Numele fișierului de ieșire.
filePath FILEPATH Numele fișierului de ieșire cu calea completă.
dateTime DATETIME Data și ora exportului.
lineNumber N Numărul de linie curent.
spindleSpeed S Turația arborelui, de obicei rot/min.
feedRate F Viteza de avans.
plungeRate FP Viteza de plonjare.
xHomePosition XH Poziția de referință (home) configurată în configurația CAM.
yHomePosition YH
zHomePosition ZH
zSafety ZS Nivelul de siguranță Z pentru schimbările de sculă și pentru început/sfârșit.
zClearance ZU Nivelul de degajare Z pentru apropierea de material.
zClearancePass ZUP Nivelul de degajare Z între treceri multiple.
zCuttingDepth ZD Nivelul de tăiere Z (total).
xFirstPosition XF Prima poziție a primului contur din primul traseu de sculă.
yFirstPosition YF
xStartPosition X1 Începutul entității (punctul de început al liniei/arcului).
yStartPosition Y1
zStartPosition Z1
xPosition X Poziția țintă curentă. Punctul de sfârșit al liniei/arcului curent.
yPosition Y
zPosition Z
xRelPosition XR Poziția țintă curentă ca coordonată relativă, raportată la punctul de început.
yRelPosition YR
zRelPosition ZR
iArcCenterInc I Centrul arcului, raportat la punctul de început.
jArcCenterInc J
iArcCenterAbs IA Centrul arcului, absolut.
jArcCenterAbs JA
arcRadius RADIUS Raza arcului.
arcDiameter DIAMETER Diametrul arcului.
arcSweep SWEEP Deschiderea arcului (unghiul acoperit de arc în radiani, negativ în sens orar).
tool T Scula curentă.
toolRadius TR Raza sculei.
toolDiameter TD Diametrul sculei.
toolpathOrder TOOLPATH_ORDER Ordinea traseului de sculă în lista de trasee, începând cu 0 pentru primul traseu.
toolCalls TOOL_CALLS De câte ori a fost folosită această sculă.
toolpathName TOOLPATH_NAME Numele traseului de sculă curent (definit de utilizator).
programName PROGRAM_NAME Numele programului, configurat de utilizator în configurația CAM.
xMin X_MIN Extinderea minimă a desenului.
yMin Y_MIN
zMin Z_MIN
xMax X_MAX Extinderea maximă a desenului.
yMax Y_MAX
zMax Z_MAX

Pentru a adăuga sau modifica coduri G, coduri M sau alte informații în antet sau subsol, o configurație poate suprascrie variabilele membru header și footer în constructor, de exemplu astfel:

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

Pentru a folosi valori absolute pentru valorile I/J ale centrului arcelor, puteți suprascrie blocurile de cod pentru arce astfel:

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 îmbină automat un fișier șablon DXF cu același nume ca fișierul postprocesorului (dacă este disponibil) atunci când se setează sau se schimbă postprocesorul. Să presupunem că postprocesorul se numește „MyGCode”, implementat în postprocessors/MyGCode.js. Creați un fișier DXF cu definițiile sculelor în postprocessors/MyGCode.dxf. Acest fișier poate conține definiții de scule, straturi implicite sau conturul suprafeței disponibile. Notă: Orice conținut vizibil al fișierului șablon este plasat automat pe un strat blocat la îmbinare, astfel încât să fie doar vizibil, dar nu selectabil.