Postprocesor QCAD/CAM
QCAD/CAM może eksportować rysunki CAD do różnych formatów używanych w CAM (wytwarzanie wspomagane komputerowo). Formaty te mogą być dialektami G-Code lub innymi, całkowicie różnymi formatami. Każdy obsługiwany format CAM jest zdefiniowany w pliku konfiguracyjnym (lub „postprocesorze”), który jest plikiem ECMAScript (JavaScript) implementującym szczegóły formatu. Wszystkie dostępne konfiguracje są przechowywane w katalogu postprocessors. Nowe implementacje formatów można dodawać w tym samym miejscu.
Podstawowa struktura
Dział zatytułowany „Podstawowa struktura”Każdy plik konfiguracyjny zawiera klasę ECMAScript o tej samej nazwie co plik skryptu. Jeśli plik skryptu nazywa się MyGCode.js, klasa zdefiniowana wewnątrz skryptu musi nazywać się MyGCode.
Klasa ECMAScript musi być bezpośrednio lub pośrednio wyprowadzona z klasy CamExporterV2, która jest zdefiniowana przez QCAD/CAM. CamExporterV2 definiuje podstawową strukturę klas konfiguracyjnych eksportera CAM. Różne metody w CamExporterV2 są wywoływane w celu wyeksportowania nagłówka pliku, różnych obiektów w rysunku CAD i stopki. CamExporterV2 zajmuje się również różnymi funkcjami QCAD/CAM, na przykład kompensacją promienia narzędzia, wejściem / wyjściem, cięciem konturów wewnętrznych przed konturami zewnętrznymi, optymalizacją ścieżki itp.
CamExporterV2 sam z siebie niczego nie wyprowadza, ale sam produkowałby pusty plik. CamExporterV2 oferuje strumień tekstowy (QTextStream) do zapisu w eksportowanym pliku. Ten strumień tekstowy jest udostępniany przez zmienną składową this.stream.
Jeśli pożądanym wyjściem jest dialekt G-Code (np. G1 X10 Y20 dla ruchu liniowego), konfigurację można wyprowadzić z istniejącej konfiguracji dla G-Code o nazwie GCodeBase, która jest zdefiniowana w pliku GCodeBase.js. Tak jest w przypadku większości sterowników maszyn. Jedna taka przykładowa konfiguracja do wyprowadzania G-Code w milimetrach jest zdefiniowana w pliku GCodeMM.js i dostępna w interfejsie użytkownika jako konfiguracja o nazwie G-Code (G41/G42) [mm].
Wyprowadzanie konfiguracji z GCodeBase
Dział zatytułowany „Wyprowadzanie konfiguracji z GCodeBase”Utwórz plik o unikalnej nazwie według własnego wyboru. W tym przykładzie nazywamy naszą nową konfigurację MyGCode i przechowujemy ją w pliku o tej samej nazwie, tj. MyGCode.js w katalogu postprocessors twojej instalacji QCAD/CAM.
Do utworzenia i napisania pliku możesz użyć ulubionego edytora zwykłego tekstu, na przykład Notatnika w systemie Windows, TextEdit w systemie macOS lub vim, Emacs itp. w systemach Linux.
MyGCode.js musi zdefiniować klasę o nazwie MyGCode, aby być prawidłową konfiguracją dla QCAD/CAM. Chociaż ściśle rzecz biorąc w ECMAScript nie ma klas, możemy stworzyć podobną koncepcję, dołączając funkcje do obiektu prototypu funkcji konstruktora. Jak dokładnie to działa, wykracza poza zakres tej dokumentacji. Istnieje jednak prosty szablon, którego możesz użyć dla wszystkich plików konfiguracyjnych.
W naszym przykładzie definicja klasy MyGCode wygląda tak (zwróć uwagę, że wiersze zaczynające się od // są komentarzami i nie są wymagane):
// Dołącz GCodeBase.js, który zawiera klasę 'GCodeBase',// używaną jako baza dla naszej własnej konfiguracji:include("GCodeBase.js");
// Konstruktor naszej klasy:function MyGCode(documentInterface, newDocumentInterface) { // Wywołaj konstruktor klasy bazowej: GCodeBase.call(this, documentInterface, newDocumentInterface);}
// Wyprowadź naszą klasę z klasy GCodeBase:MyGCode.prototype = new GCodeBase();
// Nazwa wyświetlana pokazywana w interfejsie użytkownika:MyGCode.displayName = "My G-Code";Teraz utworzyliśmy nową, w pełni działającą konfigurację o nazwie „My G-Code”, która jest gotowa do użycia w QCAD/CAM i produkuje podstawowy G-Code.
Preferencje konfiguracji
Dział zatytułowany „Preferencje konfiguracji”Konstruktor, który zdefiniowaliśmy powyżej, wywołuje konstruktor naszej klasy bazowej GCodeBase. W konstruktorze możemy ustawić niektóre parametry dla naszej konfiguracji, takie jak żądana jednostka wyjściowa lub czy chcemy użyć G41/G42 do kompensacji promienia narzędzia, czy obliczyć środek ścieżki narzędzia.
Aby skonfigurować jednostkę wyjściową (to jednostka oczekiwana przez twoją maszynę lub sterownik), możemy ustawić zmienną składową unit na Inch lub Millimeter, na przykład:
this.unit = RS.Inch;lub
this.unit = RS.Millimeter;Inne ustawienia, które można skonfigurować w konstruktorze, to:
| Zmienna | Możliwe wartości | Domyślnie | Opis |
|---|---|---|---|
this.outputOffsetPath |
true lub false | false | Ustaw na true, aby obliczyć kompensację promienia narzędzia zamiast używać G41/G42. |
this.lineNumber |
Liczba | 10 | Liczba początkowa używana do numerowania wierszy (N…). |
this.lineNumberIncrement |
Liczba | 10 | Przyrost numeru wiersza z wiersza na wiersz. |
this.fileExtensions |
Tablica | [ "nc", "cnc" ] |
Lista rozszerzeń plików, spośród których użytkownik może wybierać podczas eksportowania przez ten postprocesor. |
Kompletny konstruktor może wyglądać tak:
function MyGCode(documentInterface, newDocumentInterface) { GCodeBase.call(this, documentInterface, newDocumentInterface);
this.unit = RS.Inch; this.outputOffsetPath = true; this.lineNumber = 1; this.lineNumberIncrement = 1;}Definiowanie wyjścia G-Code
Dział zatytułowany „Definiowanie wyjścia G-Code”Bloki kodu
Dział zatytułowany „Bloki kodu”Wyjście G-Code jest ustrukturyzowane w bloki kodu, które są zapisywane do pliku wyjściowego podczas używania funkcji eksportu CAM w QCAD/CAM. Na przykład pierwszym zapisywanym blokiem kodu jest blok kodu „header”. Każdy blok kodu jest zdefiniowany w zmiennej składowej, która identyfikuje go po nazwie, na przykład this.header zawiera blok kodu dla nagłówka pliku.
Bloki kodu można nadpisać, aby zawierały dowolny kod / tekst. Bloki kodu zwykle zawierają zmienne do wyprowadzania bieżących współrzędnych X/Y, numeru wiersza, prędkości posuwu itp.
Powiedzmy, że pojedyncza linia jest eksportowana do G-Code. Linia jest eksportowana z kompensacją promienia narzędzia po lewej stronie linii (G41). Bloki kodu zapisywane do pliku wyjściowego są następujące:
| Blok kodu | Opis | Przykładowe wyjście |
|---|---|---|
header |
Nagłówek wyjścia (zawsze pierwszy blok kodu). | G21 G17 G90 G40 G49 G80 |
rapidMoveZ |
Szybki ruch do poziomu bezpieczeństwa. | G0 Z100 |
rapidMove |
Szybki ruch do pierwszej pozycji pierwszego konturu (tutaj początek wejścia dla linii). | G0 X5 Y10 |
toolHeader |
Pierwszy blok, gdy nowe narzędzie wchodzi do akcji (zmiana narzędzia). | T1 |
rapidMoveZ |
Szybki ruch w dół do poziomu prześwitu (unoszenie się nad materiałem). | G0 Z5 |
firstLinearMoveZ |
Cięcie w materiał z prędkością zagłębiania. | G1 Z-5 F50 |
toolpathHeader |
Pierwszy blok nowej ścieżki narzędzia. | |
contourHeader |
Pierwszy blok nowego konturu w ścieżce narzędzia. | |
singleZPassHeader |
Nagłówek dla pojedynczego przejścia Z. Wycinamy całą głębokość w jednym przejściu. | |
zPassFirstHeader |
Pierwszy nagłówek pojedynczego lub wielu przejść Z. | |
linearMoveCompensationLeft |
Ruch liniowy do punktu początkowego linii wzdłuż wejścia, włączenie kompensacji promienia narzędzia. | G41 X10 Y10 F500 |
linearMove |
Ruch liniowy wzdłuż linii do punktu końcowego linii. | X30 Y10 |
linearMoveCompensationOff |
Ruch liniowy od punktu końcowego wzdłuż wyjścia, wyłączenie kompensacji promienia narzędzia. | G40 X35 Y10 |
zPassLastFooter |
Ostatnia stopka pojedynczego lub kilku przejść Z. | |
singleZPassFooter |
Stopka dla pojedynczego przejścia Z. | |
contourFooter |
Koniec konturu. | |
toolpathFooter |
Koniec ścieżki narzędzia. | |
linearMoveZ |
Ruch poza materiał do poziomu prześwitu. | Z5 |
rapidMoveZ |
Ruch do poziomu bezpieczeństwa. | G0 Z100 |
toolFooter |
Koniec dla tego narzędzia. | |
footer |
Koniec programu. | M30 |
Wiele z tych bloków kodu jest zwykle nieużywanych i nie produkuje wyjścia (pusty blok kodu).
Zmienne
Dział zatytułowany „Zmienne”| Zmienna składowa | Nazwa zmiennej | Opis |
|---|---|---|
| inputFileName | INFILENAME | Nazwa pliku wejściowego (np. plik DXF). |
| inputFilePath | INFILEPATH | Nazwa pliku wejściowego z pełną ścieżką. |
| fileName | FILENAME | Nazwa pliku wyjściowego. |
| filePath | FILEPATH | Nazwa pliku wyjściowego z pełną ścieżką. |
| dateTime | DATETIME | Data i godzina eksportu. |
| lineNumber | N | Bieżący numer wiersza. |
| spindleSpeed | S | Prędkość wrzeciona, zwykle obr./min. |
| feedRate | F | Prędkość posuwu. |
| plungeRate | FP | Prędkość zagłębiania. |
| xHomePosition | XH | Pozycja bazowa skonfigurowana w konfiguracji CAM. |
| yHomePosition | YH | |
| zHomePosition | ZH | |
| zSafety | ZS | Poziom bezpieczeństwa Z dla zmian narzędzi i początku / końca. |
| zClearance | ZU | Poziom prześwitu Z do zbliżania się do materiału. |
| zClearancePass | ZUP | Poziom prześwitu Z między wieloma przejściami. |
| zCuttingDepth | ZD | Poziom cięcia Z (całkowity). |
| xFirstPosition | XF | Pierwsza pozycja pierwszego konturu w pierwszej ścieżce narzędzia. |
| yFirstPosition | YF | |
| xStartPosition | X1 | Początek obiektu (punkt początkowy linii / łuku). |
| yStartPosition | Y1 | |
| zStartPosition | Z1 | |
| xPosition | X | Bieżąca pozycja docelowa. Punkt końcowy bieżącej linii / łuku. |
| yPosition | Y | |
| zPosition | Z | |
| xRelPosition | XR | Bieżąca pozycja docelowa jako współrzędna względna, względem punktu początkowego. |
| yRelPosition | YR | |
| zRelPosition | ZR | |
| iArcCenterInc | I | Środek łuku, względem punktu początkowego. |
| jArcCenterInc | J | |
| iArcCenterAbs | IA | Środek łuku, bezwzględny. |
| jArcCenterAbs | JA | |
| arcRadius | RADIUS | Promień łuku. |
| arcDiameter | DIAMETER | Średnica łuku. |
| arcSweep | SWEEP | Zakres łuku (kąt objęty przez łuk w rad, ujemny dla zgodnie z ruchem wskazówek zegara). |
| tool | T | Bieżące narzędzie. |
| toolRadius | TR | Promień narzędzia. |
| toolDiameter | TD | Średnica narzędzia. |
| toolpathOrder | TOOLPATH_ORDER | Kolejność ścieżki narzędzia na liście ścieżek narzędzia, zaczynając od 0 dla pierwszej ścieżki narzędzia. |
| toolCalls | TOOL_CALLS | Liczba razy, kiedy to narzędzie zostało użyte. |
| toolpathName | TOOLPATH_NAME | Nazwa bieżącej ścieżki narzędzia (zdefiniowana przez użytkownika). |
| programName | PROGRAM_NAME | Nazwa programu skonfigurowana przez użytkownika w konfiguracji CAM. |
| xMin | X_MIN | Minimalne granice rysunku. |
| yMin | Y_MIN | |
| zMin | Z_MIN | |
| xMax | X_MAX | Maksymalne granice rysunku. |
| yMax | Y_MAX | |
| zMax | Z_MAX |
Przykłady
Dział zatytułowany „Przykłady”Zmiana nagłówka i stopki
Dział zatytułowany „Zmiana nagłówka i stopki”Aby dodać lub zmienić G-Codes lub M-Codes lub inne informacje w nagłówku lub stopce, konfiguracja może nadpisać zmienne składowe header i footer w konstruktorze, na przykład w następujący sposób:
this.header = [ "[N] G0 Z100" ];this.footer = [ "[N] G0 Z100", "[N] M30" ];Bezwzględne I/J
Dział zatytułowany „Bezwzględne I/J”Aby użyć wartości bezwzględnych dla wartości I/J dla środka łuków, możesz nadpisać bloki kodu łuku w następujący sposób:
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]";Plik szablonu postprocesora
Dział zatytułowany „Plik szablonu postprocesora”QCAD/CAM automatycznie scala plik szablonu DXF o tej samej nazwie co plik postprocesora (jeśli dostępny) podczas ustawiania lub przełączania postprocesora. Powiedzmy, że postprocesor nazywa się „MyGCode”, zaimplementowany w postprocessors/MyGCode.js. Utwórz plik DXF z definicjami narzędzi w postprocessors/MyGCode.dxf. Ten plik może zawierać definicje narzędzi, domyślne warstwy lub zarys dostępnej powierzchni. Uwaga: Każda widoczna zawartość pliku szablonu jest automatycznie umieszczana na zablokowanej warstwie podczas scalania, więc jest tylko widoczna, ale nie do wybrania.