โพสต์โปรเซสเซอร์ QCAD/CAM
QCAD/CAM สามารถส่งออกแบบวาด CAD ไปยังรูปแบบต่าง ๆ ที่ใช้ใน CAM (การผลิตด้วยความช่วยเหลือของคอมพิวเตอร์) รูปแบบเหล่านี้อาจเป็นภาษาถิ่นของ G-Code หรือรูปแบบอื่น ๆ ที่แตกต่างกันโดยสิ้นเชิง แต่ละรูปแบบ CAM ที่รองรับถูกกำหนดในไฟล์การกำหนดค่า (หรือ “โพสต์โปรเซสเซอร์”) ซึ่งเป็นไฟล์ ECMAScript (JavaScript) ที่ใช้รายละเอียดของรูปแบบ การกำหนดค่าที่พร้อมใช้งานทั้งหมดจะถูกจัดเก็บภายในไดเรกทอรี postprocessors การใช้งานรูปแบบใหม่สามารถเพิ่มในตำแหน่งเดียวกัน
โครงสร้างพื้นฐาน
Section titled “โครงสร้างพื้นฐาน”แต่ละไฟล์การกำหนดค่ามีคลาส ECMAScript ที่มีชื่อเดียวกับไฟล์สคริปต์ หากไฟล์สคริปต์ชื่อ MyGCode.js คลาสที่กำหนดภายในสคริปต์ต้องชื่อ MyGCode
คลาส ECMAScript ต้องได้รับการสืบทอดโดยตรงหรือโดยอ้อมจากคลาส CamExporterV2 ซึ่งกำหนดโดย QCAD/CAM CamExporterV2 กำหนดโครงสร้างพื้นฐานของคลาสการกำหนดค่าตัวส่งออก CAM เมธอดต่าง ๆ ใน CamExporterV2 ถูกเรียกเพื่อส่งออกส่วนหัวไฟล์ เอนทิตีต่าง ๆ ในแบบวาด CAD และส่วนท้าย CamExporterV2 ยังดูแลคุณสมบัติต่าง ๆ ของ QCAD/CAM เช่น การชดเชยรัศมีเครื่องมือ การนำเข้า / นำออก การตัดเส้นชั้นในก่อนเส้นชั้นนอก การเพิ่มประสิทธิภาพเส้นทาง ฯลฯ
CamExporterV2 ไม่ได้ส่งออกอะไรด้วยตัวเอง แต่จะสร้างไฟล์เปล่าด้วยตัวเอง CamExporterV2 เสนอสตรีมข้อความ (QTextStream) เพื่อเขียนไปยังไฟล์ที่ส่งออก สตรีมข้อความนี้เปิดเผยผ่านตัวแปรสมาชิก this.stream
หากเอาต์พุตที่ต้องการเป็นภาษาถิ่นของ G-Code (เช่น G1 X10 Y20 สำหรับการเคลื่อนที่เชิงเส้น) การกำหนดค่าสามารถสืบทอดจากการกำหนดค่าที่มีอยู่สำหรับ G-Code ที่ชื่อ GCodeBase ซึ่งกำหนดในไฟล์ GCodeBase.js นี่เป็นกรณีสำหรับตัวควบคุมเครื่องส่วนใหญ่ ตัวอย่างการกำหนดค่าหนึ่งดังกล่าวสำหรับการส่งออก G-Code เป็นมิลลิเมตรถูกกำหนดในไฟล์ GCodeMM.js และพร้อมใช้งานในส่วนติดต่อผู้ใช้เป็นการกำหนดค่าที่ชื่อ G-Code (G41/G42) [mm]
การสืบทอดการกำหนดค่าจาก GCodeBase
Section titled “การสืบทอดการกำหนดค่าจาก GCodeBase”สร้างไฟล์ที่มีชื่อเฉพาะตามที่คุณเลือก สำหรับตัวอย่างนี้ เราตั้งชื่อการกำหนดค่าใหม่ของเราว่า MyGCode และจัดเก็บในไฟล์ที่มีชื่อเดียวกัน กล่าวคือ MyGCode.js ภายใต้ไดเรกทอรี postprocessors ของการติดตั้ง QCAD/CAM ของคุณ
คุณสามารถใช้ตัวแก้ไขข้อความธรรมดาที่คุณชื่นชอบเพื่อสร้างและเขียนไฟล์ เช่น Notepad บน Windows, TextEdit บน macOS หรือ vim, Emacs ฯลฯ บนระบบ Linux
MyGCode.js ต้องกำหนดคลาสที่ชื่อ MyGCode เพื่อให้เป็นการกำหนดค่าที่ถูกต้องสำหรับ QCAD/CAM แม้ว่าโดยเคร่งครัดแล้วจะไม่มีคลาสใน ECMAScript แต่เราสามารถสร้างแนวคิดที่คล้ายกันได้โดยการแนบฟังก์ชันเข้ากับออบเจกต์ต้นแบบของฟังก์ชันตัวสร้าง วิธีการทำงานที่แน่นอนนั้นอยู่นอกขอบเขตของเอกสารนี้ อย่างไรก็ตาม มีเทมเพลตที่ตรงไปตรงมาที่คุณสามารถใช้สำหรับไฟล์การกำหนดค่าทั้งหมด
สำหรับตัวอย่างของเรา คำจำกัดความของคลาส MyGCode มีลักษณะดังนี้ (โปรดทราบว่าบรรทัดที่ขึ้นต้นด้วย // เป็นความคิดเห็นและไม่จำเป็น):
// รวม GCodeBase.js ซึ่งมีคลาส 'GCodeBase'// ใช้เป็นฐานสำหรับการกำหนดค่าของเราเอง:include("GCodeBase.js");
// ตัวสร้างของคลาสของเรา:function MyGCode(documentInterface, newDocumentInterface) { // เรียกตัวสร้างของคลาสฐาน: GCodeBase.call(this, documentInterface, newDocumentInterface);}
// สืบทอดคลาสของเราจากคลาส GCodeBase:MyGCode.prototype = new GCodeBase();
// ชื่อที่แสดงในส่วนติดต่อผู้ใช้:MyGCode.displayName = "My G-Code";ตอนนี้ เราได้สร้างการกำหนดค่าใหม่ที่ทำงานได้อย่างสมบูรณ์ที่ชื่อ “My G-Code” ซึ่งพร้อมใช้งานใน QCAD/CAM และสร้าง G-Code พื้นฐาน
การตั้งค่าการกำหนดค่า
Section titled “การตั้งค่าการกำหนดค่า”ตัวสร้างที่เราได้กำหนดไว้ด้านบนเรียกตัวสร้างของคลาสฐานของเรา GCodeBase ในตัวสร้าง เราสามารถตั้งค่าพารามิเตอร์บางอย่างสำหรับการกำหนดค่าของเรา เช่น หน่วยเอาต์พุตที่ต้องการ หรือหากเราต้องการใช้ G41/G42 สำหรับการชดเชยรัศมีเครื่องมือ หรือคำนวณจุดศูนย์กลางของเส้นทางเครื่องมือ
ในการกำหนดค่าหน่วยเอาต์พุต (นั่นคือหน่วยที่เครื่องหรือตัวควบคุมของคุณคาดหวัง) เราสามารถตั้งค่าตัวแปรสมาชิก unit เป็น Inch หรือ Millimeter เช่น:
this.unit = RS.Inch;หรือ
this.unit = RS.Millimeter;การตั้งค่าอื่น ๆ ที่สามารถกำหนดค่าในตัวสร้างได้แก่:
| ตัวแปร | ค่าที่เป็นไปได้ | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
this.outputOffsetPath |
true หรือ false | false | ตั้งค่าเป็น true เพื่อคำนวณการชดเชยรัศมีเครื่องมือแทนการใช้ G41/G42 |
this.lineNumber |
ตัวเลข | 10 | หมายเลขเริ่มต้นที่ใช้สำหรับการกำหนดหมายเลขบรรทัด (N…) |
this.lineNumberIncrement |
ตัวเลข | 10 | การเพิ่มหมายเลขบรรทัดจากบรรทัดหนึ่งไปยังอีกบรรทัด |
this.fileExtensions |
อาร์เรย์ | [ "nc", "cnc" ] |
รายการนามสกุลไฟล์ที่ผู้ใช้สามารถเลือกได้เมื่อส่งออกผ่านโพสต์โปรเซสเซอร์นี้ |
ตัวสร้างที่สมบูรณ์อาจมีลักษณะดังนี้:
function MyGCode(documentInterface, newDocumentInterface) { GCodeBase.call(this, documentInterface, newDocumentInterface);
this.unit = RS.Inch; this.outputOffsetPath = true; this.lineNumber = 1; this.lineNumberIncrement = 1;}การกำหนดเอาต์พุต G-Code
Section titled “การกำหนดเอาต์พุต G-Code”บล็อกโค้ด
Section titled “บล็อกโค้ด”เอาต์พุต G-Code มีโครงสร้างเป็นบล็อกโค้ดที่เขียนไปยังไฟล์เอาต์พุตเมื่อใช้ฟังก์ชันส่งออก CAM ใน QCAD/CAM ตัวอย่างเช่น บล็อกโค้ดแรกที่เขียนคือบล็อกโค้ด “header” แต่ละบล็อกโค้ดถูกกำหนดในตัวแปรสมาชิกที่ระบุด้วยชื่อ ตัวอย่างเช่น this.header มีบล็อกโค้ดสำหรับส่วนหัวไฟล์
บล็อกโค้ดสามารถแทนที่ได้เพื่อให้มีโค้ด/ข้อความใด ๆ บล็อกโค้ดโดยทั่วไปมีตัวแปรเพื่อส่งออกพิกัด X/Y ปัจจุบัน หมายเลขบรรทัด อัตราป้อน ฯลฯ
สมมติว่ามีเส้นเดียวถูกส่งออกไปยัง G-Code เส้นถูกส่งออกด้วยการชดเชยรัศมีเครื่องมือทางด้านซ้ายของเส้น (G41) บล็อกโค้ดที่เขียนไปยังไฟล์เอาต์พุตมีดังนี้:
| บล็อกโค้ด | คำอธิบาย | ตัวอย่างเอาต์พุต |
|---|---|---|
header |
ส่วนหัวของเอาต์พุต (บล็อกโค้ดแรกเสมอ) | G21 G17 G90 G40 G49 G80 |
rapidMoveZ |
การเคลื่อนที่อย่างรวดเร็วไปยังระดับความปลอดภัย | G0 Z100 |
rapidMove |
การเคลื่อนที่อย่างรวดเร็วไปยังตำแหน่งแรกของเส้นชั้นแรก (ที่นี่คือจุดเริ่มต้นของการนำเข้าสำหรับเส้น) | G0 X5 Y10 |
toolHeader |
บล็อกแรกเมื่อเครื่องมือใหม่เริ่มทำงาน (การเปลี่ยนเครื่องมือ) | T1 |
rapidMoveZ |
การเคลื่อนที่อย่างรวดเร็วลงไปยังระดับระยะห่าง (ลอยอยู่เหนือวัสดุ) | G0 Z5 |
firstLinearMoveZ |
การตัดเข้าไปในวัสดุที่อัตราการจุ่ม | G1 Z-5 F50 |
toolpathHeader |
บล็อกแรกของเส้นทางเครื่องมือใหม่ | |
contourHeader |
บล็อกแรกของเส้นชั้นใหม่ภายในเส้นทางเครื่องมือ | |
singleZPassHeader |
ส่วนหัวสำหรับการผ่าน Z ครั้งเดียว เราตัดความลึกทั้งหมดในการผ่านครั้งเดียว | |
zPassFirstHeader |
ส่วนหัวแรกของการผ่าน Z ครั้งเดียวหรือหลายครั้ง | |
linearMoveCompensationLeft |
การเคลื่อนที่เชิงเส้นไปยังจุดเริ่มต้นของเส้นตามการนำเข้า เปิดการชดเชยรัศมีเครื่องมือ | G41 X10 Y10 F500 |
linearMove |
การเคลื่อนที่เชิงเส้นตามเส้นไปยังจุดสิ้นสุดของเส้น | X30 Y10 |
linearMoveCompensationOff |
การเคลื่อนที่เชิงเส้นออกจากจุดสิ้นสุดตามการนำออก ปิดการชดเชยรัศมีเครื่องมือ | G40 X35 Y10 |
zPassLastFooter |
ส่วนท้ายสุดท้ายของการผ่าน Z ครั้งเดียวหรือหลายครั้ง | |
singleZPassFooter |
ส่วนท้ายสำหรับการผ่าน Z ครั้งเดียว | |
contourFooter |
จุดสิ้นสุดของเส้นชั้น | |
toolpathFooter |
จุดสิ้นสุดของเส้นทางเครื่องมือ | |
linearMoveZ |
การเคลื่อนที่ออกจากวัสดุไปยังระดับระยะห่าง | Z5 |
rapidMoveZ |
การเคลื่อนที่ไปยังระดับความปลอดภัย | G0 Z100 |
toolFooter |
จุดสิ้นสุดสำหรับเครื่องมือนี้ | |
footer |
จุดสิ้นสุดของโปรแกรม | M30 |
บล็อกโค้ดเหล่านี้จำนวนมากโดยทั่วไปไม่ได้ใช้และไม่สร้างเอาต์พุต (บล็อกโค้ดว่างเปล่า)
ตัวแปร
Section titled “ตัวแปร”| ตัวแปรสมาชิก | ชื่อตัวแปร | คำอธิบาย |
|---|---|---|
| inputFileName | INFILENAME | ชื่อไฟล์อินพุต (เช่น ไฟล์ DXF) |
| inputFilePath | INFILEPATH | ชื่อไฟล์อินพุตพร้อมเส้นทางที่สมบูรณ์ |
| fileName | FILENAME | ชื่อไฟล์เอาต์พุต |
| filePath | FILEPATH | ชื่อไฟล์เอาต์พุตพร้อมเส้นทางที่สมบูรณ์ |
| dateTime | DATETIME | วันที่และเวลาของการส่งออก |
| lineNumber | N | หมายเลขบรรทัดปัจจุบัน |
| spindleSpeed | S | ความเร็วสปินเดิล โดยทั่วไปคือ รอบ/นาที |
| feedRate | F | อัตราป้อน |
| plungeRate | FP | อัตราการจุ่ม |
| xHomePosition | XH | ตำแหน่งโฮมตามที่กำหนดค่าในการกำหนดค่า CAM |
| yHomePosition | YH | |
| zHomePosition | ZH | |
| zSafety | ZS | ระดับความปลอดภัย Z สำหรับการเปลี่ยนเครื่องมือและการเริ่ม/สิ้นสุด |
| zClearance | ZU | ระดับระยะห่าง Z สำหรับการเข้าใกล้วัสดุ |
| zClearancePass | ZUP | ระดับระยะห่าง Z ระหว่างการผ่านหลายครั้ง |
| zCuttingDepth | ZD | ระดับการตัด Z (รวม) |
| xFirstPosition | XF | ตำแหน่งแรกของเส้นชั้นแรกในเส้นทางเครื่องมือแรก |
| yFirstPosition | YF | |
| xStartPosition | X1 | จุดเริ่มต้นของเอนทิตี (จุดเริ่มต้นของเส้น/ส่วนโค้ง) |
| yStartPosition | Y1 | |
| zStartPosition | Z1 | |
| xPosition | X | ตำแหน่งเป้าหมายปัจจุบัน จุดสิ้นสุดของเส้น/ส่วนโค้งปัจจุบัน |
| yPosition | Y | |
| zPosition | Z | |
| xRelPosition | XR | ตำแหน่งเป้าหมายปัจจุบันเป็นพิกัดสัมพัทธ์ เทียบกับจุดเริ่มต้น |
| yRelPosition | YR | |
| zRelPosition | ZR | |
| iArcCenterInc | I | จุดศูนย์กลางของส่วนโค้ง เทียบกับจุดเริ่มต้น |
| jArcCenterInc | J | |
| iArcCenterAbs | IA | จุดศูนย์กลางของส่วนโค้ง แบบสัมบูรณ์ |
| jArcCenterAbs | JA | |
| arcRadius | RADIUS | รัศมีของส่วนโค้ง |
| arcDiameter | DIAMETER | เส้นผ่านศูนย์กลางของส่วนโค้ง |
| arcSweep | SWEEP | การกวาดของส่วนโค้ง (มุมที่ส่วนโค้งครอบคลุมเป็นเรเดียน ลบสำหรับตามเข็มนาฬิกา) |
| tool | T | เครื่องมือปัจจุบัน |
| toolRadius | TR | รัศมีเครื่องมือ |
| toolDiameter | TD | เส้นผ่านศูนย์กลางเครื่องมือ |
| toolpathOrder | TOOLPATH_ORDER | ลำดับเส้นทางเครื่องมือในรายการเส้นทางเครื่องมือ โดยเริ่มด้วย 0 สำหรับเส้นทางเครื่องมือแรก |
| toolCalls | TOOL_CALLS | จำนวนครั้งที่ใช้เครื่องมือนี้ |
| toolpathName | TOOLPATH_NAME | ชื่อของเส้นทางเครื่องมือปัจจุบัน (กำหนดโดยผู้ใช้) |
| programName | PROGRAM_NAME | ชื่อโปรแกรมตามที่ผู้ใช้กำหนดค่าในการกำหนดค่า CAM |
| xMin | X_MIN | ขอบเขตต่ำสุดของแบบวาด |
| yMin | Y_MIN | |
| zMin | Z_MIN | |
| xMax | X_MAX | ขอบเขตสูงสุดของแบบวาด |
| yMax | Y_MAX | |
| zMax | Z_MAX |
ตัวอย่าง
Section titled “ตัวอย่าง”การเปลี่ยนส่วนหัวและส่วนท้าย
Section titled “การเปลี่ยนส่วนหัวและส่วนท้าย”ในการเพิ่มหรือเปลี่ยน G-Codes หรือ M-Codes หรือข้อมูลอื่น ๆ ในส่วนหัวหรือส่วนท้าย การกำหนดค่าสามารถแทนที่ตัวแปรสมาชิก header และ footer ในตัวสร้าง ตัวอย่างเช่นดังนี้:
this.header = [ "[N] G0 Z100" ];this.footer = [ "[N] G0 Z100", "[N] M30" ];I/J สัมบูรณ์
Section titled “I/J สัมบูรณ์”ในการใช้ค่าสัมบูรณ์สำหรับค่า I/J สำหรับจุดศูนย์กลางของส่วนโค้ง คุณสามารถแทนที่บล็อกโค้ดส่วนโค้งดังนี้:
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]";ไฟล์เทมเพลตโพสต์โปรเซสเซอร์
Section titled “ไฟล์เทมเพลตโพสต์โปรเซสเซอร์”QCAD/CAM ผสานไฟล์เทมเพลต DXF ที่มีชื่อเดียวกับไฟล์โพสต์โปรเซสเซอร์โดยอัตโนมัติ (หากมี) เมื่อตั้งค่าหรือสลับโพสต์โปรเซสเซอร์ สมมติว่าโพสต์โปรเซสเซอร์ชื่อ “MyGCode” ใช้งานใน postprocessors/MyGCode.js สร้างไฟล์ DXF พร้อมคำจำกัดความเครื่องมือใน postprocessors/MyGCode.dxf ไฟล์นี้อาจมีคำจำกัดความเครื่องมือ เลเยอร์เริ่มต้น หรือเส้นขอบของพื้นที่ผิวที่ใช้ได้ หมายเหตุ: เนื้อหาที่มองเห็นได้ใด ๆ ของไฟล์เทมเพลตจะถูกวางบนเลเยอร์ที่ล็อกโดยอัตโนมัติเมื่อผสาน ดังนั้นจึงมองเห็นได้เท่านั้นแต่ไม่สามารถเลือกได้