Gå til innholdet

QCAD/CAM-postprosessor

QCAD/CAM kan eksportere CAD-tegninger til ulike formater brukt i CAM (datastøttet produksjon). Disse formatene kan være dialekter av G-Code eller andre, helt forskjellige formater. Hvert støttet CAM-format er definert i en konfigurasjonsfil (eller “postprosessor”) som er en ECMAScript-fil (JavaScript) som implementerer formatdetaljene. Alle tilgjengelige konfigurasjoner lagres inne i mappen postprocessors. Nye formatimplementeringer kan legges til på samme plassering.

Hver konfigurasjonsfil inneholder en ECMAScript-klasse med samme navn som scriptfilen. Hvis scriptfilen heter MyGCode.js, må klassen definert inne i scriptet hete MyGCode.

ECMAScript-klassen må direkte eller indirekte avledes fra klassen CamExporterV2, som er definert av QCAD/CAM. CamExporterV2 definerer den grunnleggende strukturen til CAM-eksportkonfigurasjonsklasser. Ulike metoder i CamExporterV2 kalles for å eksportere filhodet, de ulike objektene i CAD-tegningen og bunnteksten. CamExporterV2 tar seg også av de ulike funksjonene i QCAD/CAM, for eksempel verktøyradiuskompensasjon, innføring / utføring, skjæring av indre konturer før ytre konturer, baneoptimering osv.

CamExporterV2 sender ikke ut noe selv, men ville produsere en tom fil på egen hånd. CamExporterV2 tilbyr en tekststrøm (QTextStream) for å skrive til den eksporterte filen. Denne tekststrømmen eksponeres gjennom medlemsvariabelen this.stream.

Hvis ønsket utdata er en G-Code-dialekt (f.eks. G1 X10 Y20 for en lineær bevegelse), kan konfigurasjonen avledes fra den eksisterende konfigurasjonen for G-Code kalt GCodeBase, som er definert i filen GCodeBase.js. Dette er tilfellet for de fleste maskinkontrollere. Et slikt eksempel på konfigurasjon for å sende ut G-Code i millimeter er definert i filen GCodeMM.js og tilgjengelig i brukergrensesnittet som konfigurasjonen kalt G-Code (G41/G42) [mm].

Opprett en fil med et unikt navn etter eget valg. For dette eksempelet kaller vi vår nye konfigurasjon MyGCode og lagrer den i en fil med samme navn, dvs. MyGCode.js under mappen postprocessors i din QCAD/CAM-installasjon.

Du kan bruke din foretrukne rentekstredigerer til å opprette og skrive filen, for eksempel Notepad under Windows, TextEdit under macOS eller vim, Emacs osv. under Linux-systemer.

MyGCode.js må definere en klasse kalt MyGCode for å være en gyldig konfigurasjon for QCAD/CAM. Selv om det strengt tatt ikke finnes klasser i ECMAScript, kan vi skape et lignende konsept ved å knytte funksjoner til prototypeobjektet til en konstruktørfunksjon. Hvordan dette fungerer nøyaktig er utenfor rammene av denne dokumentasjonen. Det finnes imidlertid en enkel mal du kan bruke for alle konfigurasjonsfiler.

For vårt eksempel ser definisjonen av klassen MyGCode slik ut (merk at linjer som starter med // er kommentarer og ikke er påkrevd):

// Inkluder GCodeBase.js som inneholder klassen 'GCodeBase',
// brukt som base for vår egen konfigurasjon:
include("GCodeBase.js");
// Konstruktør av klassen vår:
function MyGCode(documentInterface, newDocumentInterface) {
// Kall konstruktøren til basisklassen:
GCodeBase.call(this, documentInterface, newDocumentInterface);
}
// Avled klassen vår fra klassen GCodeBase:
MyGCode.prototype = new GCodeBase();
// Visningsnavn vist i brukergrensesnittet:
MyGCode.displayName = "My G-Code";

Nå har vi opprettet en ny, fullt fungerende konfigurasjon kalt “My G-Code” som er klar til å brukes i QCAD/CAM og produserer grunnleggende G-Code.

Konstruktøren vi definerte ovenfor kaller konstruktøren til basisklassen vår GCodeBase. I konstruktøren kan vi sette noen parametere for konfigurasjonen vår, som ønsket utdataenhet eller om vi vil bruke G41/G42 for verktøyradiuskompensasjon eller beregne senteret av verktøybanen.

For å konfigurere utdataenheten (det er enheten maskinen eller kontrolleren din forventer), kan vi sette medlemsvariabelen unit til Inch eller Millimeter, for eksempel:

this.unit = RS.Inch;

eller

this.unit = RS.Millimeter;

Andre innstillinger som kan konfigureres i konstruktøren er:

Variabel Mulige verdier Standard Beskrivelse
this.outputOffsetPath true eller false false Sett til true for å beregne verktøyradiuskompensasjon i stedet for å bruke G41/G42.
this.lineNumber Tall 10 Startnummer brukt for linjenummerering (N…).
this.lineNumberIncrement Tall 10 Linjenummerøkning fra linje til linje.
this.fileExtensions Array [ "nc", "cnc" ] Liste over filtypenavn brukeren kan velge mellom ved eksport gjennom denne postprosessoren.

En fullstendig konstruktør kan se slik ut:

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 er strukturert i kodeblokker som skrives til utdatafilen ved bruk av CAM-eksportfunksjonen i QCAD/CAM. For eksempel er den første kodeblokken som skrives kodeblokken “header”. Hver kodeblokk er definert i en medlemsvariabel som identifiserer den ved navn, for eksempel inneholder this.header kodeblokken for filhodet.

Kodeblokker kan overstyres til å inneholde hvilken som helst kode / tekst. Kodeblokker inneholder typisk variabler for å sende ut de gjeldende X/Y-koordinatene, linjenummer, matehastighet osv.

La oss si at en enkelt linje eksporteres til G-Code. Linjen eksporteres med verktøyradiuskompensasjon til venstre for linjen (G41). Kodeblokkene som skrives til utdatafilen er som følger:

Kodeblokk Beskrivelse Eksempelutdata
header Hode på utdataen (alltid den første kodeblokken). G21 G17 G90 G40 G49 G80
rapidMoveZ Hurtigbevegelse til sikkerhetsnivå. G0 Z100
rapidMove Hurtigbevegelse til den første posisjonen til den første konturen (her starten på innføringen for linjen). G0 X5 Y10
toolHeader Første blokk når et nytt verktøy trer i aksjon (verktøyskifte). T1
rapidMoveZ Hurtigbevegelse ned til klaringsnivå (svevende over materialet). G0 Z5
firstLinearMoveZ Skjæring inn i materialet ved neddykkingshastighet. G1 Z-5 F50
toolpathHeader Første blokk av en ny verktøybane.
contourHeader Første blokk av en ny kontur innenfor en verktøybane.
singleZPassHeader Hode for enkelt Z-gjennomløp. Vi skjærer hele dybden i et enkelt gjennomløp.
zPassFirstHeader Første hode av enkelt eller flere Z-gjennomløp.
linearMoveCompensationLeft Lineær bevegelse til startpunktet av linjen langs innføring, slår på verktøyradiuskompensasjonen. G41 X10 Y10 F500
linearMove Lineær bevegelse langs linjen til sluttpunktet av linjen. X30 Y10
linearMoveCompensationOff Lineær bevegelse bort fra sluttpunktet langs utføring, slår av verktøyradiuskompensasjonen. G40 X35 Y10
zPassLastFooter Siste bunntekst av enkelt eller flere Z-gjennomløp.
singleZPassFooter Bunntekst for enkelt Z-gjennomløp.
contourFooter Slutt på kontur.
toolpathFooter Slutt på verktøybane.
linearMoveZ Bevegelse ut av materialet til klaringsnivå. Z5
rapidMoveZ Bevegelse til sikkerhetsnivå. G0 Z100
toolFooter Slutt for dette verktøyet.
footer Slutt på program. M30

Mange av disse kodeblokkene er typisk ubrukte og produserer ingen utdata (tom kodeblokk).

Medlemsvariabel Variabelnavn Beskrivelse
inputFileName INFILENAME Inndatafilnavn (f.eks. DXF-fil).
inputFilePath INFILEPATH Inndatafilnavn med fullstendig bane.
fileName FILENAME Utdatafilnavn.
filePath FILEPATH Utdatafilnavn med fullstendig bane.
dateTime DATETIME Dato og klokkeslett for eksport.
lineNumber N Gjeldende linjenummer.
spindleSpeed S Spindelhastighet, typisk o/min.
feedRate F Matehastighet.
plungeRate FP Neddykkingshastighet.
xHomePosition XH Hjemmeposisjon som konfigurert i CAM-konfigurasjonen.
yHomePosition YH
zHomePosition ZH
zSafety ZS Z-sikkerhetsnivå for verktøyskifter og start / slutt.
zClearance ZU Z-klaringsnivå for å nærme seg materialet.
zClearancePass ZUP Z-klaringsnivå mellom flere gjennomløp.
zCuttingDepth ZD Z-skjærenivå (totalt).
xFirstPosition XF Første posisjon av den første konturen i den første verktøybanen.
yFirstPosition YF
xStartPosition X1 Start på objekt (startpunkt av linje / bue).
yStartPosition Y1
zStartPosition Z1
xPosition X Gjeldende målposisjon. Sluttpunkt av den gjeldende linjen / buen.
yPosition Y
zPosition Z
xRelPosition XR Gjeldende målposisjon som relativ koordinat, relativt til startpunktet.
yRelPosition YR
zRelPosition ZR
iArcCenterInc I Senter av bue, relativt til startpunktet.
jArcCenterInc J
iArcCenterAbs IA Senter av bue, absolutt.
jArcCenterAbs JA
arcRadius RADIUS Radius av bue.
arcDiameter DIAMETER Diameter av bue.
arcSweep SWEEP Sveip av bue (vinkel dekket av bue i rad, negativ for med klokken).
tool T Gjeldende verktøy.
toolRadius TR Verktøyradius.
toolDiameter TD Verktøydiameter.
toolpathOrder TOOLPATH_ORDER Verktøybanens rekkefølge i listen over verktøybaner, startende med 0 for den første verktøybanen.
toolCalls TOOL_CALLS Antall ganger dette verktøyet har blitt brukt.
toolpathName TOOLPATH_NAME Navn på gjeldende verktøybane (brukerdefinert).
programName PROGRAM_NAME Programnavn som konfigurert av brukeren i CAM-konfigurasjonen.
xMin X_MIN Minimumsutstrekning av tegning.
yMin Y_MIN
zMin Z_MIN
xMax X_MAX Maksimumsutstrekning av tegning.
yMax Y_MAX
zMax Z_MAX

For å legge til eller endre G-koder eller M-koder eller annen informasjon i hodet eller bunnteksten, kan en konfigurasjon overstyre medlemsvariablene header og footer i konstruktøren, for eksempel som følger:

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

For å bruke absolutte verdier for I/J-verdier for senteret av buer, kan du overstyre 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 inn en DXF-malfil med samme navn som postprosessor-filen (hvis tilgjengelig) ved innstilling eller bytting av postprosessoren. La oss si at postprosessoren heter “MyGCode”, implementert i postprocessors/MyGCode.js. Opprett en DXF-fil med verktøydefinisjonene i postprocessors/MyGCode.dxf. Denne filen kan inneholde verktøydefinisjoner, standardlag eller omrisset av det tilgjengelige overflateområdet. Merk: Alt synlig innhold i malfilen plasseres automatisk på et låst lag ved fletting, så det er bare synlig, men ikke valgbart.