Badid Posté(e) il y a 4 heures Posté(e) il y a 4 heures (modifié) Bonjour à toutes et tous, J'enfonce peut-être une porte ouverte, mais je bute sur un problème semblant assez simple (et pourtant peut docummenté) ... En effet, j'essaie de créer une boucle de 10s avec une macro de contrôle qui se lancerait au démarrage de la machine ... et ... sans succès ! Je m'explique, Sur mon projet, je chauffe la chambre d'impression (avec un chauffage, en plus des plateaux - "heater_generic") et je la refroidie (avec un ventillateur - "temperature_fan"). Klipper ne supportant pas de partager une thermistance, j'en ai donc deux. Une pour le "Heater" et une pour le "Fan". De là, avec un positionnement adéquate (relativements ecartées), la différence de température entre les deux sondes peut m'apporter une informations substantielle sur un potentiel incendit dans la chambre d'impression. L'idée est : Après un check toutes les 10s, si la différence de température entre les deux sondes est supérieure à 2°C, alors PANIQUE et je coupe tout !!! Mais comment faire ... ? J'ai essayé avec : - Un [delayed_gcode] qui appel une macro, qui rappelle le [delayed_gcode] - sans succès ! - Le module "DynamicMacros" qui devrait permettre de créer des macros récursives - sans succès ! Une grossière erreur de ma part ? Une solution inexploitée ? Une autre idée ? Modifié (le) il y a 3 heures par pascal_lb
pascal_lb Posté(e) il y a 3 heures Posté(e) il y a 3 heures il y a 38 minutes, Badid a dit : Une autre idée ? tu veux faire ce contrôle pendant l'impression, avant l'impression, les 2 ? Au lieu de lancer ton contrôle toutes les x secondes pourquoi ne pas lancer ta macro à chaque changement de couche là c'est pour le contrôle pendant l'impression bien évidement
Badid Posté(e) il y a 3 heures Auteur Posté(e) il y a 3 heures Pendant l'impression, pas de problèmes. Mais l'idée était de surveiller en continu (pendant les périodes de pré-chauffe) ...
fran6p Posté(e) il y a 3 heures Posté(e) il y a 3 heures (modifié) il y a une heure, Badid a dit : Klipper ne supportant pas de partager une thermistance Pourtant, avec une section [duplicate_pin_overrride], c'est ce que j'utilise régulièrement. Avec Klipper (jinja), les boucles n'existent pas réellement. La difficulté vient du fait que les macros sont instanciées au démarrage de Klipper. Il faut utiliser une combinaison de macros et de delayed_gcode. Exemple avec une macro qui continue d'extruder du filament alors que le détecteur de fin de filament a été déclenché (le détecteur est situé en amont de l'extrudeur d'une soixantaine de centimètres) : # macros work with that declaration #[filament_switch_sensor fila] #switch_pin: PC1 # Qidi: !PC1 / SFS: PC1 #pause_on_runout: False #runout_gcode: KEEP_PRINTING_AFTER_FIL_RUNOUT D={750} [gcode_macro KEEP_PRINTING_AFTER_FIL_RUNOUT] description: Trigger to pause the print after a further distance has been extruded variable_end_d: 0 gcode: {% set d_start = printer.print_stats.filament_used|float %} {% set d_end = (d_start + params.D|float)|float %} SET_GCODE_VARIABLE MACRO=KEEP_PRINTING_AFTER_FIL_RUNOUT VARIABLE=end_d VALUE={d_end} M117 Pause at {printer["gcode_macro KEEP_PRINTING_AFTER_FIL_RUNOUT"].end_d|round(2)} UPDATE_DELAYED_GCODE ID=PAUSE_AT_D DURATION=1 [delayed_gcode PAUSE_AT_D] initial_duration: 0 gcode: {% set d_current = printer.print_stats.filament_used|float %} {% if d_current < printer["gcode_macro KEEP_PRINTING_AFTER_FIL_RUNOUT"].end_d %} M117 Stopping {d_current|round(2)} {printer["gcode_macro KEEP_PRINTING_AFTER_FIL_RUNOUT"].end_d|round(2)} UPDATE_DELAYED_GCODE ID=PAUSE_AT_D DURATION=1 {% else %} PAUSE M117 FILAMENT RUNOUT DETECTED! CHANGE_TUNE # BEEP to notify user to change filament UPDATE_DELAYED_GCODE ID=PAUSE_AT_D DURATION=0 {% endif %} # Alternative, modify filameny_switch_sensor for runout_gcode to call DELAYED_PAUSE # with the two macros under. # #[filament_switch_sensor fila] #switch_pin: PC1 # Qidi: !PC1 / SFS: PC1 #pause_on_runout: False #runout_gcode: SZLAYED_PAUSE [gcode_macro DELAYED_PAUSE] variable_extrusion_before_pause: 650 # mm of filament to be extruded before pausing variable_extrusion_amount: 0 # helper variable gcode: SET_GCODE_VARIABLE MACRO=DELAYED_PAUSE VARIABLE=extrusion_amount VALUE={printer.print_stats.filament_used} UPDATE_DELAYED_GCODE ID=_DELAY_PAUSE DURATION=1 [delayed_gcode _DELAY_PAUSE] gcode: {% set allowed_extrusion = printer["gcode_macro DELAYED_PAUSE"].extrusion_before_pause|float %} {% set start_amount = printer["gcode_macro DELAYED_PAUSE"].extrusion_amount|float %} QUERY_FILAMENT_SENSOR SENSOR=fila # check if predetermine length is reached {% if printer.print_stats.filament_used|float <= (start_amount + allowed_extrusion) %} # wait for extrusion amount to be reached, cancel if new filament was inserted {% if printer['filament_switch_sensor fila'].filament_detected != True %} # start looping this script every second UPDATE_DELAYED_GCODE ID=_DELAY_PAUSE DURATION=1 {% endif %} {% else %} PAUSE {% endif %} Modifié (le) il y a 2 heures par fran6p
Badid Posté(e) il y a 2 heures Auteur Posté(e) il y a 2 heures (modifié) Oh p'tain ... une erreur de syntaxe dans UPDATE_DELAYED_GCODE Merci, au fait il y a 26 minutes, fran6p a dit : Pourtant, avec une section [duplicate_pin_overrride], c'est ce que j'utilise régulièrement. Non ... Le DeepWiki de klipper, specifie bien qu'un [duplicate_pin_override] sur un capteur de temperature engendre des problèmes de "Queue" (de multiples interprétations). D'ou la préférence à une double thermistance ... Et si je duplique les entrées, comment détecter l'incendie (idée de base) ? Modifié (le) il y a 2 heures par Badid
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant