Постпроцессор 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
Заголовок раздела «Производный класс конфигурации от 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-код.
Настройки конфигурации
Заголовок раздела «Настройки конфигурации»Конструктор, который мы определили выше, вызывает конструктор нашего базового класса 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-кода
Заголовок раздела «Определение вывода 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 |
Примеры
Заголовок раздела «Примеры»Изменение заголовка и нижнего колонтитула
Заголовок раздела «Изменение заголовка и нижнего колонтитула»Чтобы добавить или изменить G-коды или M-коды или другую информацию в заголовке или нижнем колонтитуле, конфигурация может переопределить переменные-члены 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 с тем же именем, что и файл постпроцессора (если доступен), при установке или переключении постпроцессора. Допустим, постпроцессор называется «MyGCode», реализован в postprocessors/MyGCode.js. Создайте файл DXF с определениями инструментов в postprocessors/MyGCode.dxf. Этот файл может содержать определения инструментов, слои по умолчанию или контур доступной площади поверхности. Примечание: любое видимое содержимое файла шаблона автоматически помещается на заблокированный слой при объединении, поэтому оно только видимо, но не выбираемо.