Hoppa till innehåll

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.

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].

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.

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;
}

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).

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

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

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

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.