Post traitement du Gcode avec Cambam
4 participants
Page 1 sur 1
Post traitement du Gcode avec Cambam
Salut,
Un petit tuto pour expliquer comme créer un post traitement du Gcode pour CamBam.
Tout d'abord, qu'est ce qu'un post traitement ? ...
Lorsque l'on produit un Gcode, que ce soit avec CamBam ou avec tout soft de FAO, le soft utilise ce que l'on appel un post-processeur. Le travail du post-processeur et de formater le Gcode de façon à ce qu'il soit compréhensible par le soft de pilotage utilisé pour piloter la CN.
Tous les softs de pilotage n'utilisent pas exactement la même syntaxe ou les mêmes codes pour les commandes.
Par exemple un mouvement à la vitesse d'usinage jusqu'à la position xy 100,50 peut avoir des syntaxes un peu différentes suivant le soft de pilotage utilisé.
G1 X100 Y50
G01X100Y50
G01 X100.00 Y50.00
Ces trois exemples font la même chose, mais certains soft peuvent ne pas accepter le G1 mais uniquement le G01, ou ne pas accepter les espaces ou ne pas accepter de valeur sans point décimal ... etc
Parfois ce sont les codes qui changent, par exemple la commande de palpage c'est G31 sur Mach3, mais G38 sur LinuxCNc.
C'est le travail du post processeur de formater le Gcode de façon approprié pour qu'il puisse être lu par le logiciel de pilotage utilisé.
Toutefois, il arrive que certaines choses ne soit pas faisables directement avec le post processeur et donc le Gcode sorti ne correspond pas exactement à ce que l'on veut.
Un exemple simple, le post processeur permet de définir le nombre de décimales qui seront utilisées par les valeurs numériques écrites dans le Gcode, mais le réglage agit sur TOUTES les valeurs numériques du Gcode.
Par exemple une sortie à 3 décimales avec une commande de vitesse d'avance (F) et un déplacement en vitesse de travail (G1) donnera le résultat suivant:
F150.000
G1 X12.530 Y10.500
Problème, il y a un soft de pilotage (je ne sais plus lequel) qui ne supporte pas que l'on donne la valeur F avec des décimales, mais bien sur, on a besoin des décimales pour les mouvements, donc comme on ne peut pas faire de réglage de format séparés dans le post processeur pour F et pour les Gx, il faut ensuite éditer le GCode avec un éditeur de texte pour remplacer le F150.00 par un F150.
Le principe du post traitement, c'est de modifier automatiquement le Gcode produit à l'aide d'une routine externe qui fera la même chose que l'édition manuelle, à savoir modifier ce qui doit l'être dans le Gcode pour qu'il soit compatible avec le soft de pilotage ; La routine, qui sera lancé par le post processeur lira donc le Gcode juste après sa production, le traitera et produira un Gcode modifié.
Cette routine est à écrire par l'utilisateur dans un langage de programmation permettant de produire un fichier .exe
Coté post processeur, il faudra renseigner deux propriétés du post processeur qui permettront le lancement automatique de cette routine de post traitement.
Cmd de post traitement - args: devra contenir "{$outfile}" (avec les ") ce sont les arguments à passer à la routine externe, ici le nom du fichier Gcode, qui sera retourné par la macro {$outfile}
Commande de post traitement: devra contenir le chemin d'accès à la routine de traitement (le fichier .exe)
Par exemple sur ce post processeur, la routine de post traitement s'appelle EDM_um.exe
Créer le code de programmation de la routine de traitement.
Dans le cas présent cette routine sera programmée en Visual Basic 2010 Express (on peut aussi utiliser du C# ou n'importe quel langage capable de produire un fichier .exe)
Dans Visual studio, créez un nouveau projet de type "application console", puis utiliser le menu Fichier/enregistrer tout, ici j'ai donné le nom de squelette à mon projet.
Voici un programme très simple qui remplace les les textes "G1Z" par "Z" dans les lignes de Gcode
C'est la ligne: line_out = Replace(line, "G1Z", "Z") qui fait le remplacement ; tout le reste sert à ouvrir le Gcode source, à le scanner ligne par ligne, et à créer le fichier de sortie modifié et est donc utilisable comme squelette pour n'importe quel traitement
(code copiable)
Je met également le code sous forme d'image afin de le voir dans son ensemble et de pouvoir distinguer les commentaires (en vert) plus facilement.
Pour compiler le code, utilisez le menu Générer ..... pour produire le fichier .exe
Le fichier résultant se trouvera (en principe) dans le dossier bin de votre projet Visual studio.
Il ne restera plus qu'à déplacer ou copier ce fichier .exe dans un dossier de votre choix et de mettre son chemin d'accès dans la variable Commande de post traitement du post processeur qui devra l'utiliser.
++
David
Un petit tuto pour expliquer comme créer un post traitement du Gcode pour CamBam.
Tout d'abord, qu'est ce qu'un post traitement ? ...
Lorsque l'on produit un Gcode, que ce soit avec CamBam ou avec tout soft de FAO, le soft utilise ce que l'on appel un post-processeur. Le travail du post-processeur et de formater le Gcode de façon à ce qu'il soit compréhensible par le soft de pilotage utilisé pour piloter la CN.
Tous les softs de pilotage n'utilisent pas exactement la même syntaxe ou les mêmes codes pour les commandes.
Par exemple un mouvement à la vitesse d'usinage jusqu'à la position xy 100,50 peut avoir des syntaxes un peu différentes suivant le soft de pilotage utilisé.
G1 X100 Y50
G01X100Y50
G01 X100.00 Y50.00
Ces trois exemples font la même chose, mais certains soft peuvent ne pas accepter le G1 mais uniquement le G01, ou ne pas accepter les espaces ou ne pas accepter de valeur sans point décimal ... etc
Parfois ce sont les codes qui changent, par exemple la commande de palpage c'est G31 sur Mach3, mais G38 sur LinuxCNc.
C'est le travail du post processeur de formater le Gcode de façon approprié pour qu'il puisse être lu par le logiciel de pilotage utilisé.
Toutefois, il arrive que certaines choses ne soit pas faisables directement avec le post processeur et donc le Gcode sorti ne correspond pas exactement à ce que l'on veut.
Un exemple simple, le post processeur permet de définir le nombre de décimales qui seront utilisées par les valeurs numériques écrites dans le Gcode, mais le réglage agit sur TOUTES les valeurs numériques du Gcode.
Par exemple une sortie à 3 décimales avec une commande de vitesse d'avance (F) et un déplacement en vitesse de travail (G1) donnera le résultat suivant:
F150.000
G1 X12.530 Y10.500
Problème, il y a un soft de pilotage (je ne sais plus lequel) qui ne supporte pas que l'on donne la valeur F avec des décimales, mais bien sur, on a besoin des décimales pour les mouvements, donc comme on ne peut pas faire de réglage de format séparés dans le post processeur pour F et pour les Gx, il faut ensuite éditer le GCode avec un éditeur de texte pour remplacer le F150.00 par un F150.
Le principe du post traitement, c'est de modifier automatiquement le Gcode produit à l'aide d'une routine externe qui fera la même chose que l'édition manuelle, à savoir modifier ce qui doit l'être dans le Gcode pour qu'il soit compatible avec le soft de pilotage ; La routine, qui sera lancé par le post processeur lira donc le Gcode juste après sa production, le traitera et produira un Gcode modifié.
Cette routine est à écrire par l'utilisateur dans un langage de programmation permettant de produire un fichier .exe
Coté post processeur, il faudra renseigner deux propriétés du post processeur qui permettront le lancement automatique de cette routine de post traitement.
Cmd de post traitement - args: devra contenir "{$outfile}" (avec les ") ce sont les arguments à passer à la routine externe, ici le nom du fichier Gcode, qui sera retourné par la macro {$outfile}
Commande de post traitement: devra contenir le chemin d'accès à la routine de traitement (le fichier .exe)
Par exemple sur ce post processeur, la routine de post traitement s'appelle EDM_um.exe
Créer le code de programmation de la routine de traitement.
Dans le cas présent cette routine sera programmée en Visual Basic 2010 Express (on peut aussi utiliser du C# ou n'importe quel langage capable de produire un fichier .exe)
Dans Visual studio, créez un nouveau projet de type "application console", puis utiliser le menu Fichier/enregistrer tout, ici j'ai donné le nom de squelette à mon projet.
Voici un programme très simple qui remplace les les textes "G1Z" par "Z" dans les lignes de Gcode
C'est la ligne: line_out = Replace(line, "G1Z", "Z") qui fait le remplacement ; tout le reste sert à ouvrir le Gcode source, à le scanner ligne par ligne, et à créer le fichier de sortie modifié et est donc utilisable comme squelette pour n'importe quel traitement
(code copiable)
- Code:
Imports System.IO
Module Module1
'squelette pour post traitement
Sub Main(ByVal args() As String)
Dim line, line_out As String 'des variables texte
Dim fname, outname As String
fname = args(0) 'lis les arguments passés à la routine par le PP, soit le nom du fichier GCode à traiter
If fname <> "" Then 'quitte la routine si pas de nom de fichier passé en argument
outname = Left(fname, Len(fname) - 3) 'outname contiendra le nom complet du fichier sans le '.nc'
Try
'ouverture du fichier source en lecture pour lecture ligne par ligne
Using sr As StreamReader = New StreamReader(fname)
'création d'un fichier de sortie en écriture pour produire un fichier temporaire
'avec le même nom que le fichier d'entrée, mais avec une extension .tmp
FileOpen(1, outname & ".tmp", OpenMode.Output)
Do 'boucle de lecture ligne par ligne
line = sr.ReadLine()
' traiter les lignes, ici on remplace simplement les textes "G1Z" par "Z"
' line_out = Replace(line, "G1Z", "Z") 'line_out contient le résultat du remplacement
'ecrire la ligne (modifié ou non) dans le fichier temporaire
PrintLine(1, line_out)
Loop Until line Is Nothing 'on boucle jusqu'à la fin du fichier
sr.Close() 'fermer le fichier d'entrée (.nc)
FileClose(1) 'fermer le fichier de sortie (.tmp)
FileSystem.Kill(fname) 'effacer ancien fichier .nc
FileSystem.Rename(outname & ".tmp", outname & ".nc") 'renommer le fichier temporaire en .nc
End Using
Catch E As Exception
' gestion erreurs
MsgBox("Erreur" & E.Message)
End Try
End If
End Sub
End Module
Je met également le code sous forme d'image afin de le voir dans son ensemble et de pouvoir distinguer les commentaires (en vert) plus facilement.
Pour compiler le code, utilisez le menu Générer ..... pour produire le fichier .exe
Le fichier résultant se trouvera (en principe) dans le dossier bin de votre projet Visual studio.
Il ne restera plus qu'à déplacer ou copier ce fichier .exe dans un dossier de votre choix et de mettre son chemin d'accès dans la variable Commande de post traitement du post processeur qui devra l'utiliser.
++
David
_________________
Traduction Française de CamBam et de sa documentation.
Re: Post traitement du Gcode avec Cambam
Interessant ce sujet.
Mais peut on remonter au dessin original 3d qui à servi à créer le gcode ?
Mais peut on remonter au dessin original 3d qui à servi à créer le gcode ?
dan25- je prends du galon
- Messages : 68
Points : 72
Date d'inscription : 25/10/2016
Age : 67
Localisation : Besançon
Re: Post traitement du Gcode avec Cambam
Salut,
Ta question n'a pas grand chose à voir avec le post traitement, mais la réponse est ... oui et non LOL
Vu qu'un Gcode représente des parcours d'outil, on peut récréer ces parcours depuis le Gcode, c'est ce que fait n'importe quel visualiseur de Gcode, y compris CamBam quand tu utilise une Opération "Importer Gcode", mais les parcours d'outil d'un Gcode d'usinage 3D ne représentent pas exactement une forme 3D mais tiennent compte de la forme de la fraise, ils sont donc décalés par rapport à la forme 3D d'origine, et ce décalage dépend de la forme de la fraise et de l'angle de contact fraise/objet.
Le parcours représentent le déplacement du bout de la fraise donc ils ne suivent pas exactement la forme 3D de départ.
Il existe un plugin qui permet de recréer une surface 3D depuis un Gcode de type balayage.
Ça se fait en plusieurs étapes:
1) ouvrir le Gcode représentant un balayage 3D dans Cambam > on obtient des parcours d'outil
2) Convertir ces parcours d'outil en géométries afin d'obtenir des polylignes correspondants exactement à ces parcours.
3) utiliser le plugin Nuage de points vers STL et sa fonction Pre-Processeur afin de convertir cette série de polyligne en un nuage de points
4) toujours avec le même plugin, utiliser le nuage de points que l'on vient de créer pour en faire un objet surface 3D
Le résultat sera d'autant plus proche de la réalité que l'outil qui à été utilisé pour produire le Gcode sera de petit Ø, car ça induira moins de défaut du à la compensation de la forme d'outil.
Voir la 2ieme vidéo
http://www.atelier-des-fougeres.fr/Cambam/Aide/Plugins/DigitizerFR.html
++
David
Ta question n'a pas grand chose à voir avec le post traitement, mais la réponse est ... oui et non LOL
Vu qu'un Gcode représente des parcours d'outil, on peut récréer ces parcours depuis le Gcode, c'est ce que fait n'importe quel visualiseur de Gcode, y compris CamBam quand tu utilise une Opération "Importer Gcode", mais les parcours d'outil d'un Gcode d'usinage 3D ne représentent pas exactement une forme 3D mais tiennent compte de la forme de la fraise, ils sont donc décalés par rapport à la forme 3D d'origine, et ce décalage dépend de la forme de la fraise et de l'angle de contact fraise/objet.
Le parcours représentent le déplacement du bout de la fraise donc ils ne suivent pas exactement la forme 3D de départ.
Il existe un plugin qui permet de recréer une surface 3D depuis un Gcode de type balayage.
Ça se fait en plusieurs étapes:
1) ouvrir le Gcode représentant un balayage 3D dans Cambam > on obtient des parcours d'outil
2) Convertir ces parcours d'outil en géométries afin d'obtenir des polylignes correspondants exactement à ces parcours.
3) utiliser le plugin Nuage de points vers STL et sa fonction Pre-Processeur afin de convertir cette série de polyligne en un nuage de points
4) toujours avec le même plugin, utiliser le nuage de points que l'on vient de créer pour en faire un objet surface 3D
Le résultat sera d'autant plus proche de la réalité que l'outil qui à été utilisé pour produire le Gcode sera de petit Ø, car ça induira moins de défaut du à la compensation de la forme d'outil.
Voir la 2ieme vidéo
http://www.atelier-des-fougeres.fr/Cambam/Aide/Plugins/DigitizerFR.html
++
David
_________________
Traduction Française de CamBam et de sa documentation.
dan25- je prends du galon
- Messages : 68
Points : 72
Date d'inscription : 25/10/2016
Age : 67
Localisation : Besançon
Re: Post traitement du Gcode avec Cambam
C'était pour savoir si ça existait. Dans mon cas c'est pour de l'impression 3D. Donc l'outil, la buse en l'occurence, suis la forme de la piece rigoureusement.
dan25- je prends du galon
- Messages : 68
Points : 72
Date d'inscription : 25/10/2016
Age : 67
Localisation : Besançon
Re: Post traitement du Gcode avec Cambam
Oui, mais en impression 3D, ce n'est pas du balayage mais un mode ligne de niveau, pas sur que tu puisse en tirer quelque chose avec ce plugin.
++
David
++
David
_________________
Traduction Française de CamBam et de sa documentation.
Re: Post traitement du Gcode avec Cambam
je viens d'essayer, même en mode "vase" (donc aucun remplissage ni d'épaisseur de parois), ça ne fonctionne pas, le résultat ne ressemble à rien ..
++
David
++
David
_________________
Traduction Française de CamBam et de sa documentation.
Re: Post traitement du Gcode avec Cambam
Bonsoir,
Merci David pour ce Tuto très intéressant.
Merci David pour ce Tuto très intéressant.
jeanalvitre- posteur Régulier
- Messages : 158
Points : 235
Date d'inscription : 26/11/2011
Age : 72
Localisation : Dep:19
Re: Post traitement du Gcode avec Cambam
Super cette fonctionnalité, elle pourrait par exemple servir a supprimer des lignes inutiles ?
(parfois cambam en génère )
(parfois cambam en génère )
ducran lapoigne- complétement accro
- Messages : 642
Points : 1277
Date d'inscription : 04/02/2012
Age : 75
Localisation : Athus Belgique du sud
Re: Post traitement du Gcode avec Cambam
Re
Oui, il n'y a quasiment pas de limite à ce que l'on peut faire, si ce n'est les capacités du programmeur bien sur
Le mieux c'est de faire le max avec le post pro et de ne réserver le post traitement que pour ce qui est impossible à faire avec le post pro.
Sur mon PP actuel, j'ai un post traitement qui élimine les doublons de Sxxx (vitesse de broche) car lors du passage d'une opération d'usinage à une autre, si CamBam ne remet pas un M3 (marche broche) à chaque nouvelle opération qui utilise le même outil (et donc que la broche ne s'est pas arrêtée), il remet par contre systématiquement la commande de vitesse, même s'il n'y a pas de changement de vitesse d'une op à l'autre, c'est problématique parfois car dès qu'il rencontre un Sxxx, même si la vitesse est la même que précédemment, Mach3 fait une pause de la durée donnée pour un démarrage broche avant de continuer l'usinage, c'est une perte de temps non négligeable quand tu usine des centaines de pièce, et en plus cette pause peut se produire alors que l'outil touche encore la matière ce qui n'est pas top, ni pour la fraise ni pour l'état de surface.
Ça peut aussi permettre d'ajouter des fonctionnalités non gérées, par exemple le GRBL ne comprends pas les G83 et G73, donc impossible de faire du perçage avec débourrage ou avec brise copeau, mais avec un post traitement, une routine peut transformer un G83 présent dans le Gcode en une série de G1 pour la plongé et de G0 pour la remonté. D'ailleurs sur Mach3, si le G83 est codé en dur dans le soft pour la fraisage, il est sous forme de programme Basic Script pour le tournage. (C:\Mach3\macros\Mach3Turn\M1083.m1s) .. bon il a un bug, que j'ai corrigé il y a quelque temps
++
David
Super cette fonctionnalité, elle pourrait par exemple servir a supprimer des lignes inutiles ?
Oui, il n'y a quasiment pas de limite à ce que l'on peut faire, si ce n'est les capacités du programmeur bien sur
Le mieux c'est de faire le max avec le post pro et de ne réserver le post traitement que pour ce qui est impossible à faire avec le post pro.
Sur mon PP actuel, j'ai un post traitement qui élimine les doublons de Sxxx (vitesse de broche) car lors du passage d'une opération d'usinage à une autre, si CamBam ne remet pas un M3 (marche broche) à chaque nouvelle opération qui utilise le même outil (et donc que la broche ne s'est pas arrêtée), il remet par contre systématiquement la commande de vitesse, même s'il n'y a pas de changement de vitesse d'une op à l'autre, c'est problématique parfois car dès qu'il rencontre un Sxxx, même si la vitesse est la même que précédemment, Mach3 fait une pause de la durée donnée pour un démarrage broche avant de continuer l'usinage, c'est une perte de temps non négligeable quand tu usine des centaines de pièce, et en plus cette pause peut se produire alors que l'outil touche encore la matière ce qui n'est pas top, ni pour la fraise ni pour l'état de surface.
Ça peut aussi permettre d'ajouter des fonctionnalités non gérées, par exemple le GRBL ne comprends pas les G83 et G73, donc impossible de faire du perçage avec débourrage ou avec brise copeau, mais avec un post traitement, une routine peut transformer un G83 présent dans le Gcode en une série de G1 pour la plongé et de G0 pour la remonté. D'ailleurs sur Mach3, si le G83 est codé en dur dans le soft pour la fraisage, il est sous forme de programme Basic Script pour le tournage. (C:\Mach3\macros\Mach3Turn\M1083.m1s) .. bon il a un bug, que j'ai corrigé il y a quelque temps
++
David
Dernière édition par dh42 le Dim 7 Juil 2024 - 21:03, édité 1 fois
_________________
Traduction Française de CamBam et de sa documentation.
Re: Post traitement du Gcode avec Cambam
dh42 a écrit:je viens d'essayer, même en mode "vase" (donc aucun remplissage ni d'épaisseur de parois), ça ne fonctionne pas, le résultat ne ressemble à rien ..
++
David
Merci pour ce retour
daniel
dan25- je prends du galon
- Messages : 68
Points : 72
Date d'inscription : 25/10/2016
Age : 67
Localisation : Besançon
Sujets similaires
» [Tuto impression 3D] Post traitement des pièces en PLA
» Post-pro Num sur Cambam...
» Sauvegarde GCode depuis CamBam
» Post Pro laser pour Cambam-Mach3
» lignes de Gcode avec CB
» Post-pro Num sur Cambam...
» Sauvegarde GCode depuis CamBam
» Post Pro laser pour Cambam-Mach3
» lignes de Gcode avec CB
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum