Ga naar inhoud

QCAD/CAM Postprocessor

QCAD/CAM kan CAD-tekeningen exporteren naar diverse formaten die in de CAM (computerondersteunde productie) worden gebruikt. Deze formaten kunnen dialecten van G-code zijn of andere, volledig verschillende formaten. Elk ondersteund CAM-formaat wordt gedefinieerd in een configuratiebestand (of “postprocessor”) dat een ECMAScript-bestand (JavaScript) is dat de details van het formaat implementeert. Alle beschikbare configuraties worden opgeslagen in de map postprocessors. Nieuwe formaatimplementaties kunnen op dezelfde locatie worden toegevoegd.

Elk configuratiebestand bevat een ECMAScript-klasse met dezelfde naam als het scriptbestand. Als het scriptbestand MyGCode.js heet, moet de in het script gedefinieerde klasse MyGCode heten.

De ECMAScript-klasse moet direct of indirect afgeleid zijn van de klasse CamExporterV2, die door QCAD/CAM wordt gedefinieerd. CamExporterV2 definieert de basisstructuur van CAM-exporter-configuratieklassen. Diverse methoden in CamExporterV2 worden aangeroepen om de bestandsheader, de diverse objecten in de CAD-tekening en de footer te exporteren. CamExporterV2 zorgt ook voor de diverse functies van QCAD/CAM, bijvoorbeeld gereedschapsradiuscompensatie, insteek / uitsteek, het snijden van binnencontouren vóór buitencontouren, padoptimalisatie, enz.

CamExporterV2 geeft op zichzelf niets uit, maar zou op zichzelf een leeg bestand produceren. CamExporterV2 biedt een tekststroom (QTextStream) om naar het geëxporteerde bestand te schrijven. Deze tekststroom wordt beschikbaar gesteld via de lidvariabele this.stream.

Als de gewenste uitvoer een G-code-dialect is (bijv. G1 X10 Y20 voor een lineaire beweging), kan de configuratie worden afgeleid van de bestaande configuratie voor G-code genaamd GCodeBase, die is gedefinieerd in het bestand GCodeBase.js. Dit is het geval bij de meeste machinebesturingen. Een dergelijke voorbeeldconfiguratie voor het uitvoeren van G-code in millimeters is gedefinieerd in het bestand GCodeMM.js en beschikbaar in de gebruikersinterface als de configuratie genaamd G-Code (G41/G42) [mm].

Maak een bestand met een unieke naam naar keuze. Voor dit voorbeeld noemen we onze nieuwe configuratie MyGCode en slaan we deze op in een bestand met dezelfde naam, dat wil zeggen MyGCode.js in de map postprocessors van uw QCAD/CAM-installatie.

U kunt uw favoriete platte-teksteditor gebruiken om het bestand te maken en te schrijven, bijvoorbeeld Notepad onder Windows, TextEdit onder macOS of vim, Emacs, enz. onder Linux-systemen.

MyGCode.js moet een klasse genaamd MyGCode definiëren om een geldige configuratie voor QCAD/CAM te zijn. Hoewel er in ECMAScript strikt genomen geen klassen zijn, kunnen we een vergelijkbaar concept creëren door functies aan het prototype-object van een constructorfunctie te koppelen. Hoe dit precies werkt, valt buiten het bestek van deze documentatie. Er is echter een eenvoudig sjabloon dat u voor alle configuratiebestanden kunt gebruiken.

Voor ons voorbeeld ziet de definitie van de klasse MyGCode er zo uit (let op: de regels die met // beginnen zijn commentaar en zijn niet vereist):

// GCodeBase.js insluiten, dat de klasse 'GCodeBase' bevat,
// gebruikt als basis voor onze eigen configuratie:
include("GCodeBase.js");
// Constructor van onze klasse:
function MyGCode(documentInterface, newDocumentInterface) {
// Constructor van de basisklasse aanroepen:
GCodeBase.call(this, documentInterface, newDocumentInterface);
}
// Onze klasse afleiden van de klasse GCodeBase:
MyGCode.prototype = new GCodeBase();
// Weergavenaam getoond in de gebruikersinterface:
MyGCode.displayName = "My G-Code";

Nu hebben we een nieuwe, volledig werkende configuratie genaamd “My G-Code” gemaakt, die klaar is om in QCAD/CAM te worden gebruikt en die basale G-code produceert.

De hierboven gedefinieerde constructor roept de constructor van onze basisklasse GCodeBase aan. In de constructor kunnen we enkele parameters voor onze configuratie instellen, zoals de gewenste uitvoereenheid of of we G41/G42 willen gebruiken voor gereedschapsradiuscompensatie of het midden van het gereedschapstraject willen berekenen.

Om de uitvoereenheid te configureren (dat is de eenheid die uw machine of besturing verwacht), kunnen we de lidvariabele unit instellen op Inch of Millimeter, bijvoorbeeld:

this.unit = RS.Inch;

of

this.unit = RS.Millimeter;

Andere instellingen die in de constructor kunnen worden geconfigureerd zijn:

Variabele Mogelijke waarden Standaard Beschrijving
this.outputOffsetPath true of false false Op true zetten om de gereedschapsradiuscompensatie te berekenen in plaats van G41/G42 te gebruiken.
this.lineNumber Getal 10 Beginnummer gebruikt voor de regelnummering (N…).
this.lineNumberIncrement Getal 10 Regelnummer-increment van regel tot regel.
this.fileExtensions Array [ "nc", "cnc" ] Lijst van bestandsextensies waaruit de gebruiker kan kiezen bij het exporteren via deze postprocessor.

Een volledige constructor zou er zo uit kunnen zien:

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

De G-code-uitvoer is gestructureerd in codeblokken die naar het uitvoerbestand worden geschreven bij het gebruik van de CAM-exportfunctie in QCAD/CAM. Het eerste codeblok dat wordt geschreven, is bijvoorbeeld het codeblok “header”. Elk codeblok wordt gedefinieerd in een lidvariabele die het op naam identificeert, bijvoorbeeld this.header bevat het codeblok voor de bestandsheader.

Codeblokken kunnen worden overschreven om willekeurige code / tekst te bevatten. Codeblokken bevatten doorgaans variabelen om de huidige X/Y-coördinaten, het regelnummer, de voeding, enz. uit te voeren.

Stel dat één enkele lijn naar G-code wordt geëxporteerd. De lijn wordt geëxporteerd met gereedschapsradiuscompensatie links van de lijn (G41). De codeblokken die naar het uitvoerbestand worden geschreven, zijn als volgt:

Codeblok Beschrijving Voorbeelduitvoer
header Header van de uitvoer (altijd het eerste codeblok). G21 G17 G90 G40 G49 G80
rapidMoveZ Snelle beweging naar het veiligheidsniveau. G0 Z100
rapidMove Snelle beweging naar de eerste positie van de eerste contour (hier het begin van de insteek voor de lijn). G0 X5 Y10
toolHeader Eerste blok wanneer een nieuw gereedschap in actie komt (gereedschapswissel). T1
rapidMoveZ Snelle beweging omlaag naar het naderingsniveau (zwevend boven het materiaal). G0 Z5
firstLinearMoveZ Insteken in het materiaal met de insteeksnelheid. G1 Z-5 F50
toolpathHeader Eerste blok van een nieuw gereedschapstraject.
contourHeader Eerste blok van een nieuwe contour binnen een gereedschapstraject.
singleZPassHeader Header voor één enkele Z-doorgang. We snijden de volledige diepte in één doorgang.
zPassFirstHeader Eerste header van één of meerdere Z-doorgangen.
linearMoveCompensationLeft Lineaire beweging naar het startpunt van de lijn langs de insteek, waarbij de gereedschapsradiuscompensatie wordt ingeschakeld. G41 X10 Y10 F500
linearMove Lineaire beweging langs de lijn naar het eindpunt van de lijn. X30 Y10
linearMoveCompensationOff Lineaire beweging weg van het eindpunt langs de uitsteek, waarbij de gereedschapsradiuscompensatie wordt uitgeschakeld. G40 X35 Y10
zPassLastFooter Laatste footer van één of meerdere Z-doorgangen.
singleZPassFooter Footer voor één enkele Z-doorgang.
contourFooter Einde van de contour.
toolpathFooter Einde van het gereedschapstraject.
linearMoveZ Beweging uit het materiaal naar het naderingsniveau. Z5
rapidMoveZ Snelle beweging naar het veiligheidsniveau. G0 Z100
toolFooter Einde voor dit gereedschap.
footer Einde van het programma. M30

Veel van deze codeblokken zijn doorgaans ongebruikt en produceren geen uitvoer (leeg codeblok).

Lidvariabele Variabelenaam Beschrijving
inputFileName INFILENAME Naam van het invoerbestand (bijv. DXF-bestand).
inputFilePath INFILEPATH Naam van het invoerbestand met het volledige pad.
fileName FILENAME Naam van het uitvoerbestand.
filePath FILEPATH Naam van het uitvoerbestand met het volledige pad.
dateTime DATETIME Datum en tijd van de export.
lineNumber N Huidig regelnummer.
spindleSpeed S Spilsnelheid, typisch in tpm.
feedRate F Voeding.
plungeRate FP Insteeksnelheid.
xHomePosition XH Referentiepositie zoals geconfigureerd in de CAM-configuratie.
yHomePosition YH
zHomePosition ZH
zSafety ZS Z-veiligheidsniveau voor gereedschapswissels en begin / einde.
zClearance ZU Z-naderingsniveau voor het naderen van het materiaal.
zClearancePass ZUP Z-naderingsniveau tussen meerdere doorgangen.
zCuttingDepth ZD Z-snijniveau (totaal).
xFirstPosition XF Eerste positie van de eerste contour in het eerste gereedschapstraject.
yFirstPosition YF
xStartPosition X1 Begin van het object (startpunt van lijn / boog).
yStartPosition Y1
zStartPosition Z1
xPosition X Huidige doelpositie. Eindpunt van de huidige lijn / boog.
yPosition Y
zPosition Z
xRelPosition XR Huidige doelpositie als relatieve coördinaat, ten opzichte van het startpunt.
yRelPosition YR
zRelPosition ZR
iArcCenterInc I Middelpunt van de boog, ten opzichte van het startpunt.
jArcCenterInc J
iArcCenterAbs IA Middelpunt van de boog, absoluut.
jArcCenterAbs JA
arcRadius RADIUS Straal van de boog.
arcDiameter DIAMETER Diameter van de boog.
arcSweep SWEEP Bestreken hoek van de boog (door de boog overspannen hoek in rad, negatief met de klok mee).
tool T Huidig gereedschap.
toolRadius TR Gereedschapsradius.
toolDiameter TD Gereedschapsdiameter.
toolpathOrder TOOLPATH_ORDER Volgorde van het gereedschapstraject in de lijst van gereedschapstrajecten, beginnend met 0 voor het eerste gereedschapstraject.
toolCalls TOOL_CALLS Aantal keren dat dit gereedschap is gebruikt.
toolpathName TOOLPATH_NAME Naam van het huidige gereedschapstraject (door de gebruiker gedefinieerd).
programName PROGRAM_NAME Programmanaam zoals geconfigureerd door de gebruiker in de CAM-configuratie.
xMin X_MIN Minimale uitgestrektheid van de tekening.
yMin Y_MIN
zMin Z_MIN
xMax X_MAX Maximale uitgestrektheid van de tekening.
yMax Y_MAX
zMax Z_MAX

Om G-codes of M-codes of andere informatie in de header of footer toe te voegen of te wijzigen, kan een configuratie de lidvariabelen header en footer in de constructor overschrijven, bijvoorbeeld als volgt:

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

Om absolute waarden voor de I/J-waarden voor het middelpunt van bogen te gebruiken, kunt u de boog-codeblokken als volgt overschrijven:

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 voegt bij het instellen of wisselen van de postprocessor automatisch een DXF-sjabloonbestand met dezelfde naam als het postprocessorbestand samen (indien beschikbaar). Stel dat de postprocessor “MyGCode” heet, geïmplementeerd in postprocessors/MyGCode.js. Maak een DXF-bestand met de gereedschapsdefinities in postprocessors/MyGCode.dxf. Dit bestand kan gereedschapsdefinities, standaardlagen of de omtrek van het beschikbare oppervlak bevatten. Let op: alle zichtbare inhoud van het sjabloonbestand wordt bij het samenvoegen automatisch op een vergrendelde laag geplaatst, zodat deze alleen zichtbaar maar niet selecteerbaar is.