Welcome! Log In Create A New Profile

Advanced

Déterminer le nombre de couche dans un STL ???

Posted by sv650s 
Déterminer le nombre de couche dans un STL ???
November 14, 2014 08:57AM
Bonjour,

j'utilise Marlin + Ecran LCD + Repetier sur une Prusa i3
je souhaiterais savoir comment créer :

- 1 variable qui détermine le nombre total de couche du fichier STL sélectionné via l'écran LCD (ensuite je pourrais la transposer sur l'afficheur)

- 1 variable qui détermine le numero de la couche en cours d'impression (idem, je l'afficherais ensuite sur l'écran LCD)

J'ai déjà bien cherché dans le Marlin, mais pour le moment je n'ai rien trouvé…..
Savez vous comment procéder ? car créer une variable n'est pas compliqué, mais ce qu'il me manquec'est comment récupérer le nombre de couche du STL ….
Re: Déterminer le nombre de couche dans un STL ???
November 14, 2014 12:31PM
bonsoir,
bon je reposte , j'ai répondu dans l'autre; smiling smiley
je suis en train de décortiquer un gcode,rien de bien significatif.
et si il n'y avait pas de nombre de couches transmisent,
mais juste une lecture, et lorsque il n'y a plus de couche à faire, la machine s'arrete?
c'est mon hypothèse, pour l'instant.
Re: Déterminer le nombre de couche dans un STL ???
November 14, 2014 12:44PM
Compter les montées de Z dans le gcode après autolevelling, mais ça ne marchera que sur les machines cartésiennes... Et le STL ne peut pas avoir de couches, mais des faces.

Edited 1 time(s). Last edit at 11/14/2014 12:48PM by Zavashier.


Collective intelligence emerges when a group of people work together effectively. Prusa i3 Folger (A lot of the parts are wrong, boring !)
Re: Déterminer le nombre de couche dans un STL ???
November 14, 2014 12:57PM
alors alors il doit etre possible de trouver les infos qure nous cherchons.
voici un lien d'un analyseur de gcode.

il renvoi une multitude d'info a partir du g code sur la carte mémoire.
donc le fichier contient bien les infos , mais où ?
je cherche
a+
Re: Déterminer le nombre de couche dans un STL ???
November 14, 2014 01:34PM
peu etre fouiller dans ce fichier la dans marlin >dogm_lcd_implementation


[www.hotends.fr ]>>>[email protected] >>>GitHUB ([github.com])
My SketchFab >[sketchfab.com]
Re: Déterminer le nombre de couche dans un STL ???
November 14, 2014 03:01PM
Salut,
Quote

et si il n'y avait pas de nombre de couches transmisent,
mais juste une lecture, et lorsque il n'y a plus de couche à faire, la machine s'arrete?
Je ne suis pas sur de te comprendre ReprapREcycle. Il est où le lien smiling smiley C'est sûr qu'il n'y as pas le nombre de couche transmis a l'arduino, que se soit en ordre a exécuter ou en lecture.. Et lorsqu'il n'y as plus de couche a faire(donc a la fin de la dernière ligne), l'imprimante arrêt ces mouvements mais continu de chauffer, ventilé, etc... (dans le cas ou tu n'a pas fait de End G-code)...

L'idée proposé par Zavashier me semble la plus réalisable, a savoir a quel couche tu est. Mais toujours sans savoir combien tu devra en faire :/ (cartésien, delta ou ... dans tous les cas tu as la 3eme dimension Z donc sa devrait pas poser de problème sur autre chose que du cartésien..)


Alsacien du 68, ayant une prusa2 avec ramps1.4 et Aio
Re: Déterminer le nombre de couche dans un STL ???
November 14, 2014 04:21PM
je pense que si ça devait être possible de le faire simplement, le créateur de Merlin l'aurait d'office implémenté...
Re: Déterminer le nombre de couche dans un STL ???
November 14, 2014 05:58PM
Marlin est capable de lire toutes les infos de g-code dans le STL, et Marlin qu'en passant sur une commande Mxxx qu'il doit monter l'axe Z de tant
donc il est forcement possible de dire a Marlin que lorsqu'il rencontre cette commande Mxxx dans le fichier STL qu ´il faut qu'il incremente le compteur de couche
Ce qui pourrait faire un truc du genre :

Lecture du fichier stl
Si rencontre de la commande Mxxx
Faire couche = couche + 1
Affichage de la valeur de couche

Et ce qu'il me faudrait au minimum pour commencer, c'est où est effectue la lecture du fichier, et comment sont traitees les donnees
Je pense que cela se gere dans le "Marlin main.cpp"

Edited 1 time(s). Last edit at 11/14/2014 06:00PM by sv650s.
Re: Déterminer le nombre de couche dans un STL ???
November 14, 2014 11:17PM
oupps poour le lien :
le voici: [gcode.ws]
Re: Déterminer le nombre de couche dans un STL ???
November 16, 2014 05:20AM
Quote
sv650s
Marlin est capable de lire toutes les infos de g-code dans le STL, et Marlin qu'en passant sur une commande Mxxx qu'il doit monter l'axe Z de tant
donc il est forcement possible de dire a Marlin que lorsqu'il rencontre cette commande Mxxx dans le fichier STL qu´il faut qu'il incremente le compteur de couche
Ce qui pourrait faire un truc du genre :

Lecture du fichier stl
Si rencontre de la commande Mxxx

Faire couche = couche + 1
Affichage de la valeur de couche
Attention sv650s. Le STL c'est le fichier 3D, la modélisation de l'objet, le volume quoi. Il ne contient aucun gcode. Le gcode, ce sont les informations de pilotage d'une machine incluant le parcours d'outil pour produire le volume. STL et gcode n'ont pas d'informations en commun. L'un est issu des informations de l'autre, voila tout. c'est le .gcode qui contient... le code interprété par Marlin.


Collective intelligence emerges when a group of people work together effectively. Prusa i3 Folger (A lot of the parts are wrong, boring !)
Re: Déterminer le nombre de couche dans un STL ???
November 16, 2014 01:14PM
en effet c'est bien les infos de commande Mxx sur le g-code à imprimer qu'il faut réussir à extraire
désolé pour la confusion
Re: Déterminer le nombre de couche dans un STL ???
November 17, 2014 08:43AM
Bonjour,

CURA donne toutes ces infos : (extrait d'un .GCO)

;Layer count: 66
;LAYER:0
M107
G0 F7800 X139.184 Y98.911 Z0.300
G0 X139.830 Y98.020
;TYPEconfused smileyKIRT
G1 F900 X140.577 Y97.183 E0.05597
G1 X141.403 Y96.427 E0.11183
.......................................
G1 F900 X149.397 Y99.900 E29.37763
G0 F7800 X151.226 Y100.597
G1 F900 X152.904 Y102.275 E29.49602
;LAYER:1
M106 S127
G0 F7800 X153.951 Y105.501 Z0.450
;TYPE:WALL-INNER
G1 F900 X153.871 Y106.047 E29.50979
G1 X153.735 Y106.601 E29.52402
.......................................
G1 F900 X152.609 Y101.415 E289.95663
G0 F7800 X152.428 Y102.365
G1 F900 X153.809 Y103.745 E290.00533
;LAYER:65
G0 F7800 X153.568 Y107.380 Z10.050
;TYPE:WALL-INNER
G1 F900 X153.309 Y107.867 E290.01909
G1 X152.998 Y108.334 E290.03309

J'espère que ca fera avancer vos recherches.

A ++
Re: Déterminer le nombre de couche dans un STL ???
November 17, 2014 08:57AM
oui, dans repetier aussi tu peux avoir le nombre de couches
la question est comment récupérer cette info dans le firmware Marlin.....

Edited 1 time(s). Last edit at 11/17/2014 08:57AM by sv650s.
Re: Déterminer le nombre de couche dans un STL ???
November 17, 2014 09:34AM
Hello
A part analyzer chaque GCode qui entre afin de trouver chaque mouvement en Z - je ne vois pas d'autre solution.
Pour commencer ce n'est pas la commande Mxxx qu'il faut détecter mais un G0 avec un paramètre Z indiqué...
Ensuite il ya une fonction code_seen('Z') voir exemple vers la ligne 1172 du fichier Marlin_main.cpp qui peut être appelée au niveau du switch qui traite les G0 et G1
Si un paramètre Z est présent - on incrémente le compteur etc.... Reste l'affichage -
Celà dit ça peut être optimisé et pas trop compliqué à faire- j'ai fait pire dans le marlin qui tourne sur mon imprimante.

A+ Didier
Re: Déterminer le nombre de couche dans un STL ???
November 17, 2014 10:46AM
Si tu sais exactement ce qu'il y a a faire je veux bien un gros coup de main
pour isoler cette commande "G0 Z..."
Pour l'incrementation, je sais faire et pour l'affichage il n'y a pas de soucis non plus
C'est vraiment la façon de trouver la fonction de montee du Z qui me bloque
Donc si tu peux m'en dire plus, j'ouvre grands mes oreilles !!!

Par contre en ligne 1172 je vois ceci... (Sur internet car je ne suis pas chez moi)
#ifndef Z_PROBE_SLED

Edited 2 time(s). Last edit at 11/17/2014 10:52AM by sv650s.
Re: Déterminer le nombre de couche dans un STL ???
November 17, 2014 11:14AM
Z Probe doit avoir quelque chose à voir avec la sonde de positionnement en Z, Auto bed leveling ou un,truc comme ça. Rien à voir avec les couches.
Je ne suis pas un pro de la programmation, mais il faudra sans doute un code qui scanne le code, compare les valeurs Zxxx derrière G0 et en déduit un nombre de lignes.
Il faudrait que le code soit dans une boucle pendant l'initialisation. Là tu aurais ton compte de couches.
Ensuite dans l'éxécution du gcode, il faudrait un programme en backline qui incrémente à chaque mouvement de Z, toujours comparé à la valeur précédente, et retourne la couche en cours.
Il faudrait déclarer 4 variables en plus du code. Ce dernier me parrait pas simple à réaliser. En tous cas c'est un programme en plus, il faut faire gaffe que ça ne bogue pas marlin.
Tu devrais fouiller le code de repetier host pour savoir comment c'est fait chez eux. C'est peut-être une variable générée lors de la stratification et non intégrée dans le code.
Tiens ça serait intéressant de savoir si repetier firmware prend les couches ou pas.


Collective intelligence emerges when a group of people work together effectively. Prusa i3 Folger (A lot of the parts are wrong, boring !)
Re: Déterminer le nombre de couche dans un STL ???
November 17, 2014 12:08PM
Hello
Je dirais d'ajouter le code en rouge dans le fichier Marlin_main.cpp
La variable compteur doit être globale , de type int et initialisée.
C'est juste la détection d'un paramètre Z - à priori ça devrait compiler
Pour le nombre total de couches - là ça va être un peu compliqué car le Gcode est envoyé ligne par ligne - marlin ne peut pas déterminer tout au début le nombre total de couches.
Une astuce serait d'utiliser un gcode bidon qui contient le nombre de couches que tu envoies au début mais là c'est après la génération du gcode que tu dois ajouter cette ligne manuellement.

A+

if(code_seen('G'))
  {
    switch((int)code_value())
    {
    case 0: // G0 -> G1
    case 1: // G1
      if(Stopped == false) {
        get_coordinates(); // For X Y Z E F
          #ifdef FWRETRACT
            if(autoretract_enabled)
            if( !(code_seen('X') || code_seen('Y') || code_seen('Z')) && code_seen('E')) {
              float echange=destination[E_AXIS]-current_position[E_AXIS];
              if((echange<-MIN_RETRACT && !retracted) || (echange>MIN_RETRACT && retracted)) { //move appears to be an attempt to retract or recover
                  current_position[E_AXIS] = destination[E_AXIS]; //hide the slicer-generated retract/recover from calculations
                  plan_set_e_position(current_position[E_AXIS]); //AND from the planner
                  retract(!retracted);
                  return;
              }
            }
          #endif //FWRETRACT
        //Debut
        if(code_seen('Z')){
          compteur++;
        }
        //Fin
        prepare_move();
        //ClearToSend();
        return;
      }

Edited 1 time(s). Last edit at 11/17/2014 01:27PM by didierh.
Re: Déterminer le nombre de couche dans un STL ???
November 17, 2014 02:30PM
Super merci pour les infos !
J'espere que cela va etre bon
Je regarde ça ce soir lorsque je rentrerais du taff
Et je vous tiens au courant
Re: Déterminer le nombre de couche dans un STL ???
November 17, 2014 05:02PM
j'ai un autre petit problème….
je ne sais pas ou déclarer ma variable "int couchez=1;" pour qu'elle soit utilisable dans :
"marlin_main.cpp" et dans "dogm_lcd_implementation.h"
en fait je ne sais pas comment passer une variable qui se trouve dans le "marlin_main.cpp"
a "dogm_lcd_implementation.h" .......

une idée ?

Edited 2 time(s). Last edit at 11/18/2014 03:18AM by sv650s.
Re: Déterminer le nombre de couche dans un STL ???
November 18, 2014 04:18AM
Cherche C++ variable globale winking smiley


Collective intelligence emerges when a group of people work together effectively. Prusa i3 Folger (A lot of the parts are wrong, boring !)
Re: Déterminer le nombre de couche dans un STL ???
November 18, 2014 04:23AM
c'est ce que j'ai fait...
j'ai fait comme indiqué en plaçant la variable dans le "malin_main.cpp" en dehors de toute fonction pour qu'elle soit globale
mais lorsque je compile , j'ai une erreur "variable not declare in this score" dans le "dogm_lcd_implentation.h"
il doit y avoir autre chose à faire mais quoi ?

dans le "marlin_main.cpp" j'ai fait :
au tout début du .cpp j'ai mis (en dehors de toute fonction, juste après les "include")

int couchez = 1;

et ensuite

if(code_seen('G'))
  {
    switch((int)code_value())
    {
    case 0: // G0 -> G1
    case 1: // G1
      if(Stopped == false) {
        get_coordinates(); // For X Y Z E F
          #ifdef FWRETRACT
            if(autoretract_enabled)
            if( !(code_seen('X') || code_seen('Y') || code_seen('Z')) && code_seen('E')) {
              float echange=destination[E_AXIS]-current_position[E_AXIS];
              if((echange<-MIN_RETRACT && !retracted) || (echange>MIN_RETRACT && retracted)) { //move appears to be an attempt to retract or recover
                  current_position[E_AXIS] = destination[E_AXIS]; //hide the slicer-generated retract/recover from calculations
                  plan_set_e_position(current_position[E_AXIS]); //AND from the planner
                  retract(!retracted);
                  return;
              }
            }
          #endif //FWRETRACT

        if(code_seen('Z')){
          couchez++;
        }

        prepare_move();
        //ClearToSend();
        return;
      }

et enfin dans le "dom_lcd_implementation" j'ai ajouté ceci en dessous de tous les u8g. de la partie //X, Y, Z-Coordinates :

u8g.setPrintPos(65,30);
u8g.print(couchez);

Qu'est ce qui ne va pas ? qu'est ce que j'ai oublié ?

Edited 6 time(s). Last edit at 11/18/2014 06:10AM by sv650s.
Re: Déterminer le nombre de couche dans un STL ???
November 18, 2014 04:44AM
bon j'ai réussi à compiler en changeant comme suit (je me suis basé sur la variable "fanSpeed" qui est dans le Marlin) :
- j'ai laissé le "dom_lcd_implementation" comme ci dessus
- j'ai laissé le "marlin_main.cpp" comme ci dessus aussi
- et dans le "marin.h" j'ai ajouté sous la ligne "extern int fanSpeed" :

extern int couchez;

je teste et je vous retiens au courant
Re: Déterminer le nombre de couche dans un STL ???
November 18, 2014 05:05AM
Cela fonctionne !!!! il faut juste initialiser la variable à 0 et non à 1

cependant si je relançais une impression dans la foulée, le compteur "couchez" n'est pas remis à 0
il a donc fallu que je rajoute "couchez = 0" dans "marin_main.cpp" dans la fonction :
case 24 : //M24 - Start SD print

- reste désormais à déclarer une variable pour compter le nombre total de couche
donc un nouveau coup de main serait le bienvenue

Et surtout un gros merci à vous pour votre aide !!!

Edited 3 time(s). Last edit at 11/18/2014 05:35AM by sv650s.
Re: Déterminer le nombre de couche dans un STL ???
November 18, 2014 06:03AM
Hello
certain que tu as mis ce morceau de code ou bien tu as remplacé compteur par couchez ???
if(code_seen('Z')){
          compteur++;
        }

Ton compteur de couches tu l'as avec le code que tu as écrit. Pour ce qui est du total tu dois attendre la fin de l'impression...

A+

Edited 1 time(s). Last edit at 11/18/2014 06:04AM by didierh.
Re: Déterminer le nombre de couche dans un STL ???
November 18, 2014 06:11AM
c'est rectifié dans le post du dessus , j'ai bien remplacé compteur++ par couchez++

pour ce qui est du nombre total de couche, on peut l'avoir avant la fin de l'impression
en lisant le fichier g-code en entier et en comptant les 'Z' rencontrés que l'on place dans un compteur
pour le moment je ne sais pas comment lire le fichier g-code jusqu'à la fin

la fonction de comptage serait la même, mais il me manque la fonction "lire le g-code jusqu'à la fin" ...

Edited 1 time(s). Last edit at 11/18/2014 06:13AM by sv650s.
Re: Déterminer le nombre de couche dans un STL ???
November 18, 2014 06:17AM
Et c'est pas possible de l'inclure directement dans la génération de gcode via repetier ?


Collective intelligence emerges when a group of people work together effectively. Prusa i3 Folger (A lot of the parts are wrong, boring !)
Re: Déterminer le nombre de couche dans un STL ???
November 18, 2014 06:32AM
bonne question je ne sais pas si on peut l'enregistrer dans le g-code pour pouvoir le récupérer sous marlin
de plus je ne sais pas quelle fonction pourrait permettre de récupérer cette valeur....
Re: Déterminer le nombre de couche dans un STL ???
November 18, 2014 07:44AM
Hello

je pense que ne tu lis pas entièrement les réponses qu'on te donne - des fois ça me donne l'impression de perdre mon temps à aider.
Dans marlin tu n'as pas le gcode en entier - juste quelques lignes dans un buffer (5 de mémoire)
c'est le programme host (sur PC/MAX/LINUX) qui envoie ligne par ligne vers marlin via la communication du port série.
Bref dans l'état actuel ce n'est pas possible d'obtenir le nombre de couches total au début.
A la fin de l'impression oui - c'est le contenu de ta variable "couchez"

A+ Didier
Re: Déterminer le nombre de couche dans un STL ???
November 18, 2014 08:12AM
Desole si je te donne l'impression de te faire perdre ton temps, ce n'est pas le but
Je ne connais pas grand chose en arduino, et ce n'est pas evident loin de la.
Par contre tu dis que les lignes sont envoyees par repetier en ligne par ligne
Cependant, dans le cas present tout est gere par un ecran LCD avec aucune connexion au PC
Donc dans le G-code, il y a forcement toutes les infos, sinon comment pourrait on imprimer un objet.
Dans la precieuse aide que tu m'as apporte concernant le comptage en temps reel, le fichier est lu ligne
par ligne si je comprends bien
Donc qu'est ce qui nous empecherait de faire une lecture totale du fichier lors de sa selection sur
l'ecran LCD, en incrementant un compteur a chaque rencontre d'une commande Z

#include 

File myFile;

void setup()
{
  Serial.begin(9600);
   while (!Serial) {
  }
myFile = SD.open("test.txt");
    while (myFile.available){
           If(code_seen('Z')){
                 Totalcouchez++;
           }
    }
    myFile.close();
}

C'est juste pour donner l'idee generale, sur la façon dont je vois la chose

Encore une fois, je suis desole d'insister, mais je ne comprends pas (a mon minuscule niveau) pourquoi cela ne serait pas possible

Et dans le pire des cas, existe t'il une commande dans repetier qui permettrait d'ecrire le nombre de couches totales dans le g-code
que l'on pourrait recuperer ensuite via Marlin ? Car actuellement apres avoir slice l'objet via repetier dans la fenetre du g-code
j'ai une ligne "layer_count = ;"
Autrement dit le calcul du nombre de ligne n'est pas fait... Je suppose qu'il doit y avoir une commande a inserer dans les conditions du g-code
sous repetier mais laquelle ?

Merci pour votre aide

Edited 3 time(s). Last edit at 11/18/2014 11:40AM by sv650s.
Re: Déterminer le nombre de couche dans un STL ???
November 18, 2014 05:21PM
Le g-code (G-quelque chose; M-quelque chose pour du M-code) n'as pas de fonction pour donner le nombre de couche totale. Au début de malin_main.cpp tu as toute les commandes que le firmware comprend...

Quote
SV650
Autrement dit le calcul du nombre de ligne n'est pas fait... Je suppose qu'il doit y avoir une commande a inserer dans les conditions du g-code
sous repetier mais laquelle ?
Regarde le poste de manu-406, tu as le nombres de couche totale via le tranchage par cura ainsi que la couche que tu imprime que l'on retrouve dans le log de repetier-host. Manque de bol, c'est qu'un commentaire et n'est pas envoyer vers l'arduino (corriger moi si je me trompe), et n'est qu'interpréter par l'host-repetier.

Ce que Didierh veux dire (avec sd ou pc) l'arduino lit ligne par ligne et a un tampon d'environ 5lignes cad qu'il envoie par exemple les 5 première ligne en exécute une... une fois celui-ci exécuté, il exécute la ligne suivante et pendant ce temps, il rajoute la 6eme ligne dans le tampon et ainsi de suite.. Utilité: lorsque tu imprime un rectangle, il va faire un long déplacement en X et 0 en Y. Ce mouvement va prendre un certain temps.. mais si il s'attaque a un cercle (par exemple) et va donné une multitude de segment (droit) qui va créer un cercle. Dans ce cas là, les lignes exécuter par l'arduino va très vite d’où l'utilité d'avoir ce tampon pour évité que ton arduino n'attende l'arriver de la prochaine ligne de ton PC/carte SD

SVgrinning smileyonc dans le G-code, il y a forcement toutes les infos, sinon comment pourrait on imprimer un objet.
oui exacte ligne par ligne..on n'y revient

SVgrinning smileyonc qu'est ce qui nous empecherait de faire une lecture totale du fichier lors de sa selection sur l'ecran LCD, en incrementant un compteur a chaque rencontre d'une commande Z
On y revient... il sait pas faire, il lit ligne par ligne

PS: bon j'étale ma science alors que j'aurai été incapable de faire se que tu as fait alors confused smiley


Alsacien du 68, ayant une prusa2 avec ramps1.4 et Aio
Sorry, only registered users may post in this forum.

Click here to login