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.
Structura de bază
Section titled “Structura de bază”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ă.
Preferințele configurației
Section titled “Preferințele configurației”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;}Definirea ieșirii de cod G
Section titled “Definirea ieșirii de cod G”Blocuri de cod
Section titled “Blocuri de cod”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).
Variabile
Section titled “Variabile”| 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 |
Exemple
Section titled “Exemple”Modificarea antetului și a subsolului
Section titled “Modificarea antetului și a subsolului”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" ];I/J absolut
Section titled “I/J absolut”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]";Fișierul șablon al postprocesorului
Section titled “Fișierul șablon al postprocesorului”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.