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.
Structure de base
Section intitulée « Structure de base »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].
Dériver une configuration de GCodeBase
Section intitulée « Dériver une configuration de GCodeBase »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.
Préférences de configuration
Section intitulée « Préférences de configuration »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;}Définir la sortie G-code
Section intitulée « Définir la sortie G-code »Blocs de code
Section intitulée « Blocs de code »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).
Variables
Section intitulée « Variables »| 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 |
Exemples
Section intitulée « Exemples »Modifier l’en-tête et le pied de page
Section intitulée « Modifier l’en-tête et le pied de page »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" ];I/J absolus
Section intitulée « I/J absolus »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]";Fichier modèle de postprocesseur
Section intitulée « Fichier modèle de postprocesseur »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.