Tabla de contenidos
QCAD/CAM puede exportar dibujos CAD a varios formatos utilizados en CAM (fabricación asistida por ordenador). Estos formatos pueden ser dialectos de G-Code u otros formatos completamente distintos. Cada formato CAM soportado se define en un archivo de configuración (o "postprocesador") que es un archivo ECMAScript (JavaScript) que implementa los detalles del formato. Todas las configuraciones disponibles se almacenan en el directorio postprocessors. Se pueden añadir nuevas implementaciones de formato en la misma ubicación.
Estructura básica
Cada archivo de configuración contiene una clase ECMAScript con el mismo nombre que el archivo de script. Si el archivo de script se llama MyGCode.js, la clase definida dentro del script debe llamarse MyGCode.
La clase ECMAScript debe derivar directa o indirectamente de la clase CamExporterV2, que está definida por QCAD/CAM. CamExporterV2 define la estructura básica de las clases de configuración del exportador CAM. Se llama a varios métodos de CamExporterV2 para exportar la cabecera del archivo, las distintas entidades del dibujo CAD y el pie de página. CamExporterV2 también se encarga de las diversas características de QCAD/CAM, por ejemplo la compensación del radio de la herramienta, la entrada/salida de herramientas, el corte de contornos interiores antes que los exteriores, la optimización de trayectorias, etc.
CamExporterV2 no emite nada por sí mismo, sino que produciría un archivo vacío por su cuenta. CamExporterV2 ofrece un flujo de texto(QTextStream) para escribir en el archivo exportado. Este flujo de texto se expone a través de la variable miembro this.stream.
Si la salida deseada es un dialecto G-Code (por ejemplo, G1 X10 Y20 para un movimiento lineal), la configuración puede derivarse de la configuración existente para G-Code llamada GCodeBase, que se define en el archivo GCodeBase.js. Este es el caso de la mayoría de los controladores de máquinas. Un ejemplo de configuración para la salida de G-Code en milímetros se define en el archivo GCodeMM.js y está disponible en la interfaz de usuario como la configuración llamada G-Code (G41/G42) [mm].
Derivar una configuración de GCodeBase
Cree un archivo con un nombre único de su elección. Para este ejemplo, llamaremos a nuestra nueva configuración MyGCode y la almacenaremos en un archivo con el mismo nombre, es decir, MyGCode.js en el directorio postprocessors de su instalación de QCAD/CAM.
Puede utilizar su editor de texto plano favorito para crear y escribir el archivo, por ejemplo Notepad en Windows, TextEdit en macOS o vim, Emacs, etc. en sistemas Linux.
MyGCode.js debe definir una clase llamada MyGCode para ser una configuración válida para QCAD/CAM. Aunque estrictamente hablando no existen clases en ECMAScript, podemos crear un concepto similar adjuntando funciones al objeto prototipo de una función constructora. Cómo funciona esto exactamente está fuera del alcance de esta documentación. Sin embargo, existe una plantilla sencilla que puede utilizar para todos los archivos de configuración.
Para nuestro ejemplo, la definición de la clase MyGCode tiene este aspecto (tenga en cuenta que las líneas que empiezan por // son comentarios y no son necesarias):
// Incluya GCodeBase.js que contiene la clase 'GCodeBase', utilizada como base para nuestra propia configuración:
include("GCodeBase.js");
// Constructor de nuestra clase:
function MyGCode(documentInterface, newDocumentInterface) {
// Llame al constructor de la clase base:
GCodeBase.call(this, documentInterface, newDocumentInterface);
}
// Derivar nuestra clase de la clase GCodeBase:
MyGCode.prototype = new GCodeBase();
// Nombre para mostrar en la interfaz de usuario:
MyGCode.displayName = "Mi G-Code";
Ahora, hemos creado una nueva configuración totalmente operativa llamada "Mi G-Code" que está lista para ser utilizada en QCAD/CAM y produce G-Code básico.
Preferencias de configuración
El constructor que definimos anteriormente llama al constructor de nuestra clase base GCodeBase. En el constructor, podemos establecer algunos parámetros para nuestra configuración como la unidad de salida deseada o si queremos utilizar G41/G42 para la compensación del radio de la herramienta o calcular el centro de la trayectoria de la herramienta.
Para configurar la unidad de salida (que es la unidad esperada por su máquina o controlador), podemos establecer la variable miembro unidad a Pulgada o Milímetro, por ejemplo:
esta.unidad = RS.Pulgada;
o
this.unit = RS.Milímetro;
Otros ajustes que se pueden configurar en el constructor son:
Variable: | Valores posibles: | Por defecto: | Descripción: |
this.outputOffsetPath | true o false | falso | Establecer a true para calcular la compensación del radio de la herramienta en lugar de utilizar G41/G42. |
this.lineNumber | Número | 10 | Número inicial utilizado para la numeración de líneas (N...). |
this.lineNumberIncrement | Número | 10 | Incremento del número de línea de una línea a otra. |
this.fileExtensions | Matriz | [ "nc", "cnc" ] | Lista de extensiones de archivo que el usuario puede elegir al exportar a través de este postprocesador. |
Un constructor completo podría tener este aspecto
function MyGCode(documentInterface, newDocumentInterface) {
GCodeBase.call(this, documentInterface, newDocumentInterface);
this.unit = RS.Inch;
this.outputOffsetPath = true;
this.lineNumber = 1;
this.lineNumberIncrement = 1;
}
Definición de la salida del código G
Bloques de código
La salida G-Code se estructura en bloques de código que se escriben en el archivo de salida cuando se utiliza la función de exportación CAM en QCAD/CAM. Por ejemplo, el primer bloque de código que se escribe es el bloque de código "cabecera". Cada bloque de código se define en una variable miembro que lo identifica por su nombre, por ejemplo "this.header" contiene el bloque de código para la cabecera del archivo.
Los bloques de código pueden anularse para contener cualquier código / texto. Los bloques de código suelen contener variables para dar salida a las coordenadas X/Y actuales, el número de línea, el avance, etc.
Supongamos que se exporta una sola línea a G-Code. La línea se exporta con la compensación del radio de la herramienta a la izquierda de la línea (G41). Los bloques de código que se escriben en el archivo de salida son los siguientes:
Bloque de código | Descripción | Ejemplo de salida |
cabecera | Cabecera de la salida (siempre el primer bloque de código). | G21 G17 G90 G40 G49 G80 |
rapidMoveZ | Desplazamiento rápido al nivel de seguridad. | G0 Z100 |
rapidMove | Desplazamiento rápido a la primera posición del primer contorno (aquí el inicio de la entrada de la línea). | G0 X5 Y10 |
toolHeader | Primer bloque cuando entra en acción una nueva herramienta (cambio de herramienta). | T1 |
rapidMoveZ | Desplazamiento rápido hacia abajo hasta el nivel de separación (se cierne sobre el material). | G0 Z5 |
firstLinearMoveZ | Corte en el material a velocidad de inmersión. | G1 Z-5 F50 |
toolpathHeader | Primer bloque de una nueva trayectoria de herramienta. | |
contornoHeader | Primer bloque de un nuevo contorno dentro de una trayectoria de herramienta. | |
singleZPassHeader | Cabecera de una sola pasada Z. Cortamos toda la profundidad en una sola pasada. | |
zPassFirstHeader | Primera cabecera de pasadas Z únicas o múltiples. | |
linearMoveCompensationLeft | Movimiento lineal al punto inicial de la línea a lo largo de la entrada, activando la compensación del radio de la herramienta. | G41 X10 Y10 F500 |
linearMove | Movimiento lineal a lo largo de la línea hasta el punto final de la línea. | X30 Y10 |
linearMoveCompensationOff | Movimiento lineal alejándose del punto final a lo largo de la línea, desactivando la compensación del radio de la herramienta. | G40 X35 Y10 |
zPassLastFooter | Último pie de una o varias pasadas Z. | |
singleZPassFooter | Pie de página de una sola pasada Z. | |
contourFooter | Fin de contorno. | |
toolpathFooter | Fin de la trayectoria de la herramienta. | |
linearMoveZ | Desplazarse fuera del material hasta el nivel de separación. | Z5 |
rapidMoveZ | Desplazarse al nivel de seguridad. | G0 Z100 |
toolFooter | Fin para esta herramienta. | |
pie de página | Fin del programa. | M30 |
Muchos de estos bloques de código no suelen utilizarse y no producen ninguna salida (bloque de código vacío).
Variables
Variable miembro | Nombre de la variable | Descripción |
inputFileName | INFILENAME | Nombre del archivo de entrada (por ejemplo, archivo DXF). |
inputFilePath | INFILEPATH | Nombre del archivo de entrada con la ruta completa. |
fileName | FILENAME | Nombre del archivo de salida. |
filePath | FILEPATH | Nombre de archivo de salida con la ruta completa. |
dateTime | DATETIME | Fecha y hora de la exportación. |
lineNumber | N | Número de línea actual. |
spindleSpeed | S | Velocidad del husillo, típicamente rpm. |
feedRate | F | Velocidad de avance. |
plungeRate | FP | Tasa de inmersión. |
xHomePosition | XH | Posición de inicio tal y como está configurada en la configuración CAM. |
yHomePosition | YH | |
zHomePosition | ZH | |
zSeguridad | ZS | Nivel de seguridad Z para cambios de herramienta e inicio/fin. |
zDespeje | ZU | Nivel de seguridad Z para acercarse al material. |
zClearancePass | ZUP | Nivel de separación Z entre varias pasadas. |
zProfundidadCorte | ZD | Nivel de corte Z (total). |
xPosiciónPrimera | XF | Primera posición del primer contorno en la primera trayectoria de la herramienta. |
yPosiciónPrimera | YF | |
xStartPosition | X1 | Inicio de la entidad (punto inicial de la línea / arco). |
yPosiciónInicial | Y1 | |
zStartPosition | Z1 | |
xPosición | X | Posición del objetivo actual. Punto final de la línea / arco actual. |
yPosición | Y | |
zPosición | Z | |
xRelPosición | XR | Posición actual del objetivo como coordenada relativa, respecto al punto inicial. |
yRelPosition | YR | |
zRelPosition | ZR | |
iArcCentroInc | I | Centro del arco, relativo al punto inicial. |
jArcCenterInc | J | |
iArcCenterAbs | IA | Centro del arco, absoluto. |
jArcCenterAbs | JA | |
arcRadius | RADIO | Radio del arco. |
arcDiameter | DIÁMETRO | Diámetro del arco. |
arcSweep | BARRIDO | Barrido del arco (ángulo cubierto por el arco en rad, negativo para las agujas del reloj). |
herramienta | T | Herramienta actual. |
toolRadius | TR | Radio de la herramienta. |
toolDiameter | TD | Diámetro de la herramienta. |
toolpathOrder | TOOLPATH_ORDER | Orden de la senda en la lista de sendas, empezando por 0 para la primera senda. |
toolCalls | TOOL_CALLS | Número de veces que se ha utilizado esta herramienta. |
toolpathName | TOOLPATH_NAME | Nombre de la senda de la herramienta actual (definida por el usuario). |
programName | NOMBRE_DEL_PROGRAMA | Nombre del programa configurado por el usuario en la configuración CAM. |
xMin | X_MIN | Extensión mínima del dibujo. |
yMin | Y_MIN | |
zMin | Z_MIN | |
xMax | X_MAX | Extensión máxima del dibujo. |
yMax | Y_MAX | |
zMax | Z_MAX |
Ejemplos
Modificar la cabecera y el pie de página
Para añadir o cambiar los Códigos G o los Códigos M u otra información en la cabecera o el pie de página, una configuración puede anular las variables miembro cabecera y pie de página en el constructor, por ejemplo de la siguiente manera:
this.header = [
"[N] G0 Z100"
];
this.footer = [
"[N] G0 Z100",
"[N] M30"
];
I/J absoluto
Para utilizar valores absolutos para los valores I/J del centro de los arcos, puede anular los bloques de código de los arcos de la siguiente manera:
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]";