Duet3D Logo Duet3D
    • Tags
    • Documentation
    • Order
    • Register
    • Login

    DWC 3.3RC1 - Resetting controller causes connection loop.

    Scheduled Pinned Locked Moved Solved
    Duet Web Control
    4
    15
    555
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • OwenDundefined
      OwenD
      last edited by

      If the controller is reset is reset, DWC goes into a continuous loop of re-connection.
      Each time an error pops up saying m.global is null.

      Refreshing the page (F5) fixes it.

      Video here

      dc42undefined 1 Reply Last reply Reply Quote 0
      • dc42undefined
        dc42 administrators @OwenD
        last edited by

        @owend please check using M115 that you are running RRF3.3RC1. You may also wish to try the updated RRF binary at https://www.dropbox.com/sh/dlb58vkmu1u4fkx/AAAelkXSfRKVwI6_yqRnhGHPa?dl=0.

        Duet WiFi hardware designer and firmware engineer
        Please do not ask me for Duet support via PM or email, use the forum
        http://www.escher3d.com, https://miscsolutions.wordpress.com

        OwenDundefined 1 Reply Last reply Reply Quote 0
        • OwenDundefined
          OwenD @dc42
          last edited by

          @dc42

          FIRMWARE_NAME: RepRapFirmware for Duet 2 WiFi/Ethernet FIRMWARE_VERSION: 3.3RC1+1 ELECTRONICS: Duet WiFi 1.02 or later FIRMWARE_DATE: 2021-05-01 21:43:27
          
          Duet Web Control 3.3.0-rc1
          

          It gets worse in MS Edge (other video was Firefox)
          Video
          As before refreshing web page fixes it.

          dc42undefined 1 Reply Last reply Reply Quote 0
          • dc42undefined
            dc42 administrators @OwenD
            last edited by

            Standalone mode or SBC mode?

            Duet WiFi hardware designer and firmware engineer
            Please do not ask me for Duet support via PM or email, use the forum
            http://www.escher3d.com, https://miscsolutions.wordpress.com

            OwenDundefined 1 Reply Last reply Reply Quote 0
            • OwenDundefined
              OwenD @dc42
              last edited by

              @dc42
              Stand alone.

              gloomyandyundefined chrishammundefined 2 Replies Last reply Reply Quote 0
              • gloomyandyundefined
                gloomyandy @OwenD
                last edited by

                @owend Does your config.g contain a reference to global.m? Might be worth posting it and any other scripts that run at startup.

                1 Reply Last reply Reply Quote 0
                • chrishammundefined
                  chrishamm administrators @OwenD
                  last edited by

                  @owend AFAIR there was a bug affecting standalone setups with a password set in an previous DWC versions. Please confirm that DWC displays version 3.3-rc1 on the Settings -> General page. If it does, please open the JS console via F12 when the connection loop occurs and check for potential errors.

                  If nothing unusual shows up, please share the output of M122 too.

                  Duet software engineer

                  OwenDundefined 1 Reply Last reply Reply Quote 0
                  • OwenDundefined
                    OwenD @chrishamm
                    last edited by

                    @chrishamm
                    DWC version is
                    Screenshot_2021-05-03 3Dprinter.png

                    Rolling back to DWC 3.3b1 solves issue!
                    I get no errors at all.

                    It all seems to relate to loading the global variables in DWC.
                    The constant is the error message m.global is null
                    I have tried checking if the globals exist or are null in config.g and added a wait G4 P10 after creating each global.
                    I've tried removing any spaces around global names and calculations.

                    At times I can get it to reset without the looping, but the null global error always persists.

                    Happy to arrange a team viewer session if that may help debug.

                    This is my original config.g (before upgrading to 3.3RC1

                    ; Configuration file for Duet WiFi (firmware version 3)
                    
                    ; executed by the firmware on start-up
                    
                    ;
                    
                    ; generated by RepRapFirmware Configuration Tool v2.1.4 on Sat Jan 04 2020 09:46:45 GMT+1000 (Australian Eastern Standard Time)
                    
                     
                    
                     
                    
                    ; serial comms / Paneldue
                    
                    M575 P1 B57600 S1
                    
                    ; General preferences
                    
                    G90                                                         ; send absolute coordinates...
                    
                    M83                                                         ; ...but relative extruder moves
                    
                    M550 P"3Dprinter"                                       	; set printer name
                    
                     
                    
                    ; Network
                    
                    M554 P192.168.1.1											; set gateway
                    
                    M553 P255.255.255.0											; set netmask
                    
                    M552 S1 P"DARE"                                             ; enable network
                    
                    M586 P0 S1                                                  ; enable HTTP
                    
                    M586 P1 S1                                                  ; enable FTP
                    
                    M586 P2 S1                                                  ; enable Telnet
                    
                     
                    
                    ; Drives
                    
                    M569 P0 S1                                                  ; physical drive 0 (X) goes forwards
                    
                    M569 P1 S0                                                  ; physical drive 1 (Y) goes backwards
                    
                    M569 P2 S1                                                  ; physical drive 2 (Z) goes forwards
                    
                    M569 P3 S0                                                  ; physical drive 3 (E0) goes backwards
                    
                    M584 X0 Y1 Z2:4 E3											; two Z motors connected to driver outputs Z and E1
                    
                    M671 X-74:240 Y79:79 S5.5 									; leadscrews at left (connected to Z) and right (connected to E1) of X axis
                    
                    M350 X16 Y16 Z16 I1                           				; Configure microstepping with interpolation for XYZ
                    
                    M350 E16 I1													; Configure microstepping with interpolation for E0
                    
                    M92 X100.00 Y100.00 Z400.00                            		; set steps per mm XYZ
                    
                    M92 E854										; set E steps/mm for Titan Aero
                    
                     
                    
                    ; axis settings
                    
                    M98 P"0:/sys/set_max_speeds.g" ; set all the max speeds in macro as these are adjusted during home moves so we only want to adjust in one spot
                    
                    M906 X1100 Y1100 Z1100 E1400 I30                             ; set motor currents (mA) and motor idle factor in per cent
                    
                    M84 S30                                                     ; Set idle timeout
                    
                     
                    
                    ; Axis Limits
                    
                    M208 X0:215 Y0:198 Z0:180 									; X carriage moves from 0 to 200, Y bed goes from 0 to 198
                    
                     
                    
                    ; Endstops
                    
                    M574 X1 S1 P"xstop"                                         ; configure active-high endstop for low end on X via pin xstop
                    
                    M574 Y1 S1 P"ystop"                                         ; configure active-high endstop for low end on Y via pin ystop
                    
                    M574 Z1 S2                                                  ; configure Z-probe endstop for low end on Z
                    
                     
                    
                    ; Z-Probe
                    
                    M950 S0 C"exp.heater3"                                      ; create servo pin 0 for BLTouch
                    
                    ;M558 P9 C"^zprobe.in" H6 F180:60 T2400 A10 S0.03 R0.5 B0         ; set Z probe type to bltouch and the dive height + speeds
                    
                    M558 P9 C"^zprobe.in" H6 F600:180 T2400 A10 S0.03 R0.5 B0         ; set Z probe type to bltouch and the dive height + speeds
                    
                    G31 P500 X27 Y-2 Z0.48                                  	; set Z probe trigger value, offset and trigger height
                    
                    M557 X30:200 Y10:180 S30                                    ; define mesh grid
                    
                     
                    
                    ;Calculate bed centre
                    
                    ;global Bed_Center_X =move.compensation.probeGrid.maxs[0]-move.compensation.probeGrid.mins[0])/2) + move.compensation.probeGrid.mins[0] - sensors.probes[0].offsets[0]
                    
                    ;global Bed_Center_Y = (move.compensation.probeGrid.maxs[1]-move.compensation.probeGrid.mins[1])/2) + move.compensation.probeGrid.mins[y] - sensors.probes[0].offsets[1]
                    
                     
                    
                     
                    
                    ; Heaters
                    
                    M308 S0 P"bedtemp" Y"thermistor" A"Bed" B3950 C7.06e-8         		; configure sensor 0 as thermistor on pin bedtemp
                    
                    M950 H0 C"bedheat" T0 Q10                                       ; create bed heater output on bedheat and map it to sensor 0 and set PWM frequency to 10hz
                    
                    M140 H0 																		; Set bed themp to zero
                    
                    M143 H0 S130 A0 C0                                          ; set temperature limit for heater 0 to 130C - fault if too high
                    
                    M308 S1 P"e0temp" Y"thermistor" A"Nozzle-1" B4725 C7.06e-8          		; configure sensor 1 as thermistor on pin e0temp
                    
                    M950 H1 C"e0heat" T1                                        ; create nozzle heater output on e0heat and map it to sensor 1
                    
                    M143 H1 S285 A0 C0                                          ; set temperature limit for heater 1 to 280C - fault if too high
                    
                    ;echo "sensor create time: " ^ state.upTime ^ "." ^ state.msUpTime
                    
                     
                    
                    ; Set PID autotune parameters
                    
                    M307 H0 R0.553 C379.7 D21.16 S0.80 B0 V0
                    
                    M307 H1 B0 R1.594 C358.1:217.5 D6.05 S1.00 V24.3			;set PID values for heater 1 (hotend)
                    
                     
                    
                     
                    
                    ; Joystick
                    
                    M308 S3 P"exp.thermistor4" Y"linear-analog" A"JoyStick-X" F1 B100 C-100 ; set analog input on E3 Temp with min/max of -100 to 100
                    
                    M308 S4 P"exp.thermistor6" Y"linear-analog" A"JoyStick-Y" F1 B100 C-100 ; set analog input on E5 Temp with min/max of -100 to 100
                    
                    M581 T7 P7 ; set up trigger for GpIn 7
                    
                    M950 J7 C"!^exp.31" 										; Input 7 uses Expansion 31 pin activate pullup and inverted
                    
                     
                    
                     
                    
                    ; Servos and input/output
                    
                    M950 P5 C"exp.e5_stop" 										; Output 5 uses E5_STOP  pin
                    
                    M950 J6 C"exp.e6_stop" 										; Input 6 uses E6_STOP  pin
                    
                     
                    
                     
                    
                    ; Filament monitor
                    
                    M591 P1 C"e0stop" S1  D0 									; filament monitor for extruder 0 connected to E0 endstop
                    
                     
                    
                    ; Fans
                    
                    M950 F0 C"fan0" Q50                                        ; create fan 0 on pin fan0 and set its frequency
                    
                    M106 P0 C"Part_Fan" S0 B2.0 H-1                             ; set fan 0 name and value. Thermostatic control is turned off
                    
                    																; Adjust MCU temp reading to match ambient
                    
                     
                    
                    ;water pump
                    
                    M950 F1 C"!fan1+^exp.pb6" Q25000                             ; create fan 1 (water pump) on inverted pin fan1 and set its frequency.  Set RPM to E3 stop with pullup enabled
                    
                    M106 P1 C"Water Pump" H1 L0.5 X1 B1.2  T50:60                       ; set fan 1 name and value. Thermostatic control is turned on.  Monitoring hoted sensor
                    
                     
                    
                    ; water temp monitor & fan
                    
                    M950 F2 C"!fan2+^exp.e3_stop" Q25000                                        ; create fan 2 on pin fan2 and set its frequency
                    
                    M308 S5 P"e1temp" Y"thermistor" A"Water temp" T10000 B3950  					; Configure Water temp sensor
                    
                    M106 P2 C"Radiator Fan" H5 L0 X1 B1.2  T33:38    	; set fan 4 value, turn on at 30% if the water temperature reaches 30C, and increase to full speed gradually as the temperature rises to 40C
                    
                     
                    
                    ; MCU temp sensor
                    
                    M308 S2 P"mcu-temp" Y"mcu-temp" A"Duet Board" 					; Configure MCU sensor
                    
                    ; Calibrate MCU temp
                    
                    M912 P0 S-4	
                    
                     
                    
                    ; Tools
                    
                    M563 P0 S"Extruder1" D0 H1 F0                               ; define tool 0
                    
                    G10 P0 X0 Y0 Z0                                             ; set tool 0 axis offsets
                    
                    G10 P0 R0 S0  ; set initial tool 0 active and standby temperatures to 0C
                    
                     
                    
                     
                    
                    ; Global Variables for heater checking routine in daemon.g
                    
                    while heat.heaters[1].current = 2000 ; loop until thermistor values are stable
                    
                    	G4 P1
                    
                    	if iterations > 10000 ; if it takes more than 10 seconds we have a problem with the thermistor
                    
                    		M118 P0 L1 S"Thermistor failed to stabilize in less than 10 seconds"
                    
                    		break
                    
                    ;echo "sensor stable time: " ^ state.upTime ^ "." ^ state.msUpTime
                    
                     
                    
                    if !exists(global.LastTemp)
                    
                    	global LastTemp = heat.heaters[1].current ; Set variable to current extruder temp.
                    
                    else
                    
                    	set global.LastTemp = heat.heaters[1].current ; Set variable to current extruder temp.
                    
                    if !exists(global.LastCheckTime)
                    
                    	global LastCheckTime = 0 ; variable for use in daemon.g 
                    
                    else
                    
                    	set global.LastCheckTime = 0 ; variable for use in daemon.g
                    
                     
                    
                     
                    
                     
                    
                    ;Select tool zero
                    
                    T0 P0
                    
                     
                    
                    ; extrusion
                    
                    if !exists(global.LoadedFilament) ; global variable to hold filament name
                    
                    	global LoadedFilament = "No_Filament" ; create a filament variable
                    
                     
                    
                    if move.extruders[state.currentTool].filament=""
                    
                    	echo "No filament loaded.  Cold extrude & retract set to defaults"
                    
                    	M302 S190 R110 ; Allow extrusion starting from 190°C and retractions already from 110°C (defaults)
                    
                    	set global.LoadedFilament = "No_Filament"
                    
                    else
                    
                    	set global.LoadedFilament = move.extruders[state.currentTool].filament ; set the variable to the currently loaded filament
                    
                    	echo "Loading config for " ^ global.LoadedFilament ^ " filament"
                    
                    	M703 ; if a filament is loaded, set all the heats and speeds for it by loading config.g
                    
                     
                    
                     
                    
                    ; Custom settings
                    
                    M376 H4   ; set bed compensation taper (H4 means taper over 4mm)
                    
                     
                    
                    ; Power failure recovery
                    
                    M911 S22.5 R23.0 P"M42 P5 S0 M106 P0 S0 M913 X0 Y0 G91 M83 G1 Z3 E-2 F1000" ; If power drops below 22v then turn off fans, Set X & Y current to zero, raise head, retract.
                    
                     
                    
                    ; turn on LED strip driven by P5 output
                    
                    M42 P5 S1
                    
                     
                    
                    ;Valve Control test to control servo position via fan speed
                    
                    ; Set up scaling variables {(output_end - output_start) / (input_end - input_start)}
                    
                    ;M950 S1 C"exp.heater4"  ; assign GPIO port 0 to heater4 on expansion connector, servo mode
                    
                    if !exists(global.InputStart)
                    
                    	global InputStart = 0
                    
                    if !exists(global.InputEnd)
                    
                    	global InputEnd = 1
                    
                    if !exists(global.OutputStart)
                    
                    	global OutputStart = 0
                    
                    if !exists(global.OutputEnd)
                    
                    	global OutputEnd = 180
                    
                    if !exists(global.ScaleFactor)
                    
                    	global ScaleFactor = (global.OutputEnd - global.OutputStart) / (global.InputEnd - global.InputStart) ; no need for the math in this instance but it makes it clear how you arrive at the value.
                    
                    if !exists(global.ServoOut)
                    
                    	global ServoOut = floor(global.ScaleFactor * (fans[0].actualValue - global.InputStart) + 0.5) + global.OutputStart ; calculate position required on sevo - use floor() to apply rounding
                    
                    ;M280 P1 S{global.servo_out} ; adjust valve position to reflect fan speed.
                    
                     
                    
                    ;play startup tune
                    
                    G4 S8					; Allow time for PanelDue to start & wifi connection etc
                    
                    M98 P"0:/macros/songs/itchyscratchy.g"								; Play tune
                    
                    M501 ; load config-overide.g
                    
                     
                    
                    ; configure accelerometer
                    
                    M955 P0 C"spi.cs3+spi.cs4" ; configure accelerometer
                    

                    This is the output from the javascript window
                    error.png

                    OwenDundefined 1 Reply Last reply Reply Quote 0
                    • OwenDundefined
                      OwenD @OwenD
                      last edited by

                      This is where I'm at now.

                      ; Configuration file for Duet WiFi (firmware version 3)
                      ; executed by the firmware on start-up
                      ;
                      ; generated by RepRapFirmware Configuration Tool v2.1.4 on Sat Jan 04 2020 09:46:45 GMT+1000 (Australian Eastern Standard Time)
                      
                      
                      ; serial comms / Paneldue
                      M575 P1 B57600 S1
                      ; General preferences
                      G90                                                         ; send absolute coordinates...
                      M83                                                         ; ...but relative extruder moves
                      M550 P"3Dprinter"                                       	; set printer name
                      
                      ; Network
                      M554 P192.168.1.1											; set gateway
                      M553 P255.255.255.0											; set netmask
                      M552 S1 P"DARE"                                             ; enable network
                      M586 P0 S1                                                  ; enable HTTP
                      M586 P1 S1                                                  ; enable FTP
                      M586 P2 S1                                                  ; enable Telnet
                      
                      ; Drives
                      M569 P0 S1                                                  ; physical drive 0 (X) goes forwards
                      M569 P1 S0                                                  ; physical drive 1 (Y) goes backwards
                      M569 P2 S1                                                  ; physical drive 2 (Z) goes forwards
                      M569 P3 S0                                                  ; physical drive 3 (E0) goes backwards
                      M584 X0 Y1 Z2:4 E3											; two Z motors connected to driver outputs Z and E1
                      M671 X-74:240 Y79:79 S5.5 									; leadscrews at left (connected to Z) and right (connected to E1) of X axis
                      M350 X16 Y16 Z16 I1                           				; Configure microstepping with interpolation for XYZ
                      M350 E16 I1													; Configure microstepping with interpolation for E0
                      M92 X100.00 Y100.00 Z400.00                            		; set steps per mm XYZ
                      M92 E854										; set E steps/mm for Titan Aero
                      
                      ; axis settings
                      M98 P"0:/sys/set_max_speeds.g" ; set all the max speeds in macro as these are adjusted during home moves so we only want to adjust in one spot
                      M906 X1100 Y1100 Z1100 E1400 I30                             ; set motor currents (mA) and motor idle factor in per cent
                      M84 S30                                                     ; Set idle timeout
                      
                      ; Axis Limits
                      M208 X0:215 Y0:198 Z0:180 									; X carriage moves from 0 to 200, Y bed goes from 0 to 198
                      
                      ; Endstops
                      M574 X1 S1 P"xstop"                                         ; configure active-high endstop for low end on X via pin xstop
                      M574 Y1 S1 P"ystop"                                         ; configure active-high endstop for low end on Y via pin ystop
                      M574 Z1 S2                                                  ; configure Z-probe endstop for low end on Z
                      
                      ; Z-Probe
                      M950 S0 C"exp.heater3"                                      ; create servo pin 0 for BLTouch
                      M558 P9 C"^zprobe.in" H6 F600:180 T2400 A10 S0.03 R0.5 B0         ; set Z probe type to bltouch and the dive height + speeds
                      G31 P500 X27 Y-2 Z0.48                                  	; set Z probe trigger value, offset and trigger height
                      M557 X30:200 Y10:180 S30                                    ; define mesh grid
                      
                      ;Calculate bed centre
                      ;global Bed_Center_X =move.compensation.probeGrid.maxs[0]-move.compensation.probeGrid.mins[0])/2) + move.compensation.probeGrid.mins[0] - sensors.probes[0].offsets[0]
                      ;global Bed_Center_Y = (move.compensation.probeGrid.maxs[1]-move.compensation.probeGrid.mins[1])/2) + move.compensation.probeGrid.mins[y] - sensors.probes[0].offsets[1]
                      
                      
                      ; Heaters
                      M308 S0 P"bedtemp" Y"thermistor" A"Bed" B3950 C7.06e-8         		; configure sensor 0 as thermistor on pin bedtemp
                      M950 H0 C"bedheat" T0 Q10                                       ; create bed heater output on bedheat and map it to sensor 0 and set PWM frequency to 10hz
                      M140 H0 																		; Set bed themp to zero
                      M143 H0 S130 A0 C0                                          ; set temperature limit for heater 0 to 130C - fault if too high
                      M308 S1 P"e0temp" Y"thermistor" A"Nozzle-1" B4725 C7.06e-8          		; configure sensor 1 as thermistor on pin e0temp
                      M950 H1 C"e0heat" T1                                        ; create nozzle heater output on e0heat and map it to sensor 1
                      M143 H1 S285 A0 C0                                          ; set temperature limit for heater 1 to 280C - fault if too high
                      ;echo "sensor create time: " ^ state.upTime ^ "." ^ state.msUpTime
                      
                      ; Set PID autotune parameters
                      M307 H0 R0.553 C379.7 D21.16 S0.80 B0 V0
                      M307 H1 B0 R1.594 C358.1:217.5 D6.05 S1.00 V24.3			;set PID values for heater 1 (hotend)
                      
                      
                      ; Joystick
                      M308 S3 P"exp.thermistor4" Y"linear-analog" A"JoyStick-X" F1 B100 C-100 ; set analog input on E3 Temp with min/max of -100 to 100
                      M308 S4 P"exp.thermistor6" Y"linear-analog" A"JoyStick-Y" F1 B100 C-100 ; set analog input on E5 Temp with min/max of -100 to 100
                      M581 T7 P7 ; set up trigger for GpIn 7
                      M950 J7 C"!^exp.31" 										; Input 7 uses Expansion 31 pin activate pullup and inverted
                      
                      
                      ; Servos and input/output
                      M950 P5 C"exp.e5_stop" 										; Output 5 uses E5_STOP  pin
                      M950 J6 C"exp.e6_stop" 										; Input 6 uses E6_STOP  pin
                      
                      
                      ; Filament monitor
                      M591 P1 C"e0stop" S1  D0 									; filament monitor for extruder 0 connected to E0 endstop
                      
                      ; Fans
                      M950 F0 C"fan0" Q50                                        ; create fan 0 on pin fan0 and set its frequency
                      M106 P0 C"Part_Fan" S0 B2.0 H-1                             ; set fan 0 name and value. Thermostatic control is turned off
                      																; Adjust MCU temp reading to match ambient
                      
                      ;water pump
                      M950 F1 C"!fan1+^exp.pb6" Q25000                             ; create fan 1 (water pump) on inverted pin fan1 and set its frequency.  Set RPM to E3 stop with pullup enabled
                      M106 P1 C"Water Pump" H1 L0.5 X1 B1.2  T50:60                       ; set fan 1 name and value. Thermostatic control is turned on.  Monitoring hoted sensor
                      
                      ; water temp monitor & fan
                      M950 F2 C"!fan2+^exp.e3_stop" Q25000                                        ; create fan 2 on pin fan2 and set its frequency
                      M308 S5 P"e1temp" Y"thermistor" A"Water temp" T10000 B3950  					; Configure Water temp sensor
                      M106 P2 C"Radiator Fan" H5 L0 X1 B1.2  T33:38    	; set fan 4 value, turn on at 30% if the water temperature reaches 30C, and increase to full speed gradually as the temperature rises to 40C
                      
                      ; MCU temp sensor
                      M308 S2 P"mcu-temp" Y"mcu-temp" A"Duet Board" 					; Configure MCU sensor
                      ; Calibrate MCU temp
                      M912 P0 S-4	
                      
                      ; Tools
                      M563 P0 S"Extruder1" D0 H1 F0                               ; define tool 0
                      G10 P0 X0 Y0 Z0                                             ; set tool 0 axis offsets
                      G10 P0 R0 S0  ; set initial tool 0 active and standby temperatures to 0C
                      
                      
                      ; Global Variables for heater checking routine in daemon.g
                      while heat.heaters[1].current=2000 ; loop until thermistor values are stable
                      	G4 P1
                      	if iterations > 10000 ; if it takes more than 10 seconds we have a problem with the thermistor
                      		M118 P0 L1 S"Thermistor failed to stabilize in less than 10 seconds"
                      		break
                      ;echo "sensor stable time: " ^ state.upTime ^ "." ^ state.msUpTime
                      
                      if !exists(global.LastTemp) || global.LastTemp=null
                      	global LastTemp=heat.heaters[1].current ; Set variable to current extruder temp.
                      else
                      	set global.LastTemp=heat.heaters[1].current ; Set variable to current extruder temp.
                      G4 P10
                      if !exists(global.LastCheckTime)
                      	global LastCheckTime=0 ; variable for use in daemon.g 
                      else
                      	set global.LastCheckTime=0 ; variable for use in daemon.g
                      
                      
                      
                      ;Select tool zero
                      T0 P0
                      
                      ; extrusion
                      if !exists(global.LoadedFilament) || global.LoadedFilament=null; global variable to hold filament name
                      	global LoadedFilament="No_Filament" ; create a filament variable
                      G4 P10
                      if move.extruders[state.currentTool].filament=""
                      	echo "No filament loaded.  Cold extrude & retract set to defaults"
                      	M302 S190 R110 ; Allow extrusion starting from 190°C and retractions already from 110°C (defaults)
                      	set global.LoadedFilament="No_Filament"
                      else
                      	set global.LoadedFilament=move.extruders[state.currentTool].filament ; set the variable to the currently loaded filament
                      	echo "Loading config for " ^ global.LoadedFilament ^ " filament"
                      	M703 ; if a filament is loaded, set all the heats and speeds for it by loading config.g
                      G4 P10
                      
                      ; Custom settings
                      M376 H4   ; set bed compensation taper (H4 means taper over 4mm)
                      
                      ; Power failure recovery
                      M911 S22.5 R23.0 P"M42 P5 S0 M106 P0 S0 M913 X0 Y0 G91 M83 G1 Z3 E-2 F1000" ; If power drops below 22v then turn off fans, Set X & Y current to zero, raise head, retract.
                      
                      ; turn on LED strip driven by P5 output
                      M42 P5 S1
                      
                      ;Valve Control test to control servo position via fan speed
                      ; Set up scaling variables {(output_end - output_start) / (input_end - input_start)}
                      ;M950 S1 C"exp.heater4"  ; assign GPIO port 0 to heater4 on expansion connector, servo mode
                      if !exists(global.InputStart) || global.InputStart=null
                      	global InputStart=0
                      else 
                      	set global.InputStart=0
                      G4 P10
                      if !exists(global.InputEnd) || global.InputEnd=null
                      	global InputEnd=1
                      else
                      	set global.InputEnd=1
                      G4 P10
                      if !exists(global.OutputStart) || global.OutputStart=null
                      	global OutputStart=0
                      else
                      	set global.OutputStart=0
                      G4 P10
                      if !exists(global.OutputEnd) || global.OutputEnd=null
                      	global OutputEnd=180
                      else
                      	set global.OutputEnd=180
                      G4 P10
                      if !exists(global.ScaleFactor) || global.ScaleFactor=null
                      	global ScaleFactor=(global.OutputEnd - global.OutputStart) / (global.InputEnd - global.InputStart) ; no need for the math in this instance but it makes it clear how you arrive at the value.
                      else
                      	set global.ScaleFactor=(global.OutputEnd - global.OutputStart) / (global.InputEnd - global.InputStart)
                      G4 P10
                      if !exists(global.ServoOut) || global.ServoOut=null
                      	global ServoOut=floor(global.ScaleFactor * (fans[0].actualValue - global.InputStart) + 0.5) + global.OutputStart ; calculate position required on sevo - use floor to apply rounding
                      else
                      	set global.ServoOut=floor(global.ScaleFactor * (fans[0].actualValue - global.InputStart) + 0.5) + global.OutputStart
                      ;M280 P1 S{global.servo_out} ; adjust valve position to reflect fan speed.
                      
                      ;play startup tune
                      G4 S8					; Allow time for PanelDue to start & wifi connection etc
                      M98 P"0:/macros/songs/itchyscratchy.g"								; Play tune
                      M501 ; load config-overide.g
                      
                      ; configure accelerometer
                      M955 P0 Q4000000 C"spi.cs3+spi.cs4" ; configure accelerometer
                      
                      
                      OwenDundefined 1 Reply Last reply Reply Quote 0
                      • OwenDundefined
                        OwenD @OwenD
                        last edited by

                        This is daemon.g (it calls on globals) but I've tried renaming it so it's not in use.
                        The restarts persist

                        ; 0:/sys/daemon.g
                        ; runs continually in background at approximately 1Hz if not delayed internally
                        
                        
                        ;HEATER CHECKS
                        
                        ; this section of daemon.g checks for heater faults
                        ; RRF doesn't currently check for faults when idle but by default will shutdownduring printing if temperature excursion is > 15 degrees.
                        ; Note: temp excursion value and time  may be manually set using M570
                        ; checking if temp is rising requires a variable.
                        ; G4 could be used but would also delay anything else in daemon.g
                        ; this way allows other checks to run more frequently if needed however the G4 delays inside the loop will affect the frequency of daemon.g
                        ; will be updated when variables are available in RRF.
                        
                        while iterations < #heat.heaters ; loop through all configured heaters
                        	if state.upTime < 60
                        		set global.LastTemp=heat.heaters[1].current ; Set variable to current extruder temp.
                        		break; If uptime is < 60 seconds, break out so all fans etc have time to stabilise.
                        
                        	if ((global.LastCheckTime+10) > state.upTime) ; if checked in last 10 seconds escape loop and go to rest of daemon.g if present.  offset will be zero at startup via config.g
                        		;echo "skipping loop " ^ " " ^ state.upTime  ^ " " ^ global.LastCheckTime+10
                        		if global.LastCheckTime-state.upTime > 60 ; uptime must have rolled over so reset off set to zero
                        			G10 P2 Y0
                        			echo "upTime has rolled over.  Heater checking reset"
                        		break
                        	;echo "checking heater " ^ iterations ^ " " ^ state.upTime  ^ " " ^ global.LastCheckTime+10
                        	if heat.heaters[iterations].state="tuning"
                        		;echo "heater " ^ iterations ^ " is tuning - no check carried out"
                        		continue ; don't check this heater as it is PID auto tuning
                        	if (heat.heaters[iterations].current) > (heat.heaters[iterations].max) ; temp is over max so emergency shutdown required
                        		;M41 P5 S1  ; activate output connected to externally powered latching relay here to sound alarm
                        		M118 P0 S"heater over max temp fault detected in daemon.g.  - shutting down" L1
                        		M112; emergency shutdown
                        		M81 S1 ; turn off power when fans have turned off
                        	if (heat.heaters[iterations].current > 45)  &&  (heat.heaters[iterations].active > 45); no real danger at below this temp as ambient may be close to this
                        		;echo "heater " ^ iterations ^ " is above 45 degrees"
                        		if (heat.heaters[iterations].state!="off") && (heat.heaters[iterations].current > heat.heaters[iterations].active + 15) ; temp is > 15 degrees above target.
                        			echo "heater " ^ iterations ^ " is on or in standby - checking if temp is rising"
                        			set global.LastTemp=heat.heaters[iterations].current ; set the last check temp
                        			echo "heater " ^ iterations ^ " temp: " ^ heat.heaters[iterations].current
                        			G4 S3 ; wait 3 seconds
                        			if (heat.heaters[iterations].current > global.LastTemp + 0.5) ; heat is rising by more than 0.5 degrees in 3 seconds
                        				echo "heater runaway fault detected in daemon.g.  - shutting down"
                        				if (state.status=="processing")
                        					M25 ; pause print so you might be able to save it using M119
                        				;M41 P5 S1  ; activate output connected to externally powered latching relay here to sound alarm
                        				M0 ; unconditional stop.  If axes are homed and a print is being canceled will run cancel.g  otherwise will run stop.g
                        				M81 S1 ; turn off power when fans have turned off
                        			else
                        				;echo "heater is on or standby but temp is falling on heater " ^ iterations ^ " - no action needed"
                        		elif (heat.heaters[iterations].state="off") && ((heat.heaters[iterations].current) >= (fans[1].thermostatic.lowTemperature+0)) ; if heater is off and temp is greater than 50 there could be an issue
                        			set global.LastTemp=heat.heaters[iterations].current;
                        			;echo "heater " ^ iterations ^ " is off but checking if temp is rising"
                        			G4 S3 ; wait 3 seconds
                        			if (heat.heaters[iterations].current > global.LastTemp + 0.5) ; heat is rising by more than 0.5 degrees in 3 seconds
                        				echo "heater is off but temp is rising on heater " ^ iterations ^ "emergency shutdown"
                        				;M41 P5 S1  ; activate output connected to externally powered latching relay here to sound alarm
                        				echo "heater runaway fault detected in daemon.g.  - shutting down"
                        				M112; emergency shutdown
                        				M81 S1 ; turn off power when fans have turned off
                        			else
                        				;echo "heater " ^ iterations ^ " is off & temp is falling or stable on heater " ^ iterations ^ " - no action needed"
                        	else
                        		;echo "heater " ^ iterations ^ " is below 45 degrees so check thermistor" ;"heater is below 45 degrees so only other fault may be an open circuit thermistor which should show -275 degrees"
                        		if heat.heaters[iterations].current < 0 ; we probably have a thermistor fault if heater is less than 0 degrees
                        			M112 ; emergency shutdown
                        			M81 S1 ; turn off power when fans have turned off
                        
                        	;Check if water pump is running correctly
                        	if (iterations=1) && ((heat.heaters[1].current) > (fans[1].thermostatic.lowTemperature+0))
                        		if fans[1].rpm <= 500 ; Coolant pump RPM off or low
                        			G4 S3 ; check again in 3 seconds in case it's just spinning up
                        			if fans[1].rpm <= 500
                        				echo "Water pump fault - shutting down heaters - RPM : " ^ fans[1].rpm
                        				M25 ; pause print so you might be able to save it using M119
                        				M0 ; unconditional stop.  If axes are homed and a print is being canceled will run cancel.g  otherwise will run stop.g
                        				M81 S1 ; turn off power when fans have turned off
                        		elif (fans[1].rpm > 500) && (fans[1].rpm < 1400)
                        			G4 S3 ; check again in 3 seconds in case it's just spinning up
                        			if (fans[1].rpm > 500) && (fans[1].rpm < 1400)
                        				echo "WARNING: Water pump RPM low - RPM : " ^ fans[1].rpm
                        				if (state.status=="processing")
                        					M25 ; pause print so you might be able to save it using M119
                        					;M41 P5 S1  ; activate output connected to externally powered latching relay here to sound alarm
                        					M0 ; unconditional stop.  If axes are homed and a print is being canceled will run cancel.g  otherwise will run stop.g
                        					M81 S1 ; turn off power when fans have turned off
                        		else
                        			;echo "Coolant OK - RPM : "  ^ fans[1].rpm
                        			
                        		if fans[2].rpm <=1000
                        			echo "WARNING: Water pump FAN RPM low - RPM : " ^ fans[2].rpm
                        			if (state.status=="processing")
                        				M25 ; pause print so you might be able to save it using M119
                        				;M41 P5 S1  ; activate output connected to externally powered latching relay here to sound alarm
                        				M0 ; unconditional stop.  If axes are homed and a print is being canceled will run cancel.g  otherwise will run stop.g
                        				M81 S1 ; turn off power when fans have turned off
                        
                        	if iterations == #heat.heaters-1 ; all heaters have been checked
                        		set global.LastCheckTime=state.upTime ; set the new time to check
                        
                        
                        ; END HEATER CHECKS
                        
                        
                        ; run other checks
                        
                        ;G4 S10 ; pause daemon.g for 10 seconds before next run
                        

                        This is output of M122 after reset (have to reload page to stop looping to get it)

                        M122
                        === Diagnostics ===
                        RepRapFirmware for Duet 2 WiFi/Ethernet version 3.3RC1+1 (2021-05-01 21:43:27) running on Duet WiFi 1.02 or later
                        Board ID: 08DGM-917NK-F2MS4-7J1DA-3S86T-TZTWD
                        Used output buffers: 3 of 24 (20 max)
                        === RTOS ===
                        Static ram: 23876
                        Dynamic ram: 78048 of which 0 recycled
                        Never used RAM 9636, free system stack 184 words
                        Tasks: NETWORK(ready,9.1%,218) ACCEL(notifyWait,0.0%,334) HEAT(delaying,0.0%,330) Move(notifyWait,0.1%,364) MAIN(running,90.3%,383) IDLE(ready,0.6%,29), total 100.0%
                        Owned mutexes:
                        === Platform ===
                        Last reset 00:00:52 ago, cause: software
                        Last software reset at 2021-05-03 07:12, reason: User, GCodes spinning, available RAM 9636, slot 0
                        Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x0041f000 BFAR 0xe000ed38 SP 0x00000000 Task MAIN Freestk 0 n/a
                        Error status: 0x00
                        Aux0 errors 0,0,0
                        Step timer max interval 0
                        MCU temperature: min 20.0, current 20.5, max 21.0
                        Supply voltage: min 24.2, current 24.4, max 24.5, under voltage events: 0, over voltage events: 0, power good: yes
                        Heap OK, handles allocated/used 99/9, heap memory allocated/used/recyclable 2048/232/108, gc cycles 0
                        Driver 0: position 0, standstill, SG min/max not available
                        Driver 1: position 0, standstill, SG min/max not available
                        Driver 2: position 0, standstill, SG min/max not available
                        Driver 3: position 0, standstill, SG min/max not available
                        Driver 4: position 0, standstill, SG min/max not available
                        Driver 5: position 0
                        Driver 6: position 0
                        Driver 7: position 0
                        Driver 8: position 0
                        Driver 9: position 0
                        Driver 10: position 0
                        Driver 11: position 0
                        Date/time: 2021-05-03 07:13:07
                        Cache data hit count 1772122779
                        Slowest loop: 15.56ms; fastest: 0.18ms
                        I2C nak errors 0, send timeouts 0, receive timeouts 0, finishTimeouts 0, resets 0
                        === Storage ===
                        Free file entries: 10
                        SD card 0 detected, interface speed: 20.0MBytes/sec
                        SD card longest read time 1.2ms, write time 0.0ms, max retries 0
                        === Move ===
                        DMs created 83, maxWait 0ms, bed compensation in use: none, comp offset 0.000
                        === MainDDARing ===
                        Scheduled moves 0, completed moves 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
                        === AuxDDARing ===
                        Scheduled moves 0, completed moves 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
                        === Heat ===
                        Bed heaters = 0 -1 -1 -1, chamberHeaters = -1 -1 -1 -1
                        Heater 1 is on, I-accum = 0.0
                        === GCodes ===
                        Segments left: 0
                        Movement lock held by null
                        HTTP is idle in state(s) 0
                        Telnet is idle in state(s) 0
                        File is idle in state(s) 0
                        USB is idle in state(s) 0
                        Aux is idle in state(s) 0
                        Trigger is idle in state(s) 0
                        Queue is idle in state(s) 0
                        LCD is idle in state(s) 0
                        Daemon is idle in state(s) 0
                        Autopause is idle in state(s) 0
                        Code queue is empty.
                        === Filament sensors ===
                        Extruder 0 sensor: ok
                        === Network ===
                        Slowest loop: 81.90ms; fastest: 0.00ms
                        Responder states: HTTP(2) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0), 0 sessions
                        HTTP sessions: 1 of 8
                        - WiFi -
                        Network state is active
                        WiFi module is connected to access point 
                        Failed messages: pending 0, notready 0, noresp 0
                        WiFi firmware version 1.26
                        WiFi MAC address bc:dd:c2:89:a0:bb
                        WiFi Vcc 3.37, reset reason Power up
                        WiFi flash size 4194304, free heap 23856
                        WiFi IP address 192.168.1.163
                        WiFi signal strength -58dBm, mode 802.11n, reconnections 0, sleep mode modem
                        Clock register 00002002
                        Socket states: 4 0 0 0 0 0 0 0
                        
                        OwenDundefined 1 Reply Last reply Reply Quote 0
                        • OwenDundefined
                          OwenD @OwenD
                          last edited by

                          If I watch the object model browser while performing an E-stop from DWC, I can see the root level global array become null in 3.3RC1.
                          reboot - 3.3rc1.png

                          Whereas in 3.3B3 it does not
                          reboot - 3.3b3.png

                          chrishammundefined 1 Reply Last reply Reply Quote 0
                          • chrishammundefined
                            chrishamm administrators @OwenD
                            last edited by

                            @owend Thanks for reporting this, I've got a fix ready. It will be part of RC2.

                            Duet software engineer

                            OwenDundefined 1 Reply Last reply Reply Quote 0
                            • OwenDundefined
                              OwenD @chrishamm
                              last edited by

                              @chrishamm said in DWC 3.3RC1 - Resetting controller causes connection loop.:

                              @owend Thanks for reporting this, I've got a fix ready. It will be part of RC2.

                              Just a note that this persists in 3.3RC2

                              Duet Web Control 3.3.0-rc2
                              Board: Duet 2 WiFi (2WiFi) - Stand alone
                              Firmware: RepRapFirmware for Duet 2 WiFi/Ethernet 3.3RC2 (2021-05-11)
                              Duet WiFi Server Version: 1.26

                              M122
                              === Diagnostics ===
                              RepRapFirmware for Duet 2 WiFi/Ethernet version 3.3RC2 (2021-05-11 14:55:01) running on Duet WiFi 1.02 or later
                              Board ID: 08DGM-917NK-F2MS4-7J1DA-3S86T-TZTWD
                              Used output buffers: 3 of 24 (20 max)
                              === RTOS ===
                              Static ram: 23876
                              Dynamic ram: 78076 of which 0 recycled
                              Never used RAM 9608, free system stack 184 words
                              Tasks: NETWORK(ready,12.3%,206) ACCEL(notifyWait,0.0%,334) HEAT(delaying,0.0%,330) Move(notifyWait,0.1%,364) MAIN(running,87.4%,441) IDLE(ready,0.2%,29), total 100.0%
                              Owned mutexes: WiFi(NETWORK)
                              === Platform ===
                              Last reset 00:03:21 ago, cause: software
                              Last software reset at 2021-05-12 19:06, reason: User, GCodes spinning, available RAM 9608, slot 1
                              Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x0041f000 BFAR 0xe000ed38 SP 0x00000000 Task MAIN Freestk 0 n/a
                              Error status: 0x00
                              Aux0 errors 0,0,0
                              Step timer max interval 0
                              MCU temperature: min 22.6, current 23.2, max 23.6
                              Supply voltage: min 24.2, current 24.3, max 24.5, under voltage events: 0, over voltage events: 0, power good: yes
                              Heap OK, handles allocated/used 99/9, heap memory allocated/used/recyclable 2048/512/388, gc cycles 0
                              Driver 0: position 0, standstill, SG min/max not available
                              Driver 1: position 0, standstill, SG min/max not available
                              Driver 2: position 0, standstill, SG min/max not available
                              Driver 3: position 0, standstill, SG min/max not available
                              Driver 4: position 0, standstill, SG min/max not available
                              Driver 5: position 0
                              Driver 6: position 0
                              Driver 7: position 0
                              Driver 8: position 0
                              Driver 9: position 0
                              Driver 10: position 0
                              Driver 11: position 0
                              Date/time: 2021-05-12 19:09:46
                              Cache data hit count 4294967295
                              Slowest loop: 16.05ms; fastest: 0.18ms
                              I2C nak errors 0, send timeouts 0, receive timeouts 0, finishTimeouts 0, resets 0
                              === Storage ===
                              Free file entries: 10
                              SD card 0 detected, interface speed: 20.0MBytes/sec
                              SD card longest read time 1.2ms, write time 0.0ms, max retries 0
                              === Move ===
                              DMs created 83, maxWait 0ms, bed compensation in use: none, comp offset 0.000
                              === MainDDARing ===
                              Scheduled moves 0, completed moves 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
                              === AuxDDARing ===
                              Scheduled moves 0, completed moves 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
                              === Heat ===
                              Bed heaters = 0 -1 -1 -1, chamberHeaters = -1 -1 -1 -1
                              Heater 1 is on, I-accum = 0.0
                              === GCodes ===
                              Segments left: 0
                              Movement lock held by null
                              HTTP is idle in state(s) 0
                              Telnet is idle in state(s) 0
                              File is idle in state(s) 0
                              USB is idle in state(s) 0
                              Aux is idle in state(s) 0
                              Trigger is idle in state(s) 0
                              Queue is idle in state(s) 0
                              LCD is idle in state(s) 0
                              Daemon is idle in state(s) 0
                              Autopause is idle in state(s) 0
                              Code queue is empty.
                              === Filament sensors ===
                              Extruder 0 sensor: ok
                              === Network ===
                              Slowest loop: 81.18ms; fastest: 0.00ms
                              Responder states: HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0), 0 sessions
                              HTTP sessions: 1 of 8
                              - WiFi -
                              Network state is active
                              WiFi module is connected to access point 
                              Failed messages: pending 0, notready 0, noresp 0
                              WiFi firmware version 1.26
                              WiFi MAC address bc:dd:c2:89:a0:bb
                              WiFi Vcc 3.37, reset reason Turned on by main processor
                              WiFi flash size 4194304, free heap 23856
                              WiFi IP address 192.168.1.163
                              WiFi signal strength -60dBm, mode 802.11n, reconnections 0, sleep mode modem
                              Clock register 00002002
                              Socket states: 0 0 0 0 0 0 0 0
                              
                              chrishammundefined 1 Reply Last reply Reply Quote 0
                              • chrishammundefined
                                chrishamm administrators @OwenD
                                last edited by

                                @owend Thanks, I can confirm there was still a minor bug in DWC, although it does not cause disconnects any more on my setup. It will be fixed in the next version.

                                Duet software engineer

                                OwenDundefined 1 Reply Last reply Reply Quote 0
                                • OwenDundefined
                                  OwenD @chrishamm
                                  last edited by

                                  @chrishamm
                                  Fixed in version 3.3 RC3 👍

                                  1 Reply Last reply Reply Quote 2
                                  • First post
                                    Last post
                                  Unless otherwise noted, all forum content is licensed under CC-BY-SA