Постпроцесор на QCAD/CAM
QCAD/CAM може да експортира CAD чертежи в различни формати, използвани в CAM (компютърно подпомагано производство). Тези формати могат да бъдат диалекти на G-код или други, напълно различни формати. Всеки поддържан CAM формат е дефиниран в конфигурационен файл (или „постпроцесор”), който е ECMAScript (JavaScript) файл, реализиращ детайлите на формата. Всички налични конфигурации се съхраняват в директорията postprocessors. Нови реализации на формати могат да бъдат добавени на същото място.
Основна структура
Section titled “Основна структура”Всеки конфигурационен файл съдържа 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-код”Кодови блокове
Section titled “Кодови блокове”Изходът на 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 |
Много от тези кодови блокове обикновено не се използват и не произвеждат изход (празен кодов блок).
Променливи
Section titled “Променливи”| Член-променлива | Име на променливата | Описание |
|---|---|---|
| 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 “Примери”Промяна на заглавната част и долния колонтитул
Section titled “Промяна на заглавната част и долния колонтитул”За да добавите или промените G-кодове или M-кодове или друга информация в заглавната част или долния колонтитул, конфигурацията може да замени член-променливите header и footer в конструктора, например както следва:
this.header = [ "[N] G0 Z100" ];this.footer = [ "[N] G0 Z100", "[N] M30" ];Абсолютни I/J
Section titled “Абсолютни 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]";Шаблонен файл на постпроцесора
Section titled “Шаблонен файл на постпроцесора”QCAD/CAM автоматично обединява DXF шаблонен файл със същото име като файла на постпроцесора (ако е наличен) при задаване или превключване на постпроцесора. Да кажем, че постпроцесорът се нарича „MyGCode”, реализиран в postprocessors/MyGCode.js. Създайте DXF файл с дефинициите на инструментите в postprocessors/MyGCode.dxf. Този файл може да съдържа дефиниции на инструменти, слоеве по подразбиране или очертанието на наличната повърхностна площ. Забележка: Всяко видимо съдържание на шаблонния файл автоматично се поставя върху заключен слой при обединяване, така че е само видимо, но не и избираемо.