Gå til indhold

QCAD/CAM-postprocessor

QCAD/CAM kan eksportere CAD-tegninger til forskellige formater, der bruges i CAM (computerstøttet fremstilling). Disse formater kan være dialekter af G-kode eller andre, helt forskellige formater. Hvert understøttet CAM-format er defineret i en konfigurationsfil (eller “postprocessor”), som er en ECMAScript-fil (JavaScript), der implementerer formatdetaljerne. Alle tilgængelige konfigurationer gemmes inde i mappen postprocessors. Nye formatimplementeringer kan tilføjes samme sted.

Hver konfigurationsfil indeholder en ECMAScript-klasse med samme navn som scriptfilen. Hvis scriptfilen hedder MyGCode.js, skal klassen defineret inde i scriptet hedde MyGCode.

ECMAScript-klassen skal direkte eller indirekte afledes fra klassen CamExporterV2, som er defineret af QCAD/CAM. CamExporterV2 definerer den grundlæggende struktur af CAM-eksportkonfigurationsklasser. Forskellige metoder i CamExporterV2 kaldes for at eksportere filoverskriften, de forskellige objekter i CAD-tegningen og sidefoden. CamExporterV2 tager sig også af de forskellige funktioner i QCAD/CAM, for eksempel værktøjsradiuskompensation, indføring / udføring, skæring af indre konturer før ydre konturer, stioptimering osv.

CamExporterV2 udsender ikke noget af sig selv, men ville producere en tom fil på egen hånd. CamExporterV2 tilbyder en tekststrøm (QTextStream) til at skrive til den eksporterede fil. Denne tekststrøm eksponeres gennem medlemsvariablen this.stream.

Hvis det ønskede output er en G-kode-dialekt (f.eks. G1 X10 Y20 for en lineær bevægelse), kan konfigurationen afledes fra den eksisterende konfiguration for G-kode kaldet GCodeBase, som er defineret i filen GCodeBase.js. Dette er tilfældet for de fleste maskinstyringer. Et sådant eksempel på konfiguration til udsendelse af G-kode i millimeter er defineret i filen GCodeMM.js og tilgængelig i brugergrænsefladen som konfigurationen kaldet G-Code (G41/G42) [mm].

Opret en fil med et unikt navn efter eget valg. For dette eksempel kalder vi vores nye konfiguration MyGCode og gemmer den i en fil med samme navn, dvs. MyGCode.js under mappen postprocessors i din QCAD/CAM-installation.

Du kan bruge din foretrukne almindelige teksteditor til at oprette og skrive filen, for eksempel Notepad under Windows, TextEdit under macOS eller vim, Emacs osv. under Linux-systemer.

MyGCode.js skal definere en klasse kaldet MyGCode for at være en gyldig konfiguration for QCAD/CAM. Selvom der strengt taget ikke er klasser i ECMAScript, kan vi skabe et lignende koncept ved at knytte funktioner til prototypeobjektet af en konstruktørfunktion. Hvordan dette præcist fungerer, er uden for rammerne af denne dokumentation. Der er dog en ligetil skabelon, du kan bruge til alle konfigurationsfiler.

For vores eksempel ser definitionen af klassen MyGCode således ud (bemærk, at linjer, der starter med //, er kommentarer og ikke er påkrævede):

// Inkluder GCodeBase.js, som indeholder klassen 'GCodeBase',
// brugt som base for vores egen konfiguration:
include("GCodeBase.js");
// Konstruktør af vores klasse:
function MyGCode(documentInterface, newDocumentInterface) {
// Kald konstruktøren af basisklassen:
GCodeBase.call(this, documentInterface, newDocumentInterface);
}
// Afled vores klasse fra klassen GCodeBase:
MyGCode.prototype = new GCodeBase();
// Visningsnavn vist i brugergrænsefladen:
MyGCode.displayName = "My G-Code";

Nu har vi oprettet en ny, fuldt fungerende konfiguration kaldet “My G-Code”, som er klar til at blive brugt i QCAD/CAM og producerer grundlæggende G-kode.

Konstruktøren, vi definerede ovenfor, kalder konstruktøren af vores basisklasse GCodeBase. I konstruktøren kan vi indstille nogle parametre for vores konfiguration, såsom den ønskede outputenhed, eller om vi vil bruge G41/G42 til værktøjsradiuskompensation eller beregne centrum af værktøjsstien.

For at konfigurere outputenheden (det er den enhed, din maskine eller controller forventer), kan vi indstille medlemsvariablen unit til Inch eller Millimeter, for eksempel:

this.unit = RS.Inch;

eller

this.unit = RS.Millimeter;

Andre indstillinger, der kan konfigureres i konstruktøren, er:

Variabel Mulige værdier Standard Beskrivelse
this.outputOffsetPath true eller false false Sæt til true for at beregne værktøjsradiuskompensation i stedet for at bruge G41/G42.
this.lineNumber Tal 10 Startnummer brugt til linjenummerering (N…).
this.lineNumberIncrement Tal 10 Linjenummerforøgelse fra linje til linje.
this.fileExtensions Array [ "nc", "cnc" ] Liste over filtypenavne, som brugeren kan vælge imellem, når der eksporteres gennem denne postprocessor.

En komplet konstruktør kan se således ud:

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

G-kode-output er struktureret i kodeblokke, som skrives til outputfilen ved brug af CAM-eksportfunktionen i QCAD/CAM. For eksempel er den første kodeblok, der skrives, kodeblokken “header”. Hver kodeblok er defineret i en medlemsvariabel, der identificerer den ved navn, for eksempel indeholder this.header kodeblokken for filoverskriften.

Kodeblokke kan tilsidesættes til at indeholde vilkårlig kode / tekst. Kodeblokke indeholder typisk variabler til at udsende de aktuelle X/Y-koordinater, linjenummer, fremføringshastighed osv.

Lad os sige, at en enkelt linje eksporteres til G-kode. Linjen eksporteres med værktøjsradiuskompensation til venstre for linjen (G41). Kodeblokkene, der skrives til outputfilen, er som følger:

Kodeblok Beskrivelse Eksempeloutput
header Overskrift på outputtet (altid den første kodeblok). G21 G17 G90 G40 G49 G80
rapidMoveZ Hurtig bevægelse til sikkerhedsniveau. G0 Z100
rapidMove Hurtig bevægelse til den første position af den første kontur (her starten på indføringen for linjen). G0 X5 Y10
toolHeader Første blok, når et nyt værktøj træder i aktion (værktøjsskift). T1
rapidMoveZ Hurtig bevægelse ned til friniveau (svævende over materialet). G0 Z5
firstLinearMoveZ Skæring ind i materialet ved neddykningshastighed. G1 Z-5 F50
toolpathHeader Første blok af en ny værktøjssti.
contourHeader Første blok af en ny kontur inden for en værktøjssti.
singleZPassHeader Overskrift for enkelt Z-gennemløb. Vi skærer hele dybden i et enkelt gennemløb.
zPassFirstHeader Første overskrift af enkelt eller flere Z-gennemløb.
linearMoveCompensationLeft Lineær bevægelse til startpunktet af linjen langs indføring, tænder for værktøjsradiuskompensationen. G41 X10 Y10 F500
linearMove Lineær bevægelse langs linjen til slutpunktet af linjen. X30 Y10
linearMoveCompensationOff Lineær bevægelse væk fra slutpunktet langs udføring, slukker for værktøjsradiuskompensationen. G40 X35 Y10
zPassLastFooter Sidste sidefod af enkelt eller flere Z-gennemløb.
singleZPassFooter Sidefod for enkelt Z-gennemløb.
contourFooter Slut på kontur.
toolpathFooter Slut på værktøjssti.
linearMoveZ Bevægelse ud af materialet til friniveau. Z5
rapidMoveZ Bevægelse til sikkerhedsniveau. G0 Z100
toolFooter Slut for dette værktøj.
footer Slut på program. M30

Mange af disse kodeblokke er typisk ubrugte og producerer ikke noget output (tom kodeblok).

Medlemsvariabel Variabelnavn Beskrivelse
inputFileName INFILENAME Inputfilnavn (f.eks. DXF-fil).
inputFilePath INFILEPATH Inputfilnavn med komplet sti.
fileName FILENAME Outputfilnavn.
filePath FILEPATH Outputfilnavn med komplet sti.
dateTime DATETIME Dato og tid for eksport.
lineNumber N Aktuelt linjenummer.
spindleSpeed S Spindelhastighed, typisk o/min.
feedRate F Fremføringshastighed.
plungeRate FP Neddykningshastighed.
xHomePosition XH Hjemmeposition som konfigureret i CAM-konfigurationen.
yHomePosition YH
zHomePosition ZH
zSafety ZS Z-sikkerhedsniveau for værktøjsskift og start / slut.
zClearance ZU Z-friniveau for tilnærmelse til materialet.
zClearancePass ZUP Z-friniveau mellem flere gennemløb.
zCuttingDepth ZD Z-skæreniveau (samlet).
xFirstPosition XF Første position af den første kontur i den første værktøjssti.
yFirstPosition YF
xStartPosition X1 Start på objekt (startpunkt af linje / bue).
yStartPosition Y1
zStartPosition Z1
xPosition X Aktuel målposition. Slutpunkt af den aktuelle linje / bue.
yPosition Y
zPosition Z
xRelPosition XR Aktuel målposition som relativ koordinat, i forhold til startpunktet.
yRelPosition YR
zRelPosition ZR
iArcCenterInc I Centrum af bue, i forhold til startpunktet.
jArcCenterInc J
iArcCenterAbs IA Centrum af bue, absolut.
jArcCenterAbs JA
arcRadius RADIUS Radius af bue.
arcDiameter DIAMETER Diameter af bue.
arcSweep SWEEP Sweep af bue (vinkel dækket af bue i rad, negativ for med uret).
tool T Aktuelt værktøj.
toolRadius TR Værktøjsradius.
toolDiameter TD Værktøjsdiameter.
toolpathOrder TOOLPATH_ORDER Værktøjsstiens rækkefølge i listen over værktøjsstier, startende med 0 for den første værktøjssti.
toolCalls TOOL_CALLS Antal gange dette værktøj er blevet brugt.
toolpathName TOOLPATH_NAME Navn på den aktuelle værktøjssti (brugerdefineret).
programName PROGRAM_NAME Programnavn som konfigureret af brugeren i CAM-konfigurationen.
xMin X_MIN Minimumsudstrækning af tegning.
yMin Y_MIN
zMin Z_MIN
xMax X_MAX Maksimumsudstrækning af tegning.
yMax Y_MAX
zMax Z_MAX

For at tilføje eller ændre G-koder eller M-koder eller anden information i overskriften eller sidefoden kan en konfiguration tilsidesætte medlemsvariablerne header og footer i konstruktøren, for eksempel som følger:

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

For at bruge absolutte værdier for I/J-værdier for centrum af buer kan du tilsidesætte bue-kodeblokkene som følger:

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 fletter automatisk en DXF-skabelonfil ind med samme navn som postprocessor-filen (hvis tilgængelig) ved indstilling eller skift af postprocessoren. Lad os sige, at postprocessoren hedder “MyGCode”, implementeret i postprocessors/MyGCode.js. Opret en DXF-fil med værktøjsdefinitionerne i postprocessors/MyGCode.dxf. Denne fil kan indeholde værktøjsdefinitioner, standardlag eller omridset af det tilgængelige overfladeområde. Bemærk: Ethvert synligt indhold af skabelonfilen placeres automatisk på et låst lag ved fletning, så det er kun synligt, men ikke valgbart.