콘텐츠로 이동

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]라는 구성으로 사용할 수 있습니다.

원하는 고유한 이름의 파일을 만듭니다. 이 예에서는 새 구성을 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 출력은 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 값에 절대값을 사용하려면 다음과 같이 호 코드 블록을 재정의할 수 있습니다.

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 파일을 만듭니다. 이 파일에는 공구 정의, 기본 레이어 또는 사용 가능한 표면 영역의 윤곽이 포함될 수 있습니다. 참고: 템플릿 파일의 모든 표시 가능한 내용은 병합 시 자동으로 잠긴 레이어에 배치되므로 표시만 되고 선택할 수는 없습니다.