Aller au contenu

Messages recommandés

Posté(e) (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) par pascal_lb
Posté(e)
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

image.png.107cd5fc0cacdd22c9e44a90428403f9.png

là c'est pour le contrôle pendant l'impression bien évidement 😉 

 

Posté(e)

Pendant l'impression, pas de problèmes. Mais l'idée était de surveiller en continu (pendant les périodes de pré-chauffe) ...

Posté(e) (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) par fran6p
Posté(e) (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) par Badid

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
  • Sur cette page :   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
  • YouTube / Les Imprimantes 3D .fr

×
×
  • Créer...