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, наприклад компенсацією радіуса інструмента, входом / виходом (lead in / lead out), обробкою внутрішніх контурів перед зовнішніми, оптимізацією траєкторій тощо.

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 має такий вигляд (зауважте, що рядки, які починаються з //, є коментарями і не є обов’язковими):

// Include GCodeBase.js which contains the class 'GCodeBase',
// used as base for our own configuration:
include("GCodeBase.js");
// Constructor of our class:
function MyGCode(documentInterface, newDocumentInterface) {
// Call constructor of base class:
GCodeBase.call(this, documentInterface, newDocumentInterface);
}
// Derive our class from class GCodeBase:
MyGCode.prototype = new GCodeBase();
// Display name shown in user interface:
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 or false false Установіть значення true, щоб обчислювати компенсацію радіуса інструмента замість використання G41/G42.
this.lineNumber Number 10 Початкове число для нумерації рядків (N…).
this.lineNumberIncrement Number 10 Крок нумерації рядків від рядка до рядка.
this.fileExtensions Array [ "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. Цей файл може містити визначення інструментів, типові шари або контур доступної робочої поверхні. Зауважте: будь-який видимий вміст файлу-шаблону автоматично розміщується на заблокованому шарі під час долучення, тому він лише видимий, але його не можна виділити.