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.
Grunnleggende struktur
Section titled “Grunnleggende struktur”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].
Avlede en konfigurasjon fra GCodeBase
Section titled “Avlede en konfigurasjon fra GCodeBase”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.
Konfigurasjonsinnstillinger
Section titled “Konfigurasjonsinnstillinger”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;}Definere G-Code-utdataen
Section titled “Definere G-Code-utdataen”Kodeblokker
Section titled “Kodeblokker”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).
Variabler
Section titled “Variabler”| 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 |
Eksempler
Section titled “Eksempler”Endre hode og bunntekst
Section titled “Endre hode og bunntekst”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" ];Absolutt I/J
Section titled “Absolutt I/J”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]";Postprosessor-malfil
Section titled “Postprosessor-malfil”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.