QCAD/CAM-postprocessor
QCAD/CAM kan exportera CAD-ritningar till olika format som används i CAM (datorstödd tillverkning). Dessa format kan vara dialekter av G-Code eller andra, helt olika format. Varje format som stöds i CAM definieras i en konfigurationsfil (eller “postprocessor”) som är en ECMAScript-fil (JavaScript) som implementerar formatdetaljerna. Alla tillgängliga konfigurationer lagras inuti katalogen postprocessors. Nya formatimplementeringar kan läggas till på samma plats.
Grundläggande struktur
Section titled “Grundläggande struktur”Varje konfigurationsfil innehåller en ECMAScript-klass med samma namn som skriptfilen. Om skriptfilen heter MyGCode.js måste klassen som definieras inuti skriptet heta MyGCode.
ECMAScript-klassen måste direkt eller indirekt härledas från klassen CamExporterV2, som definieras av QCAD/CAM. CamExporterV2 definierar den grundläggande strukturen för CAM-exportkonfigurationsklasser. Olika metoder i CamExporterV2 anropas för att exportera filhuvudet, de olika objekten i CAD-ritningen och sidfoten. CamExporterV2 tar också hand om de olika funktionerna i QCAD/CAM, till exempel verktygsradiuskompensation, inledning / utledning, skärning av inre konturer före yttre konturer, banoptimering osv.
CamExporterV2 matar inte ut något själv, utan skulle producera en tom fil på egen hand. CamExporterV2 erbjuder en textström (QTextStream) för att skriva till den exporterade filen. Denna textström exponeras genom medlemsvariabeln this.stream.
Om den önskade utdatan är en G-Code-dialekt (t.ex. G1 X10 Y20 för en linjär rörelse) kan konfigurationen härledas från den befintliga konfigurationen för G-Code som kallas GCodeBase, som definieras i filen GCodeBase.js. Detta är fallet för de flesta maskinstyrningar. Ett sådant exempel på konfiguration för att mata ut G-Code i millimeter definieras i filen GCodeMM.js och är tillgänglig i användargränssnittet som konfigurationen som kallas G-Code (G41/G42) [mm].
Härleda en konfiguration från GCodeBase
Section titled “Härleda en konfiguration från GCodeBase”Skapa en fil med ett unikt namn efter eget val. För detta exempel kallar vi vår nya konfiguration MyGCode och lagrar den i en fil med samma namn, dvs. MyGCode.js under katalogen postprocessors i din QCAD/CAM-installation.
Du kan använda din favorittextredigerare för att skapa och skriva filen, till exempel Anteckningar i Windows, TextEdit i macOS eller vim, Emacs osv. i Linux-system.
MyGCode.js måste definiera en klass som heter MyGCode för att vara en giltig konfiguration för QCAD/CAM. Även om det strikt sett inte finns klasser i ECMAScript kan vi skapa ett liknande koncept genom att koppla funktioner till prototypobjektet för en konstruktorfunktion. Hur detta exakt fungerar ligger utanför ramen för denna dokumentation. Det finns dock en enkel mall som du kan använda för alla konfigurationsfiler.
För vårt exempel ser definitionen av klassen MyGCode ut så här (observera att rader som börjar med // är kommentarer och inte krävs):
// Inkludera GCodeBase.js som innehåller klassen 'GCodeBase',// använd som bas för vår egen konfiguration:include("GCodeBase.js");
// Konstruktor för vår klass:function MyGCode(documentInterface, newDocumentInterface) { // Anropa basklassens konstruktor: GCodeBase.call(this, documentInterface, newDocumentInterface);}
// Härled vår klass från klassen GCodeBase:MyGCode.prototype = new GCodeBase();
// Visningsnamn som visas i användargränssnittet:MyGCode.displayName = "My G-Code";Nu har vi skapat en ny, fullt fungerande konfiguration som kallas “My G-Code” som är redo att användas i QCAD/CAM och producerar grundläggande G-Code.
Konfigurationsinställningar
Section titled “Konfigurationsinställningar”Konstruktorn vi definierade ovan anropar konstruktorn för vår basklass GCodeBase. I konstruktorn kan vi ställa in vissa parametrar för vår konfiguration, såsom den önskade utdataenheten eller om vi vill använda G41/G42 för verktygsradiuskompensation eller beräkna centrum av verktygsbanan.
För att konfigurera utdataenheten (det är enheten som din maskin eller styrning förväntar sig) kan vi ställa in medlemsvariabeln unit till Inch eller Millimeter, till exempel:
this.unit = RS.Inch;eller
this.unit = RS.Millimeter;Andra inställningar som kan konfigureras i konstruktorn är:
| Variabel | Möjliga värden | Standard | Beskrivning |
|---|---|---|---|
this.outputOffsetPath |
true eller false | false | Ställ in på true för att beräkna verktygsradiuskompensation i stället för att använda G41/G42. |
this.lineNumber |
Tal | 10 | Startnummer som används för radnumrering (N…). |
this.lineNumberIncrement |
Tal | 10 | Radnummerökning från rad till rad. |
this.fileExtensions |
Array | [ "nc", "cnc" ] |
Lista över filtillägg som användaren kan välja mellan vid export genom denna postprocessor. |
En komplett konstruktor kan se ut så här:
function MyGCode(documentInterface, newDocumentInterface) { GCodeBase.call(this, documentInterface, newDocumentInterface);
this.unit = RS.Inch; this.outputOffsetPath = true; this.lineNumber = 1; this.lineNumberIncrement = 1;}Definiera G-Code-utdatan
Section titled “Definiera G-Code-utdatan”Kodblock
Section titled “Kodblock”G-Code-utdata är strukturerad i kodblock som skrivs till utdatafilen när CAM-exportfunktionen används i QCAD/CAM. Till exempel är det första kodblocket som skrivs kodblocket “header”. Varje kodblock definieras i en medlemsvariabel som identifierar det med namn, till exempel innehåller this.header kodblocket för filhuvudet.
Kodblock kan åsidosättas för att innehålla valfri kod / text. Kodblock innehåller vanligtvis variabler för att mata ut de aktuella X/Y-koordinaterna, radnummer, matningshastighet osv.
Låt oss säga att en enda linje exporteras till G-Code. Linjen exporteras med verktygsradiuskompensation till vänster om linjen (G41). Kodblocken som skrivs till utdatafilen är följande:
| Kodblock | Beskrivning | Exempelutdata |
|---|---|---|
header |
Huvud för utdatan (alltid det första kodblocket). | G21 G17 G90 G40 G49 G80 |
rapidMoveZ |
Snabb rörelse till säkerhetsnivå. | G0 Z100 |
rapidMove |
Snabb rörelse till den första positionen för den första konturen (här början på inledningen för linjen). | G0 X5 Y10 |
toolHeader |
Första blocket när ett nytt verktyg träder i aktion (verktygsbyte). | T1 |
rapidMoveZ |
Snabb rörelse ner till frigångsnivå (svävande över materialet). | G0 Z5 |
firstLinearMoveZ |
Skärning in i materialet vid nedsänkningshastighet. | G1 Z-5 F50 |
toolpathHeader |
Första blocket av en ny verktygsbana. | |
contourHeader |
Första blocket av en ny kontur inom en verktygsbana. | |
singleZPassHeader |
Huvud för enkel Z-passage. Vi skär hela djupet i en enda passage. | |
zPassFirstHeader |
Första huvudet av enkel eller flera Z-passager. | |
linearMoveCompensationLeft |
Linjär rörelse till startpunkten för linjen längs inledning, slår på verktygsradiuskompensationen. | G41 X10 Y10 F500 |
linearMove |
Linjär rörelse längs linjen till slutpunkten för linjen. | X30 Y10 |
linearMoveCompensationOff |
Linjär rörelse bort från slutpunkten längs utledning, slår av verktygsradiuskompensationen. | G40 X35 Y10 |
zPassLastFooter |
Sista sidfoten av enkel eller flera Z-passager. | |
singleZPassFooter |
Sidfot för enkel Z-passage. | |
contourFooter |
Slut på kontur. | |
toolpathFooter |
Slut på verktygsbana. | |
linearMoveZ |
Rörelse ut ur materialet till frigångsnivå. | Z5 |
rapidMoveZ |
Rörelse till säkerhetsnivå. | G0 Z100 |
toolFooter |
Slut för detta verktyg. | |
footer |
Slut på program. | M30 |
Många av dessa kodblock är vanligtvis oanvända och producerar ingen utdata (tomt kodblock).
Variabler
Section titled “Variabler”| Medlemsvariabel | Variabelnamn | Beskrivning |
|---|---|---|
| inputFileName | INFILENAME | Indatafilnamn (t.ex. DXF-fil). |
| inputFilePath | INFILEPATH | Indatafilnamn med fullständig sökväg. |
| fileName | FILENAME | Utdatafilnamn. |
| filePath | FILEPATH | Utdatafilnamn med fullständig sökväg. |
| dateTime | DATETIME | Datum och tid för export. |
| lineNumber | N | Aktuellt radnummer. |
| spindleSpeed | S | Spindelhastighet, vanligtvis varv/min. |
| feedRate | F | Matningshastighet. |
| plungeRate | FP | Nedsänkningshastighet. |
| xHomePosition | XH | Hemposition som konfigurerad i CAM-konfigurationen. |
| yHomePosition | YH | |
| zHomePosition | ZH | |
| zSafety | ZS | Z-säkerhetsnivå för verktygsbyten och start / slut. |
| zClearance | ZU | Z-frigångsnivå för att närma sig materialet. |
| zClearancePass | ZUP | Z-frigångsnivå mellan flera passager. |
| zCuttingDepth | ZD | Z-skärnivå (totalt). |
| xFirstPosition | XF | Första positionen för den första konturen i den första verktygsbanan. |
| yFirstPosition | YF | |
| xStartPosition | X1 | Start på objekt (startpunkt för linje / båge). |
| yStartPosition | Y1 | |
| zStartPosition | Z1 | |
| xPosition | X | Aktuell målposition. Slutpunkt för den aktuella linjen / bågen. |
| yPosition | Y | |
| zPosition | Z | |
| xRelPosition | XR | Aktuell målposition som relativ koordinat, i förhållande till startpunkten. |
| yRelPosition | YR | |
| zRelPosition | ZR | |
| iArcCenterInc | I | Centrum av båge, i förhållande till startpunkten. |
| jArcCenterInc | J | |
| iArcCenterAbs | IA | Centrum av båge, absolut. |
| jArcCenterAbs | JA | |
| arcRadius | RADIUS | Radie av båge. |
| arcDiameter | DIAMETER | Diameter av båge. |
| arcSweep | SWEEP | Svep av båge (vinkel som täcks av bågen i rad, negativ för medurs). |
| tool | T | Aktuellt verktyg. |
| toolRadius | TR | Verktygsradie. |
| toolDiameter | TD | Verktygsdiameter. |
| toolpathOrder | TOOLPATH_ORDER | Verktygsbanans ordning i listan över verktygsbanor, med start på 0 för den första verktygsbanan. |
| toolCalls | TOOL_CALLS | Antal gånger detta verktyg har använts. |
| toolpathName | TOOLPATH_NAME | Namn på aktuell verktygsbana (användardefinierat). |
| programName | PROGRAM_NAME | Programnamn som konfigurerat av användaren i CAM-konfigurationen. |
| xMin | X_MIN | Minsta utsträckning av ritning. |
| yMin | Y_MIN | |
| zMin | Z_MIN | |
| xMax | X_MAX | Största utsträckning av ritning. |
| yMax | Y_MAX | |
| zMax | Z_MAX |
Exempel
Section titled “Exempel”Ändra huvud och sidfot
Section titled “Ändra huvud och sidfot”För att lägga till eller ändra G-koder eller M-koder eller annan information i huvudet eller sidfoten kan en konfiguration åsidosätta medlemsvariablerna header och footer i konstruktorn, till exempel enligt följande:
this.header = [ "[N] G0 Z100" ];this.footer = [ "[N] G0 Z100", "[N] M30" ];Absolut I/J
Section titled “Absolut I/J”För att använda absoluta värden för I/J-värden för centrum av bågar kan du åsidosätta bågkodblocken enligt följande:
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]";Postprocessor-mallfil
Section titled “Postprocessor-mallfil”QCAD/CAM slår automatiskt samman en DXF-mallfil med samma namn som postprocessor-filen (om tillgänglig) vid inställning eller byte av postprocessorn. Låt oss säga att postprocessorn heter “MyGCode”, implementerad i postprocessors/MyGCode.js. Skapa en DXF-fil med verktygsdefinitionerna i postprocessors/MyGCode.dxf. Denna fil kan innehålla verktygsdefinitioner, standardlager eller konturen av den tillgängliga ytan. Obs: Allt synligt innehåll i mallfilen placeras automatiskt på ett låst lager vid sammanslagning, så det är endast synligt men inte valbart.