Duet3D Logo Duet3D
    • Tags
    • Documentation
    • Order
    • Register
    • Login
    1. Home
    2. mkudzia
    • Profile
    • Following 0
    • Followers 0
    • Topics 5
    • Posts 11
    • Best 2
    • Controversial 0
    • Groups 0

    mkudzia

    @mkudzia

    5
    Reputation
    5
    Profile views
    11
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    mkudzia Unfollow Follow

    Best posts made by mkudzia

    • PrusaSlicer post processing script for Duet/Tool Changer

      Hello,

      Finished working on my Prusa Slicer post processing script for the tool changing systems running on Duet / RepRap 3

      The script includes the following enhancements:

      • Robust prime tower generation
      • Smart Active/Idle tool-head temperature management
      • PCF speed management
      • Validation/stripping of the GCode (i.e. Merlin M900, mapping of the fan ranges etc.)

      example.png

      The documentation and repo can be found here:
      https://github.com/mkudzia84/toolchanger-pspp

      Synposis:

      PRIME TOWER GENERATION

      The wipe tower functionality in PrusaSlicer is build and optimized for a single extruder/multi-material setup. As such it works reasonably well with MMU2s or Palette 2 - but not in an IDEX or multi-tool setup.
      For a multi-tool setup the prime tower:
      allows to equalize nozzle pressure upon tool activation
      doesn't require excesive material extrusion
      allows for usage of tool-heads of different nozzle diameters
      maintains structural integrity thru-out the print
      doesn't create additional tool change operations
      In order to achieve this, the script uses tube structure to generate the prime tower; Each tool-head is assigned it's own set of shells within the tube - this is done to ensure that, upon priming, material of same properties is depositor upon each other, increasing the strength of the prime tower In case the tool is not active in that particular layer, the first active tool within that layer is used to fill in the empty shells - this prevents additional tool changes (just for prime tower generation) Each shell band width is determined based on the tools nozzle diameter
      EXPERIMENTAL - Support of variable layer heights/prime tower layer optimisation Even with fixed layer heights, PrusaSlicer offsets support/interface layers vs. the model layers (by between 0.03-0.05mm) To handle this and the variable layer heights, the script optimises the prime tower structure by combining the subsequent layer tool change priming moves onto a single prime tower layer. This is done to maximize the prime tower layer height but still keep it within the limits of max layer height for all the tools active in the layer

      SMART ACTIVE/IDLE TOOL-HEAD TEMPERATURE MANAGEMENT

      After generating the prime tower GCode, the post processing script analyzes the result GCode to estimate the run-time of each operation - this is done to determine time periods when each tool is idle between deactivation and activations.
      In the script, the user can specify the standby idle temperature delta. Based on the temperature delta, and configured cooling down and heating up temperature rate estimates - the scripts determines if, within each period of idleness, the idle tool will be able to cool down by temperature delta degrees and then heat-up back to the active temperature before being activated. If that is the case, it injects GCode to change standby temperatures within the idle period. This is done to prevent extensive oozing while the tool is idle
      The script also inserts GCode to set the temperature of the tool to zero at the last deactivation in the file.

      PART COOLING FAN MANAGEMENT

      The script inserts M106 instructions to disable and enable fans upon tool changes - and set appropriate speed settings based on the Cooling settings of filament assigned to specific tool in PrusaSlicer

      posted in General Discussion
      mkudziaundefined
      mkudzia
    • RE: retracts over Firmare or PrusaSlicer?

      @phaedrux

      Actually you can easily specify different firmware retractions and different pressure advance settings inside of duet.

      I suggest setting different filaments in the Duet Web Portal and within the config.g of the filament you can specify
      M572 D{state.currentTool} whatever
      M207 D{state.currentTool} whatever

      And then in your tXpost.g add M703
      That trigger executing the filament specific config.h after tool has been selected.
      Setting the filament profiles in duet may seem like extra effort but it also simplifies automated load and unload long term 🙂

      posted in General Discussion
      mkudziaundefined
      mkudzia

    Latest posts made by mkudzia

    • RE: retracts over Firmare or PrusaSlicer?

      @phaedrux

      Actually you can easily specify different firmware retractions and different pressure advance settings inside of duet.

      I suggest setting different filaments in the Duet Web Portal and within the config.g of the filament you can specify
      M572 D{state.currentTool} whatever
      M207 D{state.currentTool} whatever

      And then in your tXpost.g add M703
      That trigger executing the filament specific config.h after tool has been selected.
      Setting the filament profiles in duet may seem like extra effort but it also simplifies automated load and unload long term 🙂

      posted in General Discussion
      mkudziaundefined
      mkudzia
    • Missing feature for temp control G10 vs M104

      Hello,

      I'm hitting an issue with trying to use G10 as a replacement for deprecated M104 for temperature control
      Issue is: M104 would setup the standby and active temperature but it would also activate the heater associated with the tool - if the tool wasn't selected it would put it into the standby mode .

      This would allow for preheating the tool before first activation.

      With G10 it is not possible.
      G10 would set the standby and active temperatures - but would leave the heater associated with the tool in the Off mode.

      I was checking the gcode ref and I am unable to find a command that would trigger tool heater to be switched from Off->Standby

      posted in Firmware wishlist
      mkudziaundefined
      mkudzia
    • Wipe on firmware retract option

      Hello,

      Would it be possible to add/implement wipe on firmware retract functionality.
      I am using firmware retracts exclusively on my tool changer (one of the reasons is - the robust PrusaSlicer tool changer post processor I developed that generates smart prime towers etc. - firmware retracts with G11/G12 make tracking of the state in the file much easier)

      I would love it if was possible to implement wipe on retract (G10) as an extra parameter of M207.

      posted in Firmware wishlist
      mkudziaundefined
      mkudzia
    • RE: Issue: RR3.1.1- homing causes the SBD to disconnect

      Ok, in that case any wya i can increase login for you guys and try to reproduce the issue again?

      posted in Firmware installation
      mkudziaundefined
      mkudzia
    • RE: Issue: RR3.1.1- homing causes the SBD to disconnect

      No need for echo systemctl status shows exactly what is happening and when the disconnect is done.
      Worrying thing is duetcontrolservice at that time complaining about bad chdcksum result on the pins.

      If I'm doing the home all from the GUI crash happens on homez

      When I am triggering home all from a gcode file it happens on homey

      posted in Firmware installation
      mkudziaundefined
      mkudzia
    • RE: Issue: RR3.1.1- homing causes the SBD to disconnect

      Sometimes it crashed home homey, sometimes it crashes on homez....

      config.g

      ; Configurat; Configuration file for Duet WiFi / Ethernet
      ; executed by the firmware on start-up
      
      ; General preferences
      M111 S0 						; Debugging off
      G21 							; Work in millimetres
      G90 							; Send absolute coordinates...
      M83 							; ...but relative extruder moves
      M555 P2 						; Set firmware compatibility to look like Marlin
      
      ; Network
      M550 P"e3dtc" 					; Set machine name
      M552 S1							; Enable Networking
      M586 P0 S1 						; Enable HTTP
      M586 P1 S0 						; Disable FTP
      M586 P2 S0 						; Disable Telnet
      
      ; Printer Type
      M667 S1							; Select CoreXY mode    (fw: 2.02)
      
      ; Drive direction
      M569 P0.0 S0                    ; Drive 0 X
      M569 P0.1 S0                    ; Drive 1 Y
      M569 P0.2 S1                    ; Drive 2 Z
      M569 P0.3 S0                    ; Drive 3 C
      M569 P0.4 S1                    ; Drive 4 E0
      M569 P0.5 S1                    ; Drive 5 E1
      M569 P1.0 S1                    ; Drive 6 E2
      M569 P1.1 S1                    ; Drive 7 E3
      M569 P1.1 S0                    ; Drive 8 UNUSED
      
      
      ; Stepper motor settings
      M584 X0.0 Y0.1 Z0.2 C0.3 E0.4:0.5:1.0:1.1                       ; Apply custom drive mapping
      M208 X-30:328.5 Y-46:243 Z0:300 C0:500 S0                       ; Set axis maxima & minima
      M350 E16:16:16:16 C8 I1                                         ; Configure microstepping without interpolation (change steps to Hermera)
      M350 C8 I0                                                      ; Configure microstepping for tool lock mechanism
      M350 X16 Y16 Z16 I1
      M92 X100 Y100 Z1600 C100 E409:409:409:409                       ; Set steps per mm (changed to 409 for Hemera)
      M566 X200 Y200 Z8 C2 E25:25:25:15                               ; Set maximum instantaneous speed changes [Lord Miauzer: Changed from 600->200]
      M203 X24000 Y24000 Z720 C5000 E5000:5000:5000:5000              ; Slowed X/Y to 200mm/s [units mm/min], Z = 12mm/s
      M201 X6000 Y6000 Z400 C500 E1250:1250:1250:1250                ; Slowed acceleration (changed from 6000->2500) [units mm/s^2]
      M906 X2000 Y2000 Z1330 C500 E900:900:900:900 I30                ; Set motor currents (mA) and motor idle factor in percent - quieter
      M84 S120                                                        ; Set idle timeout
      
      
      ; Endstops
      M574 X1 P"0.io1.in" S1
      M574 Y1 P"0.io2.in" S1
      M574 Z0 					; No endstop [RR3] using G30 homing
      
      ; Z probe
      M558 P8 C"0.io0.in" H3 F360 I0 T20000 		; Set Z probe type to switch, the axes for which it is used and the dive height + speeds
      G31 P200 X0 Y0 Z0	 						; Set Z probe trigger value, offset and trigger height
      M557 X10:290 Y20:180 S40 					; Define mesh grid
      
      ; Coupler
      M574 C1 S3 									; Stall detect coupler at low end of its range
      
      ;Stall Detection
      M915 C S5 F0 H200 R0					; Coupler
      M915 X Y S6 F0 H280 R0					; X / Y Axes
      
      ; Heaters
      M308 S0 P"0.temp0" Y"thermistor" T100000 B4138 C0 		; Set thermistor 
      M950 H0 C"0.out0" T0							        ; Bed heater
      M143 H0 S225 											; Set temperature limit for heater 0 to 225C
      M140 H0													; Map the heater to the bed
      
      M308 S1 P"0.temp1" Y"thermistor" A"T0" T100000 B4725 C7.06e-8         ; Set thermistor
      M950 H1 C"0.out1" T1                                                  ; Extruder 0 heater
      M143 H1 S300                                                          ; Set temperature limit for heater 1 to 300C
      
      M308 S2 P"0.temp2" Y"thermistor" A"T1" T100000 B4725 C7.06e-8         ; Set thermistor
      M950 H2 C"0.out2" T2                                                  ; Extruder 1 heater
      M143 H2 S300                                                          ; Set temperature limit for heater 2 to 300C
      
      M308 S3 P"1.temp0" Y"thermistor" A"T2" T100000 B4725 C7.06e-8         ; Set thermistor
      M950 H3 C"1.out0" T3					                              ; Extruder 2 heater
      M143 H3 S300                                                          ; Set temperature limit for heater 3 to 300C
      
      M308 S4 P"1.temp1" Y"thermistor" A"T0" T100000 B4725 C7.06e-8         ; Set thermistor
      M950 H4 C"1.out1" T4					                              ; Extruder 0 heater
      M143 H4 S300                                                          ; Set temperature limit for heater 4 to 300C
      
      ; Tools
      M563 P0 S"T0" D0 H1 F2           ; Define tool 0
      G10 P0 X0 Y0 Z0 		         ; Reset tool 0 axis offsets
      G10 P0 R0 S0 			         ; Reset initial tool 0 active and standby temperatures to 0C
      
      M563 P1 S"T1" D1 H2 F4           ; Define tool 1
      G10 P1 X0 Y0 Z0                  ; Reset tool 1 axis offsets
      G10 P1 R0 S0                     ; Reset initial tool 1 active and standby temperatures to 0C
      
      M563 P2 S"T2" D2 H3 F6           ; Define tool 2
      G10 P2 X0 Y0 Z0                  ; Reset tool 2 axis offsets
      G10 P2 R0 S0                     ; Reset initial tool 2 active and standby temperatures to 0C
      
      M563 P3 S"T3" D3 H4 F8           ; Define tool 3
      G10 P3 X0 Y0 Z0                  ; Reset tool 3 axis offsets
      G10 P3 R0 S0 	
      
      ; Fans
      
      M950 F1 C"0.out7"
      M950 F2 C"0.out4"
      M950 F3 C"0.out8"
      M950 F4 C"0.out5"
      M950 F5 C"1.out6"
      M950 F6 C"1.out3"
      M950 F7 C"1.out7"
      M950 F8 C"1.out4"						
      
      M106 P1 S255 H1 T70            ; T0 HE
      M106 P2 S0                     ; T0 PCF
      M106 P3 S255 H2 T70            ; T1 HE
      M106 P4 S0                     ; T1 PCF 
      M106 P5 S255 H3 T70            ; T2 HE 
      M106 P6 S0                     ; T2 PCF
      M106 P7 S255 H4 T70            ; T3 HE
      M106 P8 S0                     ; T3 PCF
      
      ; MISC settings 
      M593 F50						; cancel ringing at 50Hz (https://forum.e3d-online.com/threads/accelerometer-and-resonance-measurements-of-the-motion-system.3445/)
      M376 H15						; bed compensation taper
      
      ;deselect tools
      T-1
      
      M572 D0 S0.05						; pressure advance T0
      M572 D1 S0.05						; pressure advance T1
      M572 D2 S0.05						; pressure advance T2
      M572 D3 S0.05						; pressure advance T3
      
      ; Lights
      M98 P"/macros/led_standBy"
      
      M569 P0.4 S1                    ; Drive 4 E0
      M569 P0.5 S1                    ; Drive 5 E1
      M569 P1.0 S1                    ; Drive 6 E2
      M569 P1.1 S1                    ; Drive 7 E3
      
      ; Setup retracts
      M207 P0 S0.5 F1200
      M207 P1 S0.5 F1200
      M207 P2 S0.5 F1200 
      M207 P3 S0.5 F1200
      
      ; Tool Offsets
      M98 P"/macros/3. Tool Offsets"
      

      homeall.g

      ; homeall.g
      ; called to home all axes
      
      M98 P"/macros/led_homeAll"
      
      G28 Y
      G28 X
      G28 Z
      
      G1 X150 Y-49 F15000		; Park
      
      M98 P"/macros/led_standBy"
      

      homey.g

      ; homey.g
      ; called to home the Y axis
      
      G91                      ; use relative positioning
      
      G1 H2 X0.5 Y-0.5 F10000  ; energise motors to ensure they are not stalled
      
      ; To avoid crashing into the X sensor more X to the left
      G1 H1 X+30 F1800         ; avoidance of X switch
      
      G1 H2 Z3 F5000           ; lift Z 3mm
      G1 H1 Y-400 F1800        ; move to the front 400mm, stopping at the endstop
      G1 H1 Y2 F2000           ; move away from end
      G1 H1 Y-400 F360
      G1 H2 Z-3 F1200          ; lower Z
      G90                      ; back to absolute positioning
      

      homex.g

      ; homex.g
      ; called to home the X axis
      
      G91                      ; use relative positioning
      
      G1 H2 X0.5 Y-0.5 F10000  ; energise motors to ensure they are not stalled
      
      G1 H2 Z3 F5000           ; lift Z 3mm
      G1 H1 X-400 F1800        ; move left 400mm, stopping at the endstop
      G1 H1 X2 F2000           ; move away from end
      G1 H1 X-400 F360         ; move left again
      G1 H2 Z-3 F1200          ; lower Z
      G90                      ; back to absolute positioning
      

      homey.g

      ; homey.g
      ; called to home the Y axis
      
      G91                      ; use relative positioning
      
      G1 H2 X0.5 Y-0.5 F10000  ; energise motors to ensure they are not stalled
      
      ; To avoid crashing into the X sensor more X to the left
      G1 H1 X+30 F1800         ; avoidance of X switch
      
      G1 H2 Z3 F5000           ; lift Z 3mm
      G1 H1 Y-400 F1800        ; move to the front 400mm, stopping at the endstop
      G1 H1 Y2 F2000           ; move away from end
      G1 H1 Y-400 F360
      G1 H2 Z-3 F1200          ; lower Z
      G90                      ; back to absolute positioning
      

      homez.g

      ; homez.g
      ; called to home the Z axis
      ; [RR3] Added mandatory quotation marks for the macros 
      ; [RR3] Changes the G1 S parameter to H
      
      M98 P"/macros/Coupler - Unlock"	;Open Coupler
      
      G91 				; Relative mode
      G1 H2 Z5 F5000			; Lower the bed
      G90				; back to absolute positioning
      
      G1 X150 Y100 F50000		; Position the endstop above the bed centre
      
      M558 F1000
      G30
      M558 F300
      G30
      
      posted in Firmware installation
      mkudziaundefined
      mkudzia
    • Issue: RR3.1.1- homing causes the SBD to disconnect

      I started having an issue on my toolchanger after updating to the RR3.1.1 - homing stoped working; execution of the macros causes the SBD to loos connection to Duet3
      When pressing the Home All button from the DWC - this happens on homez (sequence is homec, homey, homex, homez)
      When G28 is triggered from the gcode file - it blows up on homec/homey

      The setup is
      RR3.1.1 - Duet 3 + 3HC, rPI SBD - toolchanger

      Checking the logs I get:

      Jul 09 18:38:37 e3dtc DuetControlServer[1615]: [info] Selected file /opt/dsf/sd/gcodes/Tiger/Weapons/Stinger/Missile Loc
      Jul 09 18:38:37 e3dtc DuetControlServer[1615]: [info] Starting file print
      Jul 09 18:38:37 e3dtc DuetControlServer[1615]: [info] File: Optional macro file start.g not found
      Jul 09 18:38:37 e3dtc DuetControlServer[1615]: [info] Starting macro file homec.g on channel File
      Jul 09 18:38:50 e3dtc DuetControlServer[1615]: [info] Starting macro file /macros/Coupler - Unlock on channel File
      Jul 09 18:38:52 e3dtc DuetControlServer[1615]: [info] Finished macro file /macros/Coupler - Unlock
      Jul 09 18:38:52 e3dtc DuetControlServer[1615]: [info] Finished macro file homec.g
      Jul 09 18:38:52 e3dtc DuetControlServer[1615]: [info] Starting macro file homey.g on channel File
      Jul 09 18:38:53 e3dtc DuetControlServer[1615]: [warn] Lost connection to Duet (Timeout while waiting for transfer ready
      Jul 09 18:38:53 e3dtc DuetControlServer[1615]: [warn] Bad header checksum (expected 0xffff, got 0x6627)
      

      The instalation is:

      duetcontrolserver/unstable,now 3.1.1 armhf [installed]
      duetruntime/unstable,now 3.1.1 armhf [installed]
      duetsd/unstable,now 1.0.6 all [installed]
      duetsoftwareframework/unstable,now 3.1.1 armhf [installed]
      duettools/unstable,now 3.1.1 armhf [installed]
      duetwebcontrol/unstable,now 3.1.1 all [installed]
      duetwebserver/unstable 3.1.0 arm64
      duetwebserver/unstable,now 3.1.0 armhf [installed]
      
      09/07/2020, 18:44:05	M115
      FIRMWARE_NAME: RepRapFirmware for Duet 3 MB6HC FIRMWARE_VERSION: 3.1.1 ELECTRONICS: Duet 3 MB6HC v0.6 or 1.0 FIRMWARE_DATE: 2020-05-19b2
      09/07/2020, 18:44:07	M115 B1
      Board EXP3HC firmware 3.1.0 (2020-05-15b1)
      

      When I downgrade to earlier releases I have no issues.

      posted in Firmware installation
      mkudziaundefined
      mkudzia
    • PrusaSlicer post processing script for Duet/Tool Changer

      Hello,

      Finished working on my Prusa Slicer post processing script for the tool changing systems running on Duet / RepRap 3

      The script includes the following enhancements:

      • Robust prime tower generation
      • Smart Active/Idle tool-head temperature management
      • PCF speed management
      • Validation/stripping of the GCode (i.e. Merlin M900, mapping of the fan ranges etc.)

      example.png

      The documentation and repo can be found here:
      https://github.com/mkudzia84/toolchanger-pspp

      Synposis:

      PRIME TOWER GENERATION

      The wipe tower functionality in PrusaSlicer is build and optimized for a single extruder/multi-material setup. As such it works reasonably well with MMU2s or Palette 2 - but not in an IDEX or multi-tool setup.
      For a multi-tool setup the prime tower:
      allows to equalize nozzle pressure upon tool activation
      doesn't require excesive material extrusion
      allows for usage of tool-heads of different nozzle diameters
      maintains structural integrity thru-out the print
      doesn't create additional tool change operations
      In order to achieve this, the script uses tube structure to generate the prime tower; Each tool-head is assigned it's own set of shells within the tube - this is done to ensure that, upon priming, material of same properties is depositor upon each other, increasing the strength of the prime tower In case the tool is not active in that particular layer, the first active tool within that layer is used to fill in the empty shells - this prevents additional tool changes (just for prime tower generation) Each shell band width is determined based on the tools nozzle diameter
      EXPERIMENTAL - Support of variable layer heights/prime tower layer optimisation Even with fixed layer heights, PrusaSlicer offsets support/interface layers vs. the model layers (by between 0.03-0.05mm) To handle this and the variable layer heights, the script optimises the prime tower structure by combining the subsequent layer tool change priming moves onto a single prime tower layer. This is done to maximize the prime tower layer height but still keep it within the limits of max layer height for all the tools active in the layer

      SMART ACTIVE/IDLE TOOL-HEAD TEMPERATURE MANAGEMENT

      After generating the prime tower GCode, the post processing script analyzes the result GCode to estimate the run-time of each operation - this is done to determine time periods when each tool is idle between deactivation and activations.
      In the script, the user can specify the standby idle temperature delta. Based on the temperature delta, and configured cooling down and heating up temperature rate estimates - the scripts determines if, within each period of idleness, the idle tool will be able to cool down by temperature delta degrees and then heat-up back to the active temperature before being activated. If that is the case, it injects GCode to change standby temperatures within the idle period. This is done to prevent extensive oozing while the tool is idle
      The script also inserts GCode to set the temperature of the tool to zero at the last deactivation in the file.

      PART COOLING FAN MANAGEMENT

      The script inserts M106 instructions to disable and enable fans upon tool changes - and set appropriate speed settings based on the Cooling settings of filament assigned to specific tool in PrusaSlicer

      posted in General Discussion
      mkudziaundefined
      mkudzia
    • RE: Duet 3 - FW 3.0.1b - bed config issues

      Wired it on second terminal and works! Thanks 🙂

      posted in Duet Hardware and wiring
      mkudziaundefined
      mkudzia
    • RE: Duet 3 - FW 3.0.1b - bed config issues

      Ooooh..... ok xD

      posted in Duet Hardware and wiring
      mkudziaundefined
      mkudzia