Tutorial: Postprocesador QCAD/CAM

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 falsefalsoEstablecer a true para calcular la compensación del radio de la herramienta en lugar de utilizar G41/G42.
this.lineNumber
Número10 Número inicial utilizado para la numeración de líneas (N...).
this.lineNumberIncrement
Número10Incremento 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ódigoDescripciónEjemplo 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 miembroNombre de la variableDescripción
inputFileNameINFILENAMENombre del archivo de entrada (por ejemplo, archivo DXF).
inputFilePathINFILEPATHNombre del archivo de entrada con la ruta completa.
fileNameFILENAMENombre del archivo de salida.
filePathFILEPATHNombre de archivo de salida con la ruta completa.
dateTimeDATETIMEFecha y hora de la exportación.
lineNumberNNúmero de línea actual.
spindleSpeedSVelocidad del husillo, típicamente rpm.
feedRateFVelocidad de avance.
plungeRateFPTasa de inmersión.
xHomePositionXHPosición de inicio tal y como está configurada en la configuración CAM.
yHomePositionYH
zHomePositionZH
zSeguridadZSNivel de seguridad Z para cambios de herramienta e inicio/fin.
zDespejeZUNivel de seguridad Z para acercarse al material.
zClearancePassZUPNivel de separación Z entre varias pasadas.
zProfundidadCorteZDNivel de corte Z (total).
xPosiciónPrimeraXFPrimera posición del primer contorno en la primera trayectoria de la herramienta.
yPosiciónPrimeraYF
xStartPositionX1Inicio de la entidad (punto inicial de la línea / arco).
yPosiciónInicialY1
zStartPositionZ1
xPosiciónXPosición del objetivo actual. Punto final de la línea / arco actual.
yPosiciónY
zPosiciónZ
xRelPosiciónXRPosición actual del objetivo como coordenada relativa, respecto al punto inicial.
yRelPositionYR
zRelPositionZR
iArcCentroIncICentro del arco, relativo al punto inicial.
jArcCenterIncJ
iArcCenterAbsIACentro del arco, absoluto.
jArcCenterAbsJA
arcRadiusRADIORadio del arco.
arcDiameterDIÁMETRODiámetro del arco.
arcSweepBARRIDOBarrido del arco (ángulo cubierto por el arco en rad, negativo para las agujas del reloj).
herramientaTHerramienta actual.
toolRadiusTRRadio de la herramienta.
toolDiameterTDDiámetro de la herramienta.
toolpathOrderTOOLPATH_ORDEROrden de la senda en la lista de sendas, empezando por 0 para la primera senda.
toolCallsTOOL_CALLSNúmero de veces que se ha utilizado esta herramienta.
toolpathNameTOOLPATH_NAMENombre de la senda de la herramienta actual (definida por el usuario).
programNameNOMBRE_DEL_PROGRAMANombre del programa configurado por el usuario en la configuración CAM.
xMinX_MINExtensión mínima del dibujo.
yMinY_MIN
zMinZ_MIN
xMaxX_MAXExtensión máxima del dibujo.
yMaxY_MAX
zMaxZ_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]";