Mon G code s'exécute d'un seul coup et non ligne par ligne

O

Orikhan

Nouveau
Bonjour tout le monde,

J'essaye actuellement de contrôler une machine avec du Gcode. J'utilise une carte Rambo (imprimante 3D) avec le firmware Marlin dessus.
Pour ce faire, je génère moi même mon Gcode en créant un fichier texte que je renomme en .gcode. Ensuite je charge mon fichier dans un logiciel qui me permet de communiquer avec ma carte (j'ai essayé repetier host et printrun), le fichier est reconnue et le logiciel estime le temps d'exécution à 1min 21, ce qui est cohérent, donc je lance l'exécution du gcode et là mon code s'exécute d'un seul coup.
Le logiciel me dit que l'exécution a duré 4 secondes pourtant la machine continue de tourner
1673266621989.png

Les lignes qui commencent par G continue de s'exécuter dans l'ordre mais les lignes qui commencent par M s'exécutent dès que possible en même temps que les ligne en G (qu'elles soient à la fin ou au début)

Je suis débutant en G code donc il y a certainement quelque chose qui m'échappe, mais je n'arrive pas à savoir quoi. Je voudrais juste que mon Gcode s'exécute ligne par ligne et qu'il attende la fin d'une ligne pour passer à la suivante

Merci d'avance pour votre aide !!!

Capture d’écran 2023-01-09 131514.png
 
M

MegaHertz

Compagnon
Bonjour,

C'est tout à fait normal.
L'imprimante charge le buffer et execute comme elle peut mais si on ne fait pas ça l'impression serait dégeulasse avec des boules de plastique de partout.

Ce que tu cherches à faire se rapproche plutôt d'une utilisation de l'imprimante à travers Octoprint
 
O

Orikhan

Nouveau
Bonjour,

C'est tout à fait normal.
L'imprimante charge le buffer et execute comme elle peut mais si on ne fait pas ça l'impression serait dégeulasse avec des boules de plastique de partout.

Ce que tu cherches à faire se rapproche plutôt d'une utilisation de l'imprimante à travers Octoprint
D'accord je vois, mais du coup est ce qu'il y a un moyen de faire en sorte que les lignes s'exécutent dans l'ordre ??
Parce que la ligne M280 P0 S110 (fin de programme) s'exécute en même temps que la ligne G1 Z15 F1800 (début de programme), en gros les Ventilos s'activent au tout début alors que je voudrais qu'ils s'activent à la fin
 
M

M4vrick

Compagnon
J'ai beaucoup de mal à comprendre ce que tu essayes de faire avec ton gcode. Il y a des choses pas logiques.

Par exemple tu te déplaces avec un G0 et une coordonnées X et ensuite tu envoies un G92 pour lui dire qu'il n'est plus à X mais à X0.
Tu répètes plusieurs commandes M201 identique en cours de code, une seule en entête suffit.
le M106 qui ne sert pas à grand chose non plus puisque toujours identique, sauf quand tu enchaines 0 et 255 pourle repasser à 0 presque immédiatement.
Tu as du G0 avec un F négatif, pas sur que ca soit supporté ou bien interprété

Pourrais-tu nous expliquer ce que tu essayes de faire? Ou le pourquoi de ce code spécifiquement ?
 
M

MegaHertz

Compagnon
D'accord je vois, mais du coup est ce qu'il y a un moyen de faire en sorte que les lignes s'exécutent dans l'ordre ??
Parce que la ligne M280 P0 S110 (fin de programme) s'exécute en même temps que la ligne G1 Z15 F1800 (début de programme), en gros les Ventilos s'activent au tout début alors que je voudrais qu'ils s'activent à la fin
Tu confonds transfert série et exécution sur l'imprimante.

Sur ton PC ça se termine très vite parce que ton imprimante n'est pas saturée et qu'elle peut continuer d'attraper et stocker des caractères du GCode.
Mais comme tu le dis toi même quand le PC dit que c'est fini l'imprimante commence à peine.

Le GCode s'éxécute bien ligne par ligne du côté imprimante.

Tu as un M280 à la ligne 6 : c'est ce qui met ton ventilo en route et pas le tout dernier.
D'ailleurs les M280 suivants ne servent à rien vu que la valeur S ne change jamais.

En GCode une instruction à propos de la température ou de la ventilation ne s'arrête pas quand on change de ligne.
Une fois que tu règles une température ou une ventil ou que tu allumes une LED ça reste jusqu'à ce que tu ajoutes une ligne qui le coupe.
 
O

Orikhan

Nouveau
J'ai beaucoup de mal à comprendre ce que tu essayes de faire avec ton gcode. Il y a des choses pas logiques.

Par exemple tu te déplaces avec un G0 et une coordonnées X et ensuite tu envoies un G92 pour lui dire qu'il n'est plus à X mais à X0.
Tu répètes plusieurs commandes M201 identique en cours de code, une seule en entête suffit.
le M106 qui ne sert pas à grand chose non plus puisque toujours identique, sauf quand tu enchaines 0 et 255 pourle repasser à 0 presque immédiatement.
Tu as du G0 avec un F négatif, pas sur que ca soit supporté ou bien interprété

Pourrais-tu nous expliquer ce que tu essayes de faire? Ou le pourquoi de ce code spécifiquement ?
Oui j'ai fait un programme sous excel qui génère du Gcode en fonction de cycle etc., ce qui fait que j'ai beaucoup de lignes inutiles ou de répétitions

Pour simplifier, si je fais ça:
;Initialisation
M92 X1600 Z251.2 M90
M907 X500 Z500
M203 X3 Z30
M201 X2 Z100

'Cycle
M280 P0 S50
G1 Z115 F1800
G1 Z0 F1800
M280 P0 S110 --> Ici cette ligne va s'exécuter avec avant que la ligne "G1 Z115 F1800" ait terminé, alors que la ligne "G1 Z0 F1800" n'a pas encore était exécuté

Le problème c'est vraiment que les commande en M s'exécutent avant ou indépendamment des commandes en G

Plus spécifiquement, la commande M280 exploite une PWM qui controle un servo moteur, et je voudrais activer ce servo moteur à la fin du Gcode, après avoir déplacé les moteurs (X et Z) dans tous les sens
La machine est un prototype pour un robot de cuisine pour qui n'a rien à voir avec une imprimante, hormis qu'elle utilise les même composants

J'espère que j'ai été plus claire
Merci pour ton aide
 
O

Orikhan

Nouveau
Tu confonds transfert série et exécution sur l'imprimante.

Sur ton PC ça se termine très vite parce que ton imprimante n'est pas saturée et qu'elle peut continuer d'attraper et stocker des caractères du GCode.
Mais comme tu le dis toi même quand le PC dit que c'est fini l'imprimante commence à peine.

Le GCode s'éxécute bien ligne par ligne du côté imprimante.

Tu as un M280 à la ligne 6 : c'est ce qui met ton ventilo en route et pas le tout dernier.
D'ailleurs les M280 suivants ne servent à rien vu que la valeur S ne change jamais.

En GCode une instruction à propos de la température ou de la ventilation ne s'arrête pas quand on change de ligne.
Une fois que tu règles une température ou une ventil ou que tu allumes une LED ça reste jusqu'à ce que tu ajoutes une ligne qui le coupe.
Merci pour tes réponses, je clarifie un peu plus car je vois que je n'ai pas été assez précis
En vérité c'est un servo moteur qui est relié à la commande M280 (ca se gère pareil qu'un ventilo), du coup M280 S50, le servo moteur est en position basse, et M280 S110 en position haute

La commande M280 est sur 50 tout du long sauf à la fin ou elle passe à 110; hors quand j'envoie le Gcode pour l'exécuter, le servo moteur se met en position haute et retourne instantanément en position basse au début du programme (pendant l'exécution de la ligne 14 qui prend un petit moment)
Donc j'en ai conclu que les commande M (M280 par ex) s'exécute indépendamment des commandes G (G1...), mais je comprends pas pourquoi

Merci pour ton aide!!!
 
M

MegaHertz

Compagnon
La commande M280... Commande de servo.
Sur une imprimante etr avec un Marlin standard ça n'est pas implémenté.

J'ai du mal à imaginer que Marlin mette les choses dans le désordre.
Possible aussi que cette commande là soit exécutée en temps réel sans tenir compte du planificateur de trajectoire.

D'ou vient ton Marlin ?

Est ce que c'est toi qui as ajouté l'implémentation du M280 ?

Je ne sais pas trop ce que tu cherches à faire mais si tu pars d'un Marlin pour imprimante 3D il vaudrait mieux rester sur ce qui est normalement contrôlé dans une imprimante 3D : Ventilo, extrudeur...
 
Dernière édition:
M

M4vrick

Compagnon
Je comprends mieux ton besoin, je ne pense pas que Marlin soit la bonne solution du coup. Il est vraiment optimisé pour l'impression 3D, et le gcode n'est pas tout à fait standard.

Tu devrais plutot regarder du coté de GRBL, c'est spécifiquement adapté pour controler une machine outil et tu auras bien plus de possibilités.
 
S

speedjf37

Compagnon
Bonjour,

Un simple problème de fin de ligne !

Replacer le LF par CRLF

Édit: dépend de l'éditeur utilisé

Jf
 
O

Orikhan

Nouveau
La commande M280... Commande de servo.
Sur une imprimante etr avec un Marlin standard ça n'est pas implémenté.

J'ai du mal à imaginer que Marlin mette les choses dans le désordre.
Possible aussi que cette commande là soit exécutée en temps réel sans tenir compte du planificateur de trajectoire.

D'ou vient ton Marlin ?

Est ce que c'est toi qui as ajouté l'implémentation du M280 ?

Je ne sais pas trop ce que tu cherches à faire mais si tu pars d'un Marlin pour imprimante 3D il vaudrait mieux rester sur ce qui est normalement contrôlé dans une imprimante 3D : Ventilo, extrudeur...
J'ai pris le marlin "officiel" sur le site marlin et le l'ai configuré, il y a une section "servo" à la toute fin du fichier de configuration, j'ai juste indiqué qu'il y avait un servo moteur et ca a débloqué la commande M280

La commande existe bien sur le site:
1673273224330.png



Pour ce que je cherche à faire, c'est juste faire tourner les moteur (X et Z) et activer le servo moteur à un certain moment, rien de bien sorcier en théorie si le Gcode s'exécute dans l'ordre


Par contre en effet, c'est peut etre lié que à la commande M280, car j'ai aussi la commande M106 qui est similaire, et celle ci s'exécute au bon moment, je vais essayer de trouver comment s'exécute la commande M280, merci!!
 
O

Orikhan

Nouveau
Bonjour,

Un simple problème de fin de ligne !

Replacer le LF par CRLF

Édit: dépend de l'éditeur utilisé

Jf
Bonjour, j'ai essayé les deux et le problème ne reste le même
J'ai pris la syntaxe d'un "vrai" fichier Gcode pour faire le mien

Mais on penche plus sur un problème lié uniquement à la commande M280 du coup (puisque la commande M106 s'exécute au bon moment et pas la 280)

Merci pour ton aide
 
O

Orikhan

Nouveau
Je comprends mieux ton besoin, je ne pense pas que Marlin soit la bonne solution du coup. Il est vraiment optimisé pour l'impression 3D, et le gcode n'est pas tout à fait standard.

Tu devrais plutot regarder du coté de GRBL, c'est spécifiquement adapté pour contrôler une machine outil et tu auras bien plus de possibilités.
Ca marche, je vais regarder GRBL, c'est vrai que j'ai pris ce que j'avais à ma disposition, j'essaye quand même de résoudre le problème avant
 
O

Orikhan

Nouveau
Mets voir un M400 avant ton M280
En effet, Ca fonctionne!!!! je connaissais pas la commande !!
Merci beaucoup; je vais mettre des M400 partout maintenant :smt023
 
M

M4vrick

Compagnon
Personnellement si c'est pour bidouiller une solution de dépannage ca va.

Mais si tu veux avoir une machine qui fonctionne correctement je te conseille vraiment d'abandonner Marlin et de passer sur GRBL. Tu vas t'épargner beaucoup de soucis de gestion et de fonctionnement.
Coller des M400 partout c'est vraiment pas propre.
 
O

Orikhan

Nouveau
Personnellement si c'est pour bidouiller une solution de dépannage ca va.

Mais si tu veux avoir une machine qui fonctionne correctement je te conseille vraiment d'abandonner Marlin et de passer sur GRBL. Tu vas t'épargner beaucoup de soucis de gestion et de fonctionnement.
Coller des M400 partout c'est vraiment pas propre.
Oui oui, pour le moment je me dépanne avec le marlin, j'ai pas besoin que ce soit propre, mais juste que ca fonctionne. Je regarderais GRBL pour faire quelque chose de fini. C'est juste que je découvre un peu le monde du gcode, donc j'ai certainement pas fait les choix les plus pertinents pour le firmware et la carte.

En tout cas, merci tout le monde pour votre aide
 
S

speedjf37

Compagnon
Ce que tu cherches à faire se rapproche plutôt d'une utilisation de l'imprimante à travers Octoprint

????
Que le fichier soit géré par repetierhost ou Octoprint, quelle différence ?

Édit : les servos dans grbl pas si évident
Jf
 
M

M4vrick

Compagnon
????
Que le fichier soit géré par repetierhost ou Octoprint, quelle différence ?

Édit : les servos dans grbl pas si évident
Jf

Ca me semble bien plus évident d'avoir une sortie PWM sur GRBL que sur Marlin.
 
M

MegaHertz

Compagnon
Au fait, ça peut être bien de mettre un M400 dans le slicer pour imprimantes FDM.
Ou ça ?
Layer change GCode
Retraction GCode
 

Sujets similaires

M
Réponses
5
Affichages
1 004
MegaHertz
M
M
Réponses
14
Affichages
1 409
Mika2A
M
jpbbricole
Réponses
113
Affichages
23 676
sabeldom
S
Nomadsoul
Réponses
34
Affichages
10 460
speedjf37
S
syvain9
Réponses
47
Affichages
18 121
Papynano
Papynano
dh42
Réponses
87
Affichages
24 835
rtlp14
R
F
Réponses
23
Affichages
12 363
phil135
P
Haut