Posprocesador QCAD/CAM
QCAD/CAM puede exportar dibujos CAD a diversos formatos usados en CAM (fabricación asistida por ordenador). Estos formatos pueden ser dialectos de código G u otros formatos completamente diferentes. Cada formato CAM admitido se define en un archivo de configuración (o “posprocesador”) que es un archivo ECMAScript (JavaScript) que implementa los detalles del formato. Todas las configuraciones disponibles se almacenan dentro del directorio postprocessors. Se pueden añadir nuevas implementaciones de formato en la misma ubicación.
Estructura básica
Sección titulada «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 de exportador CAM. Diversos métodos de CamExporterV2 se llaman para exportar el encabezado del archivo, las diversas entidades del dibujo CAD y el pie de página. CamExporterV2 también se encarga de las diversas funciones de QCAD/CAM, por ejemplo la compensación del radio de la herramienta, la entrada / salida, el corte de los contornos internos antes de los externos, la optimización de trayectorias, etc.
CamExporterV2 no produce nada por sí mismo, sino que por sí solo generaría un archivo vacío. 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 de código G (p. ej. G1 X10 Y20 para un movimiento lineal), la configuración se puede derivar de la configuración existente para código G llamada GCodeBase, que está definida en el archivo GCodeBase.js. Este es el caso de la mayoría de los controladores de máquina. Una de esas configuraciones de ejemplo para la salida de código G 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
Sección titulada «Derivar una configuración de GCodeBase»Cree un archivo con un nombre único de su elección. Para este ejemplo, llamamos a nuestra nueva configuración MyGCode y la almacenamos en un archivo del mismo nombre, es decir, MyGCode.js en el directorio postprocessors de su instalación de QCAD/CAM.
Puede usar su editor de texto plano preferido 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 en ECMAScript en sentido estricto no hay clases, podemos crear un concepto similar adjuntando funciones al objeto prototipo de una función constructora. Cómo funciona exactamente esto queda fuera del alcance de esta documentación. No obstante, hay una plantilla sencilla que puede usar 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):
// Incluir GCodeBase.js, que contiene la clase 'GCodeBase',// usada como base para nuestra propia configuración:include("GCodeBase.js");
// Constructor de nuestra clase:function MyGCode(documentInterface, newDocumentInterface) { // Llamar 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 = "My G-Code";Ahora hemos creado una nueva configuración totalmente funcional llamada “My G-Code” que está lista para usarse en QCAD/CAM y produce código G básico.
Preferencias de configuración
Sección titulada «Preferencias de configuración»El constructor que definimos arriba 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 usar 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 que espera su máquina o controlador), podemos establecer la variable miembro unit en Inch o Millimeter, por ejemplo:
this.unit = RS.Inch;o
this.unit = RS.Millimeter;Otros ajustes que se pueden configurar en el constructor son:
| Variable | Valores posibles | Predeterminado | Descripción |
|---|---|---|---|
this.outputOffsetPath |
true o false | false | Establezca en true para calcular la compensación del radio de la herramienta en lugar de usar G41/G42. |
this.lineNumber |
Número | 10 | Número inicial usado 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 |
Array | [ "nc", "cnc" ] |
Lista de extensiones de archivo entre las que el usuario puede elegir al exportar mediante este posprocesador. |
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;}Definir la salida de código G
Sección titulada «Definir la salida de código G»Bloques de código
Sección titulada «Bloques de código»La salida de código G está estructurada en bloques de código que se escriben en el archivo de salida al usar 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 “header”. 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 del encabezado del archivo.
Los bloques de código se pueden sobrescribir para que contengan 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 código G. La línea se exporta con 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 |
|---|---|---|
header |
Encabezado de la salida (siempre el primer bloque de código). | G21 G17 G90 G40 G49 G80 |
rapidMoveZ |
Movimiento rápido al nivel de seguridad. | G0 Z100 |
rapidMove |
Movimiento 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 |
Movimiento rápido hacia abajo al nivel de aproximación (flotando sobre el material). | G0 Z5 |
firstLinearMoveZ |
Penetración en el material a la velocidad de penetración. | G1 Z-5 F50 |
toolpathHeader |
Primer bloque de una nueva trayectoria de herramienta. | |
contourHeader |
Primer bloque de un nuevo contorno dentro de una trayectoria de herramienta. | |
singleZPassHeader |
Encabezado para una única pasada Z. Estamos cortando toda la profundidad en una sola pasada. | |
zPassFirstHeader |
Primer encabezado de una o varias pasadas Z. | |
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 salida, desactivando la compensación del radio de la herramienta. | G40 X35 Y10 |
zPassLastFooter |
Último pie de una o varias pasadas Z. | |
singleZPassFooter |
Pie para una única pasada Z. | |
contourFooter |
Fin del contorno. | |
toolpathFooter |
Fin de la trayectoria de herramienta. | |
linearMoveZ |
Movimiento fuera del material al nivel de aproximación. | Z5 |
rapidMoveZ |
Movimiento rápido al nivel de seguridad. | G0 Z100 |
toolFooter |
Fin para esta herramienta. | |
footer |
Fin del programa. | M30 |
Muchos de estos bloques de código suelen estar sin usar y no producen ninguna salida (bloque de código vacío).
Variables
Sección titulada «Variables»| Variable miembro | Nombre de variable | Descripción |
|---|---|---|
| inputFileName | INFILENAME | Nombre del archivo de entrada (p. ej. archivo DXF). |
| inputFilePath | INFILEPATH | Nombre del archivo de entrada con la ruta completa. |
| fileName | FILENAME | Nombre del archivo de salida. |
| filePath | FILEPATH | Nombre del 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 en rpm. |
| feedRate | F | Avance. |
| plungeRate | FP | Velocidad de penetración. |
| xHomePosition | XH | Posición de referencia tal como se configura en la configuración CAM. |
| yHomePosition | YH | |
| zHomePosition | ZH | |
| zSafety | ZS | Nivel de seguridad Z para cambios de herramienta e inicio / fin. |
| zClearance | ZU | Nivel de aproximación Z para acercarse al material. |
| zClearancePass | ZUP | Nivel de aproximación Z entre varias pasadas. |
| zCuttingDepth | ZD | Nivel de corte Z (total). |
| xFirstPosition | XF | Primera posición del primer contorno en la primera trayectoria de herramienta. |
| yFirstPosition | YF | |
| xStartPosition | X1 | Inicio de la entidad (punto inicial de la línea / arco). |
| yStartPosition | Y1 | |
| zStartPosition | Z1 | |
| xPosition | X | Posición de destino actual. Punto final de la línea / arco actual. |
| yPosition | Y | |
| zPosition | Z | |
| xRelPosition | XR | Posición de destino actual como coordenada relativa, respecto al punto inicial. |
| yRelPosition | YR | |
| zRelPosition | ZR | |
| iArcCenterInc | I | Centro del arco, respecto al punto inicial. |
| jArcCenterInc | J | |
| iArcCenterAbs | IA | Centro del arco, absoluto. |
| jArcCenterAbs | JA | |
| arcRadius | RADIUS | Radio del arco. |
| arcDiameter | DIAMETER | Diámetro del arco. |
| arcSweep | SWEEP | Barrido del arco (ángulo cubierto por el arco en rad, negativo en sentido horario). |
| tool | T | Herramienta actual. |
| toolRadius | TR | Radio de la herramienta. |
| toolDiameter | TD | Diámetro de la herramienta. |
| toolpathOrder | TOOLPATH_ORDER | Orden de la trayectoria de herramienta en la lista de trayectorias, comenzando con 0 para la primera trayectoria. |
| toolCalls | TOOL_CALLS | Número de veces que se ha usado esta herramienta. |
| toolpathName | TOOLPATH_NAME | Nombre de la trayectoria de herramienta actual (definido por el usuario). |
| programName | PROGRAM_NAME | Nombre del programa tal como lo configura 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
Sección titulada «Ejemplos»Cambiar el encabezado y el pie de página
Sección titulada «Cambiar el encabezado y el pie de página»Para añadir o cambiar códigos G, códigos M u otra información en el encabezado o el pie de página, una configuración puede sobrescribir las variables miembro header y footer en el constructor, por ejemplo de la siguiente manera:
this.header = [ "[N] G0 Z100" ];this.footer = [ "[N] G0 Z100", "[N] M30" ];I/J absolutos
Sección titulada «I/J absolutos»Para usar valores absolutos para los valores I/J del centro de los arcos, puede sobrescribir los bloques de código de arco 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]";Archivo de plantilla del posprocesador
Sección titulada «Archivo de plantilla del posprocesador»QCAD/CAM combina automáticamente un archivo de plantilla DXF con el mismo nombre que el archivo del posprocesador (si está disponible) al establecer o cambiar el posprocesador. Supongamos que el posprocesador se llama “MyGCode”, implementado en postprocessors/MyGCode.js. Cree un archivo DXF con las definiciones de herramienta en postprocessors/MyGCode.dxf. Este archivo puede contener definiciones de herramienta, capas predeterminadas o el contorno de la superficie disponible. Nota: Cualquier contenido visible del archivo de plantilla se coloca automáticamente en una capa bloqueada al combinar, de modo que solo es visible pero no seleccionable.