Перейти к содержимому

Постпроцессор 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].

Создайте файл с уникальным именем по вашему выбору. Для этого примера мы называем нашу новую конфигурацию 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-код.

Конструктор, который мы определили выше, вызывает конструктор нашего базового класса 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-кода структурирован в блоки кода, которые записываются в выходной файл при использовании функции экспорта 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

Изменение заголовка и нижнего колонтитула

Заголовок раздела «Изменение заголовка и нижнего колонтитула»

Чтобы добавить или изменить 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]";

QCAD/CAM автоматически объединяет файл шаблона DXF с тем же именем, что и файл постпроцессора (если доступен), при установке или переключении постпроцессора. Допустим, постпроцессор называется «MyGCode», реализован в postprocessors/MyGCode.js. Создайте файл DXF с определениями инструментов в postprocessors/MyGCode.dxf. Этот файл может содержать определения инструментов, слои по умолчанию или контур доступной площади поверхности. Примечание: любое видимое содержимое файла шаблона автоматически помещается на заблокированный слой при объединении, поэтому оно только видимо, но не выбираемо.