QCAD/CAM 포스트프로세서
QCAD/CAM은 CAD 도면을 CAM(컴퓨터 지원 제조)에서 사용되는 다양한 형식으로 내보낼 수 있습니다. 이러한 형식은 G-Code의 방언이거나 완전히 다른 형식일 수 있습니다. 지원되는 각 CAM 형식은 형식 세부 사항을 구현하는 ECMAScript(JavaScript) 파일인 구성 파일(또는 “포스트프로세서”)에 정의됩니다. 사용 가능한 모든 구성은 postprocessors 디렉터리 안에 저장됩니다. 새 형식 구현은 동일한 위치에 추가할 수 있습니다.
기본 구조
섹션 제목: “기본 구조”각 구성 파일에는 스크립트 파일과 동일한 이름의 ECMAScript 클래스가 포함되어 있습니다. 스크립트 파일 이름이 MyGCode.js인 경우 스크립트 내부에 정의된 클래스 이름은 MyGCode여야 합니다.
ECMAScript 클래스는 QCAD/CAM에서 정의한 클래스 CamExporterV2에서 직접 또는 간접적으로 파생되어야 합니다. CamExporterV2는 CAM 내보내기 구성 클래스의 기본 구조를 정의합니다. CamExporterV2의 다양한 메서드는 파일 헤더, CAD 도면의 다양한 엔티티 및 푸터를 내보내기 위해 호출됩니다. CamExporterV2는 또한 공구 반경 보정, 리드 인 / 리드 아웃, 외부 윤곽 이전에 내부 윤곽 절단, 경로 최적화 등 QCAD/CAM의 다양한 기능을 처리합니다.
CamExporterV2는 자체적으로는 아무것도 출력하지 않으며 단독으로는 빈 파일을 생성합니다. CamExporterV2는 내보낸 파일에 쓰기 위한 텍스트 스트림(QTextStream)을 제공합니다. 이 텍스트 스트림은 멤버 변수 this.stream을 통해 노출됩니다.
원하는 출력이 G-Code 방언(예: 선형 이동을 위한 G1 X10 Y20)인 경우 구성은 GCodeBase.js 파일에 정의된 GCodeBase라는 기존 G-Code 구성에서 파생될 수 있습니다. 이는 대부분의 기계 컨트롤러에 해당합니다. 밀리미터로 G-Code를 출력하는 이러한 예제 구성 중 하나는 GCodeMM.js 파일에 정의되어 있으며 사용자 인터페이스에서 G-Code (G41/G42) [mm]라는 구성으로 사용할 수 있습니다.
GCodeBase에서 구성 파생하기
섹션 제목: “GCodeBase에서 구성 파생하기”원하는 고유한 이름의 파일을 만듭니다. 이 예에서는 새 구성을 MyGCode라고 이름 짓고 동일한 이름의 파일, 즉 QCAD/CAM 설치의 postprocessors 디렉터리 아래에 MyGCode.js에 저장합니다.
파일을 만들고 작성하려면 선호하는 일반 텍스트 편집기(예: Windows의 Notepad, macOS의 TextEdit 또는 Linux 시스템의 vim, Emacs 등)를 사용할 수 있습니다.
MyGCode.js는 QCAD/CAM에 대한 유효한 구성이 되려면 MyGCode라는 클래스를 정의해야 합니다. 엄밀히 말하면 ECMAScript에는 클래스가 없지만, 생성자 함수의 프로토타입 객체에 함수를 연결하여 유사한 개념을 만들 수 있습니다. 이것이 정확히 어떻게 작동하는지는 이 문서의 범위를 벗어납니다. 그러나 모든 구성 파일에 사용할 수 있는 간단한 템플릿이 있습니다.
우리 예에서 클래스 MyGCode의 정의는 다음과 같습니다(//로 시작하는 줄은 주석이며 필수가 아님에 유의하세요).
// 우리 자신의 구성을 위한 기반으로 사용되는// 클래스 'GCodeBase'를 포함하는 GCodeBase.js를 포함합니다:include("GCodeBase.js");
// 우리 클래스의 생성자:function MyGCode(documentInterface, newDocumentInterface) { // 기본 클래스의 생성자를 호출합니다: GCodeBase.call(this, documentInterface, newDocumentInterface);}
// 우리 클래스를 클래스 GCodeBase에서 파생합니다:MyGCode.prototype = new GCodeBase();
// 사용자 인터페이스에 표시되는 표시 이름:MyGCode.displayName = "My G-Code";이제 QCAD/CAM에서 사용할 준비가 되어 있고 기본 G-Code를 생성하는 “My G-Code”라는 새롭고 완전히 작동하는 구성을 만들었습니다.
구성 기본 설정
섹션 제목: “구성 기본 설정”위에서 정의한 생성자는 기본 클래스 GCodeBase의 생성자를 호출합니다. 생성자에서 원하는 출력 단위 또는 공구 반경 보정에 G41/G42를 사용할지 아니면 공구 경로의 중심을 계산할지와 같은 구성의 일부 매개변수를 설정할 수 있습니다.
출력 단위(기계나 컨트롤러가 기대하는 단위)를 구성하려면 멤버 변수 unit을 Inch 또는 Millimeter로 설정할 수 있습니다. 예를 들면:
this.unit = RS.Inch;또는
this.unit = RS.Millimeter;생성자에서 구성할 수 있는 다른 설정은 다음과 같습니다.
| 변수 | 가능한 값 | 기본값 | 설명 |
|---|---|---|---|
this.outputOffsetPath |
true 또는 false | false | G41/G42를 사용하는 대신 공구 반경 보정을 계산하려면 true로 설정합니다. |
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 출력 정의하기
섹션 제목: “G-Code 출력 정의하기”코드 블록
섹션 제목: “코드 블록”G-Code 출력은 QCAD/CAM에서 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 |
이러한 코드 블록 중 다수는 일반적으로 사용되지 않으며 출력을 생성하지 않습니다(빈 코드 블록).
| 멤버 변수 | 변수 이름 | 설명 |
|---|---|---|
| inputFileName | INFILENAME | 입력 파일 이름(예: DXF 파일). |
| inputFilePath | INFILEPATH | 전체 경로가 포함된 입력 파일 이름. |
| fileName | FILENAME | 출력 파일 이름. |
| filePath | FILEPATH | 전체 경로가 포함된 출력 파일 이름. |
| dateTime | DATETIME | 내보내기 날짜 및 시간. |
| lineNumber | N | 현재 줄 번호. |
| spindleSpeed | S | 스핀들 속도, 일반적으로 rpm. |
| 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 |
헤더 및 푸터 변경하기
섹션 제목: “헤더 및 푸터 변경하기”헤더 또는 푸터에 G-Code 또는 M-Code 또는 기타 정보를 추가하거나 변경하려면 구성이 생성자에서 멤버 변수 header 및 footer를 재정의할 수 있습니다. 예를 들면 다음과 같습니다.
this.header = [ "[N] G0 Z100" ];this.footer = [ "[N] G0 Z100", "[N] M30" ];절대 I/J
섹션 제목: “절대 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]";포스트프로세서 템플릿 파일
섹션 제목: “포스트프로세서 템플릿 파일”QCAD/CAM은 포스트프로세서를 설정하거나 전환할 때 포스트프로세서 파일과 동일한 이름의 DXF 템플릿 파일(사용 가능한 경우)을 자동으로 병합합니다. 포스트프로세서가 postprocessors/MyGCode.js에 구현된 “MyGCode”라고 가정해 보겠습니다. postprocessors/MyGCode.dxf에 공구 정의가 있는 DXF 파일을 만듭니다. 이 파일에는 공구 정의, 기본 레이어 또는 사용 가능한 표면 영역의 윤곽이 포함될 수 있습니다. 참고: 템플릿 파일의 모든 표시 가능한 내용은 병합 시 자동으로 잠긴 레이어에 배치되므로 표시만 되고 선택할 수는 없습니다.