Bộ hậu xử lý QCAD/CAM
QCAD/CAM có thể xuất các bản vẽ CAD sang nhiều định dạng được dùng trong CAM (sản xuất có sự hỗ trợ của máy tính). Các định dạng này có thể là các phương ngữ của G-Code hoặc các định dạng khác hoàn toàn khác biệt. Mỗi định dạng CAM được hỗ trợ được định nghĩa trong một tệp cấu hình (hoặc “bộ hậu xử lý”) là một tệp ECMAScript (JavaScript) triển khai các chi tiết của định dạng. Tất cả các cấu hình có sẵn được lưu trữ bên trong thư mục postprocessors. Các triển khai định dạng mới có thể được thêm vào cùng vị trí đó.
Cấu trúc cơ bản
Section titled “Cấu trúc cơ bản”Mỗi tệp cấu hình chứa một lớp ECMAScript có cùng tên với tệp tập lệnh. Nếu tệp tập lệnh có tên MyGCode.js, lớp được định nghĩa bên trong tập lệnh phải có tên MyGCode.
Lớp ECMAScript phải kế thừa trực tiếp hoặc gián tiếp từ lớp CamExporterV2, được định nghĩa bởi QCAD/CAM. CamExporterV2 định nghĩa cấu trúc cơ bản của các lớp cấu hình bộ xuất CAM. Nhiều phương thức khác nhau trong CamExporterV2 được gọi để xuất phần đầu tệp, các đối tượng khác nhau trong bản vẽ CAD và phần chân. CamExporterV2 cũng xử lý các tính năng khác nhau của QCAD/CAM, ví dụ như bù bán kính dao, dẫn vào / dẫn ra, cắt các đường bao trong trước các đường bao ngoài, tối ưu hóa đường đi, v.v.
CamExporterV2 tự nó không xuất bất cứ thứ gì, mà sẽ tạo ra một tệp trống. CamExporterV2 cung cấp một luồng văn bản (QTextStream) để ghi vào tệp được xuất. Luồng văn bản này được hiển thị thông qua biến thành viên this.stream.
Nếu đầu ra mong muốn là một phương ngữ G-Code (ví dụ G1 X10 Y20 cho chuyển động tuyến tính), cấu hình có thể được kế thừa từ cấu hình hiện có cho G-Code có tên GCodeBase, được định nghĩa trong tệp GCodeBase.js. Đây là trường hợp của hầu hết các bộ điều khiển máy. Một cấu hình ví dụ như vậy để xuất G-Code theo Milimét được định nghĩa trong tệp GCodeMM.js và có sẵn trong giao diện người dùng dưới dạng cấu hình có tên G-Code (G41/G42) [mm].
Kế thừa cấu hình từ GCodeBase
Section titled “Kế thừa cấu hình từ GCodeBase”Tạo một tệp với tên duy nhất do bạn chọn. Đối với ví dụ này, chúng ta đặt tên cấu hình mới của mình là MyGCode và lưu trữ nó trong một tệp có cùng tên, tức là MyGCode.js trong thư mục postprocessors của bản cài đặt QCAD/CAM của bạn.
Bạn có thể sử dụng trình soạn thảo văn bản thuần yêu thích của mình để tạo và viết tệp, ví dụ Notepad trên Windows, TextEdit trên macOS hoặc vim, Emacs, v.v. trên các hệ thống Linux.
MyGCode.js phải định nghĩa một lớp có tên MyGCode để là một cấu hình hợp lệ cho QCAD/CAM. Mặc dù nói một cách nghiêm ngặt thì không có lớp trong ECMAScript, chúng ta có thể tạo một khái niệm tương tự bằng cách gắn các hàm vào đối tượng nguyên mẫu của một hàm khởi tạo. Cách này hoạt động chính xác như thế nào nằm ngoài phạm vi của tài liệu này. Tuy nhiên, có một mẫu đơn giản mà bạn có thể sử dụng cho tất cả các tệp cấu hình.
Đối với ví dụ của chúng ta, định nghĩa của lớp MyGCode trông như thế này (lưu ý rằng các dòng bắt đầu bằng // là chú thích và không bắt buộc):
// Bao gồm GCodeBase.js chứa lớp 'GCodeBase',// được dùng làm cơ sở cho cấu hình của riêng chúng ta:include("GCodeBase.js");
// Hàm khởi tạo của lớp chúng ta:function MyGCode(documentInterface, newDocumentInterface) { // Gọi hàm khởi tạo của lớp cơ sở: GCodeBase.call(this, documentInterface, newDocumentInterface);}
// Kế thừa lớp của chúng ta từ lớp GCodeBase:MyGCode.prototype = new GCodeBase();
// Tên hiển thị được hiển thị trong giao diện người dùng:MyGCode.displayName = "My G-Code";Bây giờ, chúng ta đã tạo một cấu hình mới, hoạt động đầy đủ có tên “My G-Code” sẵn sàng để sử dụng trong QCAD/CAM và tạo ra G-Code cơ bản.
Tùy chọn cấu hình
Section titled “Tùy chọn cấu hình”Hàm khởi tạo mà chúng ta đã định nghĩa ở trên gọi hàm khởi tạo của lớp cơ sở GCodeBase. Trong hàm khởi tạo, chúng ta có thể đặt một số tham số cho cấu hình của mình như đơn vị đầu ra mong muốn hoặc nếu chúng ta muốn sử dụng G41/G42 để bù bán kính dao hoặc tính toán tâm của đường chạy dao.
Để cấu hình đơn vị đầu ra (đó là đơn vị mà máy hoặc bộ điều khiển của bạn mong đợi), chúng ta có thể đặt biến thành viên unit thành Inch hoặc Millimeter, ví dụ:
this.unit = RS.Inch;hoặc
this.unit = RS.Millimeter;Các cài đặt khác có thể được cấu hình trong hàm khởi tạo là:
| Biến | Giá trị có thể | Mặc định | Mô tả |
|---|---|---|---|
this.outputOffsetPath |
true hoặc false | false | Đặt thành true để tính toán bù bán kính dao thay vì sử dụng G41/G42. |
this.lineNumber |
Số | 10 | Số ban đầu được dùng để đánh số dòng (N…). |
this.lineNumberIncrement |
Số | 10 | Bước tăng số dòng từ dòng này sang dòng khác. |
this.fileExtensions |
Mảng | [ "nc", "cnc" ] |
Danh sách phần mở rộng tệp mà người dùng có thể chọn khi xuất thông qua bộ hậu xử lý này. |
Một hàm khởi tạo hoàn chỉnh có thể trông như thế này:
function MyGCode(documentInterface, newDocumentInterface) { GCodeBase.call(this, documentInterface, newDocumentInterface);
this.unit = RS.Inch; this.outputOffsetPath = true; this.lineNumber = 1; this.lineNumberIncrement = 1;}Định nghĩa đầu ra G-Code
Section titled “Định nghĩa đầu ra G-Code”Khối mã
Section titled “Khối mã”Đầu ra G-Code được cấu trúc thành các khối mã được ghi vào tệp đầu ra khi sử dụng hàm xuất CAM trong QCAD/CAM. Ví dụ, khối mã đầu tiên được ghi là khối mã “header”. Mỗi khối mã được định nghĩa trong một biến thành viên xác định nó bằng tên, ví dụ this.header chứa khối mã cho phần đầu tệp.
Các khối mã có thể được ghi đè để chứa bất kỳ mã / văn bản nào. Các khối mã thường chứa các biến để xuất tọa độ X/Y hiện tại, số dòng, tốc độ tiến dao, v.v.
Giả sử một đường thẳng đơn được xuất sang G-Code. Đường thẳng được xuất với bù bán kính dao bên trái của đường thẳng (G41). Các khối mã được ghi vào tệp đầu ra như sau:
| Khối mã | Mô tả | Đầu ra ví dụ |
|---|---|---|
header |
Phần đầu của đầu ra (luôn là khối mã đầu tiên). | G21 G17 G90 G40 G49 G80 |
rapidMoveZ |
Di chuyển nhanh đến mức an toàn. | G0 Z100 |
rapidMove |
Di chuyển nhanh đến vị trí đầu tiên của đường bao đầu tiên (ở đây là điểm bắt đầu của dẫn vào cho đường thẳng). | G0 X5 Y10 |
toolHeader |
Khối đầu tiên khi một dao mới bắt đầu hoạt động (thay dao). | T1 |
rapidMoveZ |
Di chuyển nhanh xuống đến mức khoảng hở (lơ lửng trên vật liệu). | G0 Z5 |
firstLinearMoveZ |
Cắt vào vật liệu ở tốc độ đâm dao. | G1 Z-5 F50 |
toolpathHeader |
Khối đầu tiên của một đường chạy dao mới. | |
contourHeader |
Khối đầu tiên của một đường bao mới trong một đường chạy dao. | |
singleZPassHeader |
Phần đầu cho một lần chạy Z đơn. Chúng ta cắt toàn bộ độ sâu trong một lần chạy. | |
zPassFirstHeader |
Phần đầu đầu tiên của một hoặc nhiều lần chạy Z. | |
linearMoveCompensationLeft |
Di chuyển tuyến tính đến điểm bắt đầu của đường thẳng dọc theo dẫn vào, bật bù bán kính dao. | G41 X10 Y10 F500 |
linearMove |
Di chuyển tuyến tính dọc theo đường thẳng đến điểm cuối của đường thẳng. | X30 Y10 |
linearMoveCompensationOff |
Di chuyển tuyến tính ra khỏi điểm cuối dọc theo dẫn ra, tắt bù bán kính dao. | G40 X35 Y10 |
zPassLastFooter |
Phần chân cuối cùng của một hoặc nhiều lần chạy Z. | |
singleZPassFooter |
Phần chân cho một lần chạy Z đơn. | |
contourFooter |
Kết thúc đường bao. | |
toolpathFooter |
Kết thúc đường chạy dao. | |
linearMoveZ |
Di chuyển ra khỏi vật liệu đến mức khoảng hở. | Z5 |
rapidMoveZ |
Di chuyển đến mức an toàn. | G0 Z100 |
toolFooter |
Kết thúc cho dao này. | |
footer |
Kết thúc chương trình. | M30 |
Nhiều khối mã trong số này thường không được sử dụng và không tạo ra đầu ra (khối mã trống).
| Biến thành viên | Tên biến | Mô tả |
|---|---|---|
| inputFileName | INFILENAME | Tên tệp đầu vào (ví dụ tệp DXF). |
| inputFilePath | INFILEPATH | Tên tệp đầu vào với đường dẫn đầy đủ. |
| fileName | FILENAME | Tên tệp đầu ra. |
| filePath | FILEPATH | Tên tệp đầu ra với đường dẫn đầy đủ. |
| dateTime | DATETIME | Ngày và giờ xuất. |
| lineNumber | N | Số dòng hiện tại. |
| spindleSpeed | S | Tốc độ trục chính, thường là vòng/phút. |
| feedRate | F | Tốc độ tiến dao. |
| plungeRate | FP | Tốc độ đâm dao. |
| xHomePosition | XH | Vị trí gốc như được cấu hình trong cấu hình CAM. |
| yHomePosition | YH | |
| zHomePosition | ZH | |
| zSafety | ZS | Mức an toàn Z cho việc thay dao và bắt đầu / kết thúc. |
| zClearance | ZU | Mức khoảng hở Z để tiếp cận vật liệu. |
| zClearancePass | ZUP | Mức khoảng hở Z giữa nhiều lần chạy. |
| zCuttingDepth | ZD | Mức cắt Z (tổng). |
| xFirstPosition | XF | Vị trí đầu tiên của đường bao đầu tiên trong đường chạy dao đầu tiên. |
| yFirstPosition | YF | |
| xStartPosition | X1 | Điểm bắt đầu của đối tượng (điểm bắt đầu của đường thẳng / cung tròn). |
| yStartPosition | Y1 | |
| zStartPosition | Z1 | |
| xPosition | X | Vị trí đích hiện tại. Điểm cuối của đường thẳng / cung tròn hiện tại. |
| yPosition | Y | |
| zPosition | Z | |
| xRelPosition | XR | Vị trí đích hiện tại dưới dạng tọa độ tương đối, so với điểm bắt đầu. |
| yRelPosition | YR | |
| zRelPosition | ZR | |
| iArcCenterInc | I | Tâm của cung tròn, so với điểm bắt đầu. |
| jArcCenterInc | J | |
| iArcCenterAbs | IA | Tâm của cung tròn, tuyệt đối. |
| jArcCenterAbs | JA | |
| arcRadius | RADIUS | Bán kính của cung tròn. |
| arcDiameter | DIAMETER | Đường kính của cung tròn. |
| arcSweep | SWEEP | Góc quét của cung tròn (góc mà cung tròn bao phủ tính bằng rad, âm cho chiều kim đồng hồ). |
| tool | T | Dao hiện tại. |
| toolRadius | TR | Bán kính dao. |
| toolDiameter | TD | Đường kính dao. |
| toolpathOrder | TOOLPATH_ORDER | Thứ tự đường chạy dao trong danh sách đường chạy dao, bắt đầu với 0 cho đường chạy dao đầu tiên. |
| toolCalls | TOOL_CALLS | Số lần dao này đã được sử dụng. |
| toolpathName | TOOLPATH_NAME | Tên của đường chạy dao hiện tại (do người dùng định nghĩa). |
| programName | PROGRAM_NAME | Tên chương trình như được người dùng cấu hình trong cấu hình CAM. |
| xMin | X_MIN | Phạm vi tối thiểu của bản vẽ. |
| yMin | Y_MIN | |
| zMin | Z_MIN | |
| xMax | X_MAX | Phạm vi tối đa của bản vẽ. |
| yMax | Y_MAX | |
| zMax | Z_MAX |
Thay đổi phần đầu và phần chân
Section titled “Thay đổi phần đầu và phần chân”Để thêm hoặc thay đổi G-Codes hoặc M-Codes hoặc thông tin khác trong phần đầu hoặc phần chân, một cấu hình có thể ghi đè các biến thành viên header và footer trong hàm khởi tạo, ví dụ như sau:
this.header = [ "[N] G0 Z100" ];this.footer = [ "[N] G0 Z100", "[N] M30" ];I/J tuyệt đối
Section titled “I/J tuyệt đối”Để sử dụng các giá trị tuyệt đối cho các giá trị I/J cho tâm của các cung tròn, bạn có thể ghi đè các khối mã cung tròn như sau:
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]";Tệp mẫu bộ hậu xử lý
Section titled “Tệp mẫu bộ hậu xử lý”QCAD/CAM tự động hợp nhất một tệp mẫu DXF có cùng tên với tệp bộ hậu xử lý (nếu có) khi đặt hoặc chuyển đổi bộ hậu xử lý. Giả sử, bộ hậu xử lý có tên “MyGCode”, được triển khai trong postprocessors/MyGCode.js. Tạo một tệp DXF với các định nghĩa dao trong postprocessors/MyGCode.dxf. Tệp này có thể chứa các định nghĩa dao, các lớp mặc định hoặc đường viền của vùng bề mặt khả dụng. Lưu ý: Bất kỳ nội dung hiển thị nào của tệp mẫu đều được tự động đặt trên một lớp bị khóa khi hợp nhất, vì vậy nó chỉ hiển thị nhưng không thể chọn.