Przejdź do głównej zawartości

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.

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

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.

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

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

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

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

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

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.