Aller au contenu

Postprocesseur QCAD/CAM

QCAD/CAM peut exporter des dessins CAO vers divers formats utilisés en FAO (fabrication assistée par ordinateur). Ces formats peuvent être des dialectes de G-code ou d’autres formats complètement différents. Chaque format CAM pris en charge est défini dans un fichier de configuration (ou « postprocesseur ») qui est un fichier ECMAScript (JavaScript) implémentant les détails du format. Toutes les configurations disponibles sont stockées dans le répertoire postprocessors. De nouvelles implémentations de format peuvent être ajoutées au même endroit.

Chaque fichier de configuration contient une classe ECMAScript portant le même nom que le fichier de script. Si le fichier de script s’appelle MyGCode.js, la classe définie dans le script doit s’appeler MyGCode.

La classe ECMAScript doit dériver directement ou indirectement de la classe CamExporterV2, qui est définie par QCAD/CAM. CamExporterV2 définit la structure de base des classes de configuration d’exportateur CAM. Diverses méthodes de CamExporterV2 sont appelées pour exporter l’en-tête du fichier, les diverses entités du dessin CAO et le pied de page. CamExporterV2 prend aussi en charge les diverses fonctionnalités de QCAD/CAM, par exemple la compensation du rayon d’outil, l’entrée / la sortie, la découpe des contours intérieurs avant les contours extérieurs, l’optimisation des trajectoires, etc.

CamExporterV2 ne produit rien de lui-même, mais générerait à lui seul un fichier vide. CamExporterV2 offre un flux de texte (QTextStream) pour écrire dans le fichier exporté. Ce flux de texte est exposé via la variable membre this.stream.

Si la sortie souhaitée est un dialecte de G-code (par ex. G1 X10 Y20 pour un déplacement linéaire), la configuration peut être dérivée de la configuration existante pour le G-code appelée GCodeBase, définie dans le fichier GCodeBase.js. C’est le cas de la plupart des contrôleurs de machine. Une telle configuration d’exemple pour la sortie de G-code en millimètres est définie dans le fichier GCodeMM.js et disponible dans l’interface utilisateur sous le nom de configuration G-Code (G41/G42) [mm].

Créez un fichier avec un nom unique de votre choix. Pour cet exemple, nous appelons notre nouvelle configuration MyGCode et la stockons dans un fichier du même nom, c’est-à-dire MyGCode.js dans le répertoire postprocessors de votre installation de QCAD/CAM.

Vous pouvez utiliser votre éditeur de texte brut préféré pour créer et écrire le fichier, par exemple Notepad sous Windows, TextEdit sous macOS ou vim, Emacs, etc. sous les systèmes Linux.

MyGCode.js doit définir une classe appelée MyGCode pour être une configuration valide pour QCAD/CAM. Bien qu’il n’y ait à proprement parler pas de classes en ECMAScript, nous pouvons créer un concept similaire en attachant des fonctions à l’objet prototype d’une fonction constructeur. Le fonctionnement exact dépasse le cadre de cette documentation. Il existe cependant un modèle simple que vous pouvez utiliser pour tous les fichiers de configuration.

Pour notre exemple, la définition de la classe MyGCode ressemble à ceci (notez que les lignes commençant par // sont des commentaires et ne sont pas requises) :

// Inclure GCodeBase.js qui contient la classe 'GCodeBase',
// utilisée comme base pour notre propre configuration :
include("GCodeBase.js");
// Constructeur de notre classe :
function MyGCode(documentInterface, newDocumentInterface) {
// Appeler le constructeur de la classe de base :
GCodeBase.call(this, documentInterface, newDocumentInterface);
}
// Dériver notre classe de la classe GCodeBase :
MyGCode.prototype = new GCodeBase();
// Nom d'affichage montré dans l'interface utilisateur :
MyGCode.displayName = "My G-Code";

Nous avons maintenant créé une nouvelle configuration pleinement fonctionnelle appelée « My G-Code », prête à être utilisée dans QCAD/CAM et qui produit du G-code de base.

Le constructeur que nous avons défini ci-dessus appelle le constructeur de notre classe de base GCodeBase. Dans le constructeur, nous pouvons définir certains paramètres pour notre configuration, tels que l’unité de sortie souhaitée ou si nous voulons utiliser G41/G42 pour la compensation du rayon d’outil ou calculer le centre de la trajectoire d’outil.

Pour configurer l’unité de sortie (c’est l’unité attendue par votre machine ou contrôleur), nous pouvons définir la variable membre unit sur Inch ou Millimeter, par exemple :

this.unit = RS.Inch;

ou

this.unit = RS.Millimeter;

D’autres réglages qui peuvent être configurés dans le constructeur sont :

Variable Valeurs possibles Défaut Description
this.outputOffsetPath true ou false false Réglez sur true pour calculer la compensation du rayon d’outil au lieu d’utiliser G41/G42.
this.lineNumber Nombre 10 Nombre initial utilisé pour la numérotation des lignes (N…).
this.lineNumberIncrement Nombre 10 Incrément du numéro de ligne d’une ligne à l’autre.
this.fileExtensions Array [ "nc", "cnc" ] Liste des extensions de fichier parmi lesquelles l’utilisateur peut choisir lors de l’export via ce postprocesseur.

Un constructeur complet pourrait ressembler à ceci :

function MyGCode(documentInterface, newDocumentInterface) {
GCodeBase.call(this, documentInterface, newDocumentInterface);
this.unit = RS.Inch;
this.outputOffsetPath = true;
this.lineNumber = 1;
this.lineNumberIncrement = 1;
}

La sortie G-code est structurée en blocs de code qui sont écrits dans le fichier de sortie lors de l’utilisation de la fonction d’export CAM dans QCAD/CAM. Par exemple, le premier bloc de code écrit est le bloc de code « header ». Chaque bloc de code est défini dans une variable membre qui l’identifie par son nom, par exemple this.header contient le bloc de code de l’en-tête du fichier.

Les blocs de code peuvent être remplacés pour contenir n’importe quel code / texte. Les blocs de code contiennent généralement des variables pour sortir les coordonnées X/Y actuelles, le numéro de ligne, l’avance, etc.

Supposons qu’une seule ligne soit exportée en G-code. La ligne est exportée avec compensation du rayon d’outil à gauche de la ligne (G41). Les blocs de code écrits dans le fichier de sortie sont les suivants :

Bloc de code Description Exemple de sortie
header En-tête de la sortie (toujours le premier bloc de code). G21 G17 G90 G40 G49 G80
rapidMoveZ Déplacement rapide au niveau de sécurité. G0 Z100
rapidMove Déplacement rapide vers la première position du premier contour (ici le début de l’entrée pour la ligne). G0 X5 Y10
toolHeader Premier bloc lorsqu’un nouvel outil entre en action (changement d’outil). T1
rapidMoveZ Déplacement rapide vers le bas au niveau de dégagement (survol au-dessus du matériau). G0 Z5
firstLinearMoveZ Plongée dans le matériau à la vitesse de plongée. G1 Z-5 F50
toolpathHeader Premier bloc d’une nouvelle trajectoire d’outil.
contourHeader Premier bloc d’un nouveau contour au sein d’une trajectoire d’outil.
singleZPassHeader En-tête pour une passe Z unique. Nous coupons toute la profondeur en une seule passe.
zPassFirstHeader Premier en-tête d’une ou plusieurs passes Z.
linearMoveCompensationLeft Déplacement linéaire vers le point de départ de la ligne le long de l’entrée, activant la compensation du rayon d’outil. G41 X10 Y10 F500
linearMove Déplacement linéaire le long de la ligne vers le point final de la ligne. X30 Y10
linearMoveCompensationOff Déplacement linéaire à l’écart du point final le long de la sortie, désactivant la compensation du rayon d’outil. G40 X35 Y10
zPassLastFooter Dernier pied d’une ou plusieurs passes Z.
singleZPassFooter Pied pour une passe Z unique.
contourFooter Fin du contour.
toolpathFooter Fin de la trajectoire d’outil.
linearMoveZ Déplacement hors du matériau vers le niveau de dégagement. Z5
rapidMoveZ Déplacement rapide au niveau de sécurité. G0 Z100
toolFooter Fin pour cet outil.
footer Fin du programme. M30

Beaucoup de ces blocs de code sont généralement inutilisés et ne produisent aucune sortie (bloc de code vide).

Variable membre Nom de variable Description
inputFileName INFILENAME Nom du fichier d’entrée (par ex. fichier DXF).
inputFilePath INFILEPATH Nom du fichier d’entrée avec le chemin complet.
fileName FILENAME Nom du fichier de sortie.
filePath FILEPATH Nom du fichier de sortie avec le chemin complet.
dateTime DATETIME Date et heure de l’export.
lineNumber N Numéro de ligne actuel.
spindleSpeed S Vitesse de broche, typiquement en tr/min.
feedRate F Avance.
plungeRate FP Vitesse de plongée.
xHomePosition XH Position de référence telle que configurée dans la configuration CAM.
yHomePosition YH
zHomePosition ZH
zSafety ZS Niveau de sécurité Z pour les changements d’outil et le début / la fin.
zClearance ZU Niveau de dégagement Z pour l’approche du matériau.
zClearancePass ZUP Niveau de dégagement Z entre plusieurs passes.
zCuttingDepth ZD Niveau de coupe Z (total).
xFirstPosition XF Première position du premier contour dans la première trajectoire d’outil.
yFirstPosition YF
xStartPosition X1 Début de l’entité (point de départ de la ligne / de l’arc).
yStartPosition Y1
zStartPosition Z1
xPosition X Position cible actuelle. Point final de la ligne / de l’arc actuel.
yPosition Y
zPosition Z
xRelPosition XR Position cible actuelle en coordonnée relative, par rapport au point de départ.
yRelPosition YR
zRelPosition ZR
iArcCenterInc I Centre de l’arc, par rapport au point de départ.
jArcCenterInc J
iArcCenterAbs IA Centre de l’arc, absolu.
jArcCenterAbs JA
arcRadius RADIUS Rayon de l’arc.
arcDiameter DIAMETER Diamètre de l’arc.
arcSweep SWEEP Balayage de l’arc (angle couvert par l’arc en rad, négatif pour le sens horaire).
tool T Outil actuel.
toolRadius TR Rayon de l’outil.
toolDiameter TD Diamètre de l’outil.
toolpathOrder TOOLPATH_ORDER Ordre de la trajectoire d’outil dans la liste des trajectoires d’outil, en commençant par 0 pour la première trajectoire d’outil.
toolCalls TOOL_CALLS Nombre de fois où cet outil a été utilisé.
toolpathName TOOLPATH_NAME Nom de la trajectoire d’outil actuelle (défini par l’utilisateur).
programName PROGRAM_NAME Nom du programme tel que configuré par l’utilisateur dans la configuration CAM.
xMin X_MIN Étendue minimale du dessin.
yMin Y_MIN
zMin Z_MIN
xMax X_MAX Étendue maximale du dessin.
yMax Y_MAX
zMax Z_MAX

Pour ajouter ou modifier des G-codes, des M-codes ou d’autres informations dans l’en-tête ou le pied de page, une configuration peut remplacer les variables membres header et footer dans le constructeur, par exemple comme suit :

this.header = [ "[N] G0 Z100" ];
this.footer = [ "[N] G0 Z100", "[N] M30" ];

Pour utiliser des valeurs absolues pour les valeurs I/J du centre des arcs, vous pouvez remplacer les blocs de code d’arc comme suit :

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 fusionne automatiquement un fichier modèle DXF portant le même nom que le fichier de postprocesseur (s’il est disponible) lors du réglage ou du changement de postprocesseur. Supposons que le postprocesseur s’appelle « MyGCode », implémenté dans postprocessors/MyGCode.js. Créez un fichier DXF avec les définitions d’outil dans postprocessors/MyGCode.dxf. Ce fichier peut contenir des définitions d’outil, des calques par défaut ou le contour de la surface disponible. Remarque : tout contenu visible du fichier modèle est automatiquement placé sur un calque verrouillé lors de la fusion, de sorte qu’il est seulement visible mais non sélectionnable.