Skip to content

Постпроцесор на QCAD/CAM

QCAD/CAM може да експортира CAD чертежи в различни формати, използвани в CAM (компютърно подпомагано производство). Тези формати могат да бъдат диалекти на G-код или други, напълно различни формати. Всеки поддържан CAM формат е дефиниран в конфигурационен файл (или „постпроцесор”), който е ECMAScript (JavaScript) файл, реализиращ детайлите на формата. Всички налични конфигурации се съхраняват в директорията postprocessors. Нови реализации на формати могат да бъдат добавени на същото място.

Всеки конфигурационен файл съдържа ECMAScript клас със същото име като файла на скрипта. Ако файлът на скрипта се нарича MyGCode.js, класът, дефиниран вътре в скрипта, трябва да се нарича MyGCode.

ECMAScript класът трябва да произлиза пряко или косвено от класа CamExporterV2, който е дефиниран от QCAD/CAM. CamExporterV2 дефинира основната структура на конфигурационните класове за CAM експортиране. Различни методи в CamExporterV2 се извикват за експортиране на заглавната част на файла, различните обекти в CAD чертежа и долния колонтитул. CamExporterV2 също се грижи за различните функции на QCAD/CAM, например компенсация на радиуса на инструмента, вход / изход, рязане на вътрешни контури преди външни контури, оптимизация на пътя и т.н.

CamExporterV2 не извежда нищо сам по себе си, а сам би създал празен файл. CamExporterV2 предлага текстов поток (QTextStream) за писане в експортирания файл. Този текстов поток е достъпен чрез член-променливата this.stream.

Ако желаният изход е диалект на G-код (напр. G1 X10 Y20 за линейно движение), конфигурацията може да произлиза от съществуващата конфигурация за G-код, наречена GCodeBase, която е дефинирана във файла GCodeBase.js. Такъв е случаят за повечето контролери на машини. Един такъв примерен конфигурационен файл за извеждане на G-код в милиметри е дефиниран във файла 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-код.

Конфигурационни предпочитания

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-код

Section titled “Дефиниране на изхода на G-код”

Изходът на G-код е структуриран в кодови блокове, които се записват в изходния файл при използване на функцията за CAM експортиране в QCAD/CAM. Например първият записан кодов блок е кодовият блок „header”. Всеки кодов блок е дефиниран в член-променлива, която го идентифицира по име, например this.header съдържа кодовия блок за заглавната част на файла.

Кодовите блокове могат да бъдат заменени, за да съдържат произволен код / текст. Кодовите блокове обикновено съдържат променливи за извеждане на текущите X/Y координати, номер на ред, скорост на подаване и т.н.

Да кажем, че единичен ред се експортира в G-код. Редът се експортира с компенсация на радиуса на инструмента отляво на реда (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 Скорост на шпиндела, обикновено об/мин.
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 “Промяна на заглавната част и долния колонтитул”

За да добавите или промените G-кодове или M-кодове или друга информация в заглавната част или долния колонтитул, конфигурацията може да замени член-променливите 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]";

Шаблонен файл на постпроцесора

Section titled “Шаблонен файл на постпроцесора”

QCAD/CAM автоматично обединява DXF шаблонен файл със същото име като файла на постпроцесора (ако е наличен) при задаване или превключване на постпроцесора. Да кажем, че постпроцесорът се нарича „MyGCode”, реализиран в postprocessors/MyGCode.js. Създайте DXF файл с дефинициите на инструментите в postprocessors/MyGCode.dxf. Този файл може да съдържа дефиниции на инструменти, слоеве по подразбиране или очертанието на наличната повърхностна площ. Забележка: Всяко видимо съдържание на шаблонния файл автоматично се поставя върху заключен слой при обединяване, така че е само видимо, но не и избираемо.