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

3.5.1 forgets whether filament is loaded with M999

Scheduled Pinned Locked Moved
Beta Firmware
2
8
356
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.
  • undefined
    achrn
    last edited by 28 Apr 2024, 19:54

    With 3.5.1 and new DuetPi image my printer half-forgets it has filament loaded when I issue M999. I don't think it used to do that.

    Duet 3 MB6HC 3.5.1 with a toolboard 1LC 3.5.1, SBC (Raspberry Pi 4) with recent Bookworm
    DSF 3.5.1 and DWC 3.5.1

    It's fully repeatable: Load a filament, use a filament, then do M999.

    When the machine comes to again, the tool pane then suggest that there is no filament loaded:
    26191ea5-1b5b-4c95-b125-1fa8fc754cc3-image.png

    However, if I click the 'Load filament' text it initially does the expected (at least, would be expected if no filament was loaded) 'Please choose a filament', but then apparently 'notices' that there is a filament loaded after all. If I had picked the filament type that is actually loaded, the dialog box disappears and nothing happens. If I pick a different filament:
    d7dfb50a-0adc-42f4-8a7c-be11170082f5-image.png

    I have to M702 to unload the filament that DWC has forgotten about, then can 'Load filament' from the web page and it goes as it should.

    I'm fairly sure M999 didn't require this rigmarole before - I don't remember needing it.

    config.g:

    ; Configuration file for Duet 3 (firmware version 3)
    ; initially generated by RepRapFirmware Configuration Tool v3.1.4 on Thu Sep 17 2020 20:49:45
    ; but subsequently significantly modified variously
    ; this for firmware 3.5.1
    ; initial pause for power and CAN bus to stabilise
    G4 S2
    ; General preferences
    M550 P"Delta" ; set printer name
    G90 ; send absolute coordinates
    M83 ; relative extruder moves
    ; geometrical config
    ; M665 = diagonal rod length, delta radius, homed height, printable radius, tower pos corrections
    ; M665 L360.250:360.250:360.250 R184.819 H538.341 B150.0 X-0.227 Y0.223 Z0.000 ; old 55mm centres effector
    M665 L360.250:360.250:360.250 R177.754 H520.261 B150.0 X-0.166 Y0.337 Z0.000 ; new 80mm centres effector
    M666 X0.101 Y0.027 Z-0.128 A0.00 B0.00 ; endstop adjustments
    ; Drives
    M569 P0.0 S0 ; physical drive 0.0 goes backwards
    M569 P0.1 S0 ; physical drive 0.1 goes backwards
    M569 P0.2 S0 ; physical drive 0.2 goes backwards
    M569 P121.0 S0 ; toolboard (CAN 121) drive 0 goes backwards
    M584 X0.0 Y0.1 Z0.2 E121.0 ; set drive to axis mapping
    M350 X16 Y16 Z16 E16 I1 ; configure microstepping with interpolation
    M92 X160.00 Y160.00 Z160.00 E680.00 ; set steps per mm - note XYZ are 400 steps/rev motors
    ; note extruder steps should notionally be 690 - to be tested (680 is figure from bear)
    ;M592 D0 A0.0007 B0.0010 ; configure non-linear extrusion, tbc with new extruder
    ; Speeds
    ; jerk at configtool defaults (20 mm/s) but extruder at manuf recommended values
    M566 X1200.00 Y1200.00 Z1200.00 E300.00 ; set maximum instantaneous speed changes (mm/min)
    ; max axis motor speed - duet apparent max step rate 145kHz,
    ; 145kHz at 160 steps/mm = 906 mm/s
    ; carriages run at 2.5x print head (at extreme position, rods at approx 22 deg)
    ; thus print head speed = 906/2.5 = 362 mm/s = 21750 mm/min
    ; However, back EMF for this is too high
    ; use RRF back-EMF calculator and keep either value < 24V, and sum < 36V
    ; so supply voltage is at least 2/3 of theoretical combined value
    ; this is satisfied if max speed = 250 mm/s - gives 12.1V and 23.6V
    ; 250 mm/s = 15000 mm/min
    ; extrude motor speed limit
    ; 145kHz at 690 steps/mm = 210 mm/s = 12,609 mm/min
    ; but use manufacturer recommended 7200 mm/min
    M203 X15000 Y15000 Z15000 E7200 ; set maximum speeds (mm/min)
    ; acceleration (configtool default is 1000 mm/s2) and set extruder to manuf recommended
    M201 X1200 Y1200 Z1200 E3000 ; set accelerations (mm/s^2)
    ; rated current E3D high-torque motor = 1.68A, x 75% = 1260 mA
    ; however, motors stay quite cool at that current
    ; increase current to 85% = 1430 mA
    ; extruder manufacturer recommended current is 1200 and idle 10%, but cannot set idle per axis
    M906 X1430 Y1430 Z1430 E1000 I30 ; set motor currents (mA) and motor idle percentage
    M84 S60 ; Stop idle hold after 60 seconds timeout
    ; Enable on-board accelerometer on the toolboard and/or apply input shaping
    ;M955 P121.0 I54
    M593 P"zvddd" F37
    ; Axis Limits
    M208 Z0 S1 ; set minimum Z
    ; Endstops
    M574 X2 S1 P"io6.in" ; configure active-high endstop for high end on X via pin io0.in
    M574 Y2 S1 P"io1.in" ; configure active-high endstop for high end on Y via pin io1.in
    M574 Z2 S1 P"io2.in" ; configure active-high endstop for high end on Z via pin io2.in
    ; Z-Probe on CAN bus 121
    ; note cannot program smart effector via toolboard, so no out port defined
    M558 P8 R0.4 C"121.io0.in" H3 F1200 T6000 ; set Z probe type to effector via toolboard and the dive height + speeds
    G31 P100 X0 Y0 Z-0.12 ; set Z probe trigger value, offset and trigger height
    M557 R145 S64 ; define mesh grid
    ; Heaters
    ; bed
    M308 S0 P"spi.cs1" A"bed" Y"rtd-max31865" ; configure sensor 0 as PT100 via CS pin spi.cs1
    M950 H0 C"out1" Q3 T0 ; create bed heater output on out1 and map it to sensor 0
    ; v3.1 tuning: M307 H0 A530 C1330 D21 S1 V0 B0
    M307 H0 R0.243 C1212.7 D46.41 S1.0 V0 B0 ; configure bed heater average three runs of M303 H0 S75
    M140 H0 S0 ; map heated bed to heater 0
    M143 H0 S150 ; set temperature limit for heater 0 to 150C - fault at 150
    ; hotend
    ; previous: M308 S1 P"spi.cs0" Y"rtd-max31865" A"hotend" ; hotend was previously PT100 via CS pin spi.cs0
    M308 S1 P"121.temp0" A"hotend" Y"thermistor" T100000 B4725 C7.06e-8 ; E3D Revo built-in thermistor
    M950 H1 C"121.out0" Q25 T1 ; create nozzle heater output on toolboard out0 and map it to sensor 1
    ; v3.1 tuning: M307 H1 A550 C330 D3 S1 V24 B0
    ; v3.2 tuning: M307 H1 R1.543 C300:200 D4.17 S1.0 V24 B0 ; average of three runs M303 H1 S220
    ; v3.3 tuning after rebuilding and rewiring effector: M307 H1 B0 R1.642 C245.2:183.2 D4.36 S1.00 V23.9
    ; v3.4 tuning with E3D revo micro: M307 H1 R4.4 K0.47 D1.48 E1.35 S1.00 B0 V24
    ; v3.5 tuning with revo via toolboard and diodes in supply:
    M307 H1 R3.90 K0.48:0.85 D1.95 E1.35 S1.00 B0 V24.0 ; average of multiple runs - see spreadsheet
    M143 H1 S300 ; heater 1 limit 300 (generate heater fault)
    ; chamber
    M308 S2 P"temp3" A"chamber" Y"thermistor" T4701 B4266 C1.048787e-7 ; dangling thermistor
    M950 H2 C"out3" T2 ; create a heater, but not actually anything connected to this output
    M141 H2 S99 ; set this to be chamber and set initial temperature (99 is effectively a flag)
    M141 S-400 ; switch chmaber heater off
    ; additional temperature sensors
    ; sensor 3: thermistor in bed heater mat
    M308 S3 P"temp2" A"bed_mat" Y"thermistor" T100000 B3950
    ; use this as additional overtemperature
    M143 H0 S150 P1 T3 A2 ; turn off heater if mat gets to 150C
    ; 4,5,6 - toolboard information
    ; sensor 4: PT1000 just above alu plate
    M308 S4 A"tool air" Y"PT1000" P"121.temp1"
    ; sensor 5: mcu temperature sensor
    M308 S5 A"tool processor" Y"mcu-temp" P"121.dummy"
    ; sensor 6: overtemperature flag on stepper driver
    M308 S6 A"tool drivers" Y"drivers" P"121.dummy"
    ; 7,8,9 mainboard information
    ; sensor 7: thermistor in electronics enclosure
    M308 S7 P"temp0" A"6HC air" Y"thermistor" T4701 B4266 C1.048787e-7
    ; sensor 8: mcu temperature sensor
    M308 S8 A"6HC processor" Y"mcu-temp"
    ; sensor 9: overtemperature flag on stepper drivers
    M308 S9 A"6HC drivers" Y"drivers"
    ; Fans
    ; print fan is four-wire on toolboard out1
    M950 F0 C"!121.out1+out1.tach" Q25000 ; create fan 0 on toolboard out1 and set its frequency
    M106 P0 S0 L0.1 B0.5 H-1 C"print" ; fan initially off, min pwm 0.1, 0.5 second blip, not thermostatic
    ; hot end fan
    ; hot end fan is always either on or off so PWM frequency etc. don't much matter
    M950 F1 C"121.out2" Q100 ; create fan 1 on toolboard out2 and set its frequency
    M106 P1 S1 H1 T50 C"hotend" ; set fan 1 thermostatic control on heater 1 at 50C
    ; other cooling fans
    ; both following predominantly controlled by analogue sensors but also set if stepper drivers flag is set
    ; fan 2 is blowing air into electronics compartment
    M950 F2 C"!out4" Q25000 ; fan 2 is 4-wire noctua on out4 (note inverse for 4-wire to work correctly) tacho not used
    M106 P2 S1 L0.25 B0.2 H7:9 T35:40 C"mainb" ; cooling electronics space thermostatic on sensor 7 35 to 40C
    ; fan 3 is small centrifugal fan blowing under main board
    M950 F3 C"out9" Q100 ; fan 3 on pin out9 and set its frequency
    M106 P3 S1 L0.4 B0.5 H8:9 T50:60 C"underb" ; fan 3 for cooling mainboard underside thermostatic sensor 8 (mcu temperature) 50 to 60C
    ; fan 4 is enclosure purge fan
    ; initially this is hard-coded to start at 35C enclosure temperature
    ; but daemon.g will override it
    M950 F4 C"!out5" Q25000 ; fan 4 is 4-wire noctua on out5 (note inverse for 4-wire to work correctly) tacho not used - could be '+out5.tach'
    M106 P4 S1 L0.25 B0.2 H2 T36:40 C"chamber" ; fan 4 thermsotatic, narrow band
    ; other IO etc
    ; paneldue on io0
    M575 P1 S1 B57600 ; serial channel 1, PanelDue mode w checksum; 57600 baud
    ; filament monitoring
    M591 D0 P1 C"121.io1.in" S1 ; enable filament monitoring on toolboard io1, high = filament present
    M950 J1 C"121.io2.in" ; filament sensor press-button is on different IO
    M581 P1 T2 S1 R2 ; set up trigger 2 on the press-button (extrudes 9mm)
    ; servo 1 on io7.out (note, needs to be 4, 5 or 7 as these are only PWM capable outputs)
    M950 S1 C"io7.out" ; create servo 1
    M280 P1 S10 ; set to 10 degree position, which is blades closed
    ; GPIO P2 used to reset attached pi
    M950 P2 C"io4.out" Q10 ; gpio 2 set to 10Hz on io4
    M42 P2 S1 ; that gpio set high
    ; M42 P2 S0 will shut down pi via. GPIO header
    ; 24V power control (only enabled for drives and heaters)
    ; note toolboard gets power from either 12V or 24V (diodes)
    M81 C"pson" ; set up power pin, power off
    ; system to memorise settings and filament parameters
    if !exists(global.nozt)
    global nozt = -1 ; used to memorise nozzle temperature when pausing
    if !exists(global.filament)
    global filament = "" ; this will be name of filament
    if !exists(global.filChangeT)
    global filChangeT = 0 ; this wil be the nozzle temperature for a filament change
    M98 P"0:/sys/setfilament.g" ; enable whatever was last recorded
    ; Define tool
    M563 P0 S"Nozzle" 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
    M207 S1.5 F7200 Z0.2 ; set typical retract
    T0 ; select first tool
    chrishammundefined 1 Reply Last reply 2 May 2024, 16:50 Reply Quote 0
    • chrishammundefined
      chrishamm administrators @achrn
      last edited by 2 May 2024, 16:50

      @achrn I don't think I've seen that problem before and the underlying code hasn't changed for ages. Is it possible that you upgraded to Debian Bookworm and/or uploaded filament.csv via FileZilla to the SD directory? If yes, you may need to adjust the permissions again, else RRF cannot overwrite that file and it will "forget" the last mapping. You can fix the permissions via SSH by running sudo chown -R dsf:dsf /opt/dsf/sd. Please check if that fixes it.

      Duet software engineer

      undefined 1 Reply Last reply 2 May 2024, 18:27 Reply Quote 0
      • undefined
        achrn @chrishamm
        last edited by 2 May 2024, 18:27

        @chrishamm Thanks for the suggestion, but that doesn't seem to be it.

        /opt/dsf/sd/sys/filaments.csv ownership and permissions is -rwxrwx--- 1 dsf dsf 98 May 2 19:08 filaments.csv

        I've just tried again. I started with a web page telling me to load filament, I click load filament and it tells me I must unload filament first. At this point my /opt/dsf/sd/sys/filaments.csv is

        RepRapFirmware filament assignment file v1 generated at 2024-04-29 20:55
        extruder,filament
        0,PETG

        So I M702 after which filaments.csv is

        RepRapFirmware filament assignment file v1 generated at 2024-05-02 19:07
        extruder,filament

        I then load PETG, after which filaments.csv is

        RepRapFirmware filament assignment file v1 generated at 2024-05-02 19:08
        extruder,filament
        0,PETG

        and the user interface knows it too:
        Screenshot 2024-05-02 190901.png

        I then M999 after which filaments.csv is (unchanged)

        RepRapFirmware filament assignment file v1 generated at 2024-05-02 19:08
        extruder,filament
        0,PETG

        but the web interface wants me to load filament:
        Screenshot 2024-05-02 190947.png

        If I click load filament I get the error:
        Screenshot 2024-05-02 191026.png

        So I M702, after which filaments.csv is back to:

        RepRapFirmware filament assignment file v1 generated at 2024-05-02 19:23
        extruder,filament

        and I can reload filament

        chrishammundefined 1 Reply Last reply 2 May 2024, 20:22 Reply Quote 0
        • chrishammundefined
          chrishamm administrators @achrn
          last edited by 2 May 2024, 20:22

          @achrn Odd, it comes back correctly on my setup after M999. A few questions: Does a page reload show the correct filament again? And if you open the browser dev tools via F12, can you see any errors in the JS console? Does M409 K"move.extruders" F"d99" show the correct filament? Your config.g may be helpful, too.

          Duet software engineer

          undefined 1 Reply Last reply 2 May 2024, 20:54 Reply Quote 0
          • undefined
            achrn @chrishamm
            last edited by achrn 5 Feb 2024, 21:21 2 May 2024, 20:54

            @chrishamm said in 3.5.1 forgets whether filament is loaded with M999:

            @achrn Odd, it comes back correctly on my setup after M999. A few questions: Does a page reload show the correct filament again?

            No. No amount of refreshing the page or opening it another tab changes anything.

            Opening a completely different browser it comes up as 'Load filament' If I have it happy and knowing it has PETG loaded in Edge on Windows, M999 so I get Edge showing 'Load Filament' , then open a copy of Chrome on the same PC and point that at the printer it opens showing 'Load Filament', and clicking that kicks off the 'Unload the current filament...' sequence. No amount of F5 (at any stage in the process) changes any behaviour.

            If I open Firefox on a different device (an android tablet) it comes up showing 'Load Filament'. etc.

            And if you open the browser dev tools via F12, can you see any errors in the JS console?

            If that's the option labelled 'Console' no - empty pane. I don't know what I'm looking at in this though...
            0d3d4a2a-8430-48b5-893e-fb2e49fc1bd1-image.png

            Does M409 K"move.extruders" F"d99" show the correct filament?

            Yes

            02/05/2024, 21:43:02 M409 K"move.extruders" F"d99"
            {
            "key": "move.extruders",
            "flags": "d99",
            "result": [
            {
            "acceleration": 3000,
            "current": 1000,
            "driver": "121.0",
            "factor": 1,
            "filament": "PETG",
            "filamentDiameter": 1.75,
            "jerk": 300,
            "microstepping": {
            "interpolated": true,
            "value": 16
            },
            "nonlinear": {
            "a": 0,
            "b": 0,
            "upperLimit": 0.2
            },
            "percentCurrent": 100,
            "percentStstCurrent": 71,
            "position": 0,
            "pressureAdvance": 0,
            "rawPosition": 0,
            "speed": 7200,
            "stepsPerMm": 680
            }
            ],
            "next": 0
            }

            Your config.g may be helpful, too.

            It's unchanged from the first post in the thread:
            Edit: sorry, nearly unchanged - I've added a global variable and a new input and trigger:

            ; Configuration file for Duet 3 (firmware version 3)
            ; initially generated by RepRapFirmware Configuration Tool v3.1.4 on Thu Sep 17 2020 20:49:45
            ; but subsequently significantly modified variously
            ; this for firmware 3.5.1
            ; initial pause for power and CAN bus to stabilise
            G4 S2
            ; General preferences
            M550 P"Delta" ; set printer name
            G90 ; send absolute coordinates
            M83 ; relative extruder moves
            ; geometrical config
            ; M665 = diagonal rod length, delta radius, homed height, printable radius, tower pos corrections
            ; M665 L360.250:360.250:360.250 R184.819 H538.341 B150.0 X-0.227 Y0.223 Z0.000 ; old 55mm centres effector
            M665 L360.250:360.250:360.250 R177.754 H520.261 B150.0 X-0.166 Y0.337 Z0.000 ; new 80mm centres effector
            M666 X0.101 Y0.027 Z-0.128 A0.00 B0.00 ; endstop adjustments
            ; Drives
            M569 P0.0 S0 ; physical drive 0.0 goes backwards
            M569 P0.1 S0 ; physical drive 0.1 goes backwards
            M569 P0.2 S0 ; physical drive 0.2 goes backwards
            M569 P121.0 S0 ; toolboard (CAN 121) drive 0 goes backwards
            M584 X0.0 Y0.1 Z0.2 E121.0 ; set drive to axis mapping
            M350 X16 Y16 Z16 E16 I1 ; configure microstepping with interpolation
            M92 X160.00 Y160.00 Z160.00 E680.00 ; set steps per mm - note XYZ are 400 steps/rev motors
            ; note extruder steps should notionally be 690 - to be tested (680 is figure from bear)
            ;M592 D0 A0.0007 B0.0010 ; configure non-linear extrusion, tbc with new extruder
            ; Speeds
            ; jerk at configtool defaults (20 mm/s) but extruder at manuf recommended values
            M566 X1200.00 Y1200.00 Z1200.00 E300.00 ; set maximum instantaneous speed changes (mm/min)
            ; max axis motor speed - duet apparent max step rate 145kHz,
            ; 145kHz at 160 steps/mm = 906 mm/s
            ; carriages run at 2.5x print head (at extreme position, rods at approx 22 deg)
            ; thus print head speed = 906/2.5 = 362 mm/s = 21750 mm/min
            ; However, back EMF for this is too high
            ; use RRF back-EMF calculator and keep either value < 24V, and sum < 36V
            ; so supply voltage is at least 2/3 of theoretical combined value
            ; this is satisfied if max speed = 250 mm/s - gives 12.1V and 23.6V
            ; 250 mm/s = 15000 mm/min
            ; extrude motor speed limit
            ; 145kHz at 690 steps/mm = 210 mm/s = 12,609 mm/min
            ; but use manufacturer recommended 7200 mm/min
            M203 X15000 Y15000 Z15000 E7200 ; set maximum speeds (mm/min)
            ; acceleration (configtool default is 1000 mm/s2) and set extruder to manuf recommended
            M201 X1200 Y1200 Z1200 E3000 ; set accelerations (mm/s^2)
            ; rated current E3D high-torque motor = 1.68A, x 75% = 1260 mA
            ; however, motors stay quite cool at that current
            ; increase current to 85% = 1430 mA
            ; extruder manufacturer recommended current is 1200 and idle 10%, but cannot set idle per axis
            M906 X1430 Y1430 Z1430 E1000 I30 ; set motor currents (mA) and motor idle percentage
            M84 S60 ; Stop idle hold after 60 seconds timeout
            ; Enable on-board accelerometer on the toolboard and/or apply input shaping
            ;M955 P121.0 I54
            M593 P"zvddd" F37
            ; Axis Limits
            M208 Z0 S1 ; set minimum Z
            ; Endstops
            M574 X2 S1 P"io6.in" ; configure active-high endstop for high end on X via pin io0.in
            M574 Y2 S1 P"io1.in" ; configure active-high endstop for high end on Y via pin io1.in
            M574 Z2 S1 P"io2.in" ; configure active-high endstop for high end on Z via pin io2.in
            ; Z-Probe on CAN bus 121
            ; note cannot program smart effector via toolboard, so no out port defined
            M558 P8 R0.4 C"121.io0.in" H3 F1200 T6000 ; set Z probe type to effector via toolboard and the dive height + speeds
            G31 P100 X0 Y0 Z-0.12 ; set Z probe trigger value, offset and trigger height
            M557 R145 S64 ; define mesh grid
            ; Heaters
            ; bed
            M308 S0 P"spi.cs1" A"bed" Y"rtd-max31865" ; configure sensor 0 as PT100 via CS pin spi.cs1
            M950 H0 C"out1" Q3 T0 ; create bed heater output on out1 and map it to sensor 0
            ; v3.1 tuning: M307 H0 A530 C1330 D21 S1 V0 B0
            M307 H0 R0.243 C1212.7 D46.41 S1.0 V0 B0 ; configure bed heater average three runs of M303 H0 S75
            M140 H0 S0 ; map heated bed to heater 0
            M143 H0 S150 ; set temperature limit for heater 0 to 150C - fault at 150
            ; hotend
            ; previous: M308 S1 P"spi.cs0" Y"rtd-max31865" A"hotend" ; hotend was previously PT100 via CS pin spi.cs0
            M308 S1 P"121.temp0" A"hotend" Y"thermistor" T100000 B4725 C7.06e-8 ; E3D Revo built-in thermistor
            M950 H1 C"121.out0" Q25 T1 ; create nozzle heater output on toolboard out0 and map it to sensor 1
            ; v3.1 tuning: M307 H1 A550 C330 D3 S1 V24 B0
            ; v3.2 tuning: M307 H1 R1.543 C300:200 D4.17 S1.0 V24 B0 ; average of three runs M303 H1 S220
            ; v3.3 tuning after rebuilding and rewiring effector: M307 H1 B0 R1.642 C245.2:183.2 D4.36 S1.00 V23.9
            ; v3.4 tuning with E3D revo micro: M307 H1 R4.4 K0.47 D1.48 E1.35 S1.00 B0 V24
            ; v3.5 tuning with revo via toolboard and diodes in supply:
            M307 H1 R3.90 K0.48:0.85 D1.95 E1.35 S1.00 B0 V24.0 ; average of multiple runs - see spreadsheet
            M143 H1 S300 ; heater 1 limit 300 (generate heater fault)
            ; chamber
            M308 S2 P"temp3" A"chamber" Y"thermistor" T4701 B4266 C1.048787e-7 ; dangling thermistor
            M950 H2 C"out3" T2 ; create a heater, but not actually anything connected to this output
            M141 H2 S99 ; set this to be chamber and set initial temperature (99 is effectively a flag)
            M141 S-400 ; switch chmaber heater off
            ; additional temperature sensors
            ; sensor 3: thermistor in bed heater mat
            M308 S3 P"temp2" A"bed_mat" Y"thermistor" T100000 B3950
            ; use this as additional overtemperature
            M143 H0 S150 P1 T3 A2 ; turn off heater if mat gets to 150C
            ; 4,5,6 - toolboard information
            ; sensor 4: PT1000 just above alu plate
            M308 S4 A"tool air" Y"PT1000" P"121.temp1"
            ; sensor 5: mcu temperature sensor
            M308 S5 A"tool processor" Y"mcu-temp" P"121.dummy"
            ; sensor 6: overtemperature flag on stepper driver
            M308 S6 A"tool drivers" Y"drivers" P"121.dummy"
            ; 7,8,9 mainboard information
            ; sensor 7: thermistor in electronics enclosure
            M308 S7 P"temp0" A"6HC air" Y"thermistor" T4701 B4266 C1.048787e-7
            ; sensor 8: mcu temperature sensor
            M308 S8 A"6HC processor" Y"mcu-temp"
            ; sensor 9: overtemperature flag on stepper drivers
            M308 S9 A"6HC drivers" Y"drivers"
            ; Fans
            ; print fan is four-wire on toolboard out1
            M950 F0 C"!121.out1+out1.tach" Q25000 ; create fan 0 on toolboard out1 and set its frequency
            M106 P0 S0 L0.1 B0.5 H-1 C"print" ; fan initially off, min pwm 0.1, 0.5 second blip, not thermostatic
            ; hot end fan
            ; hot end fan is always either on or off so PWM frequency etc. don't much matter
            M950 F1 C"121.out2" Q100 ; create fan 1 on toolboard out2 and set its frequency
            M106 P1 S1 H1 T50 C"hotend" ; set fan 1 thermostatic control on heater 1 at 50C
            ; other cooling fans
            ; both following predominantly controlled by analogue sensors but also set if stepper drivers flag is set
            ; fan 2 is blowing air into electronics compartment
            M950 F2 C"!out4" Q25000 ; fan 2 is 4-wire noctua on out4 (note inverse for 4-wire to work correctly) tacho not used
            M106 P2 S1 L0.25 B0.2 H7:9 T35:40 C"mainb" ; cooling electronics space thermostatic on sensor 7 35 to 40C
            ; fan 3 is small centrifugal fan blowing under main board
            M950 F3 C"out9" Q100 ; fan 3 on pin out9 and set its frequency
            M106 P3 S1 L0.4 B0.5 H8:9 T50:60 C"underb" ; fan 3 for cooling mainboard underside thermostatic sensor 8 (mcu temperature) 50 to 60C
            ; fan 4 is enclosure purge fan
            ; initially this is hard-coded to start at 35C enclosure temperature
            ; but daemon.g will override it
            M950 F4 C"!out5" Q25000 ; fan 4 is 4-wire noctua on out5 (note inverse for 4-wire to work correctly) tacho not used - could be '+out5.tach'
            M106 P4 S1 L0.25 B0.2 H2 T36:40 C"chamber" ; fan 4 thermsotatic, narrow band
            ; other IO etc
            ; paneldue on io0
            M575 P1 S1 B57600 ; serial channel 1, PanelDue mode w checksum; 57600 baud
            ; filament monitoring
            M591 D0 P1 C"121.io1.in" S1 ; enable filament monitoring on toolboard io1, high = filament present
            M950 J2 C"121.io2.in" ; filament sensor press-button is on different IO set to sensor 2
            M581 P2 T2 S1 R2 ; set up trigger 2 on the press-button (extrudes)
            if !exists(global.t2time)
            global t2time = state.upTime ; used to memorise nozzle temperature
            else
            set global.t2time = state.upTime
            ; toolboard buttons
            M950 J3 C"121.button0" ; corner button defined as sensor 3
            M581 P3 T3 S1 R2 ; calls trigger 3 when pressed (when not printing)
            ; servo 1 on io7.out (note, needs to be 4, 5 or 7 as these are only PWM capable outputs)
            M950 S1 C"io7.out" ; create servo 1
            M280 P1 S10 ; set to 10 degree position, which is blades closed
            ; GPIO P2 used to reset attached pi
            M950 P2 C"io4.out" Q10 ; gpio 2 set to 10Hz on io4
            M42 P2 S1 ; that gpio set high
            ; M42 P2 S0 will shut down pi via. GPIO header
            ; 24V power control (only enabled for drives and heaters)
            ; note toolboard gets power from either 12V or 24V (diodes)
            M81 C"pson" ; set up power pin, power off
            ; system to memorise settings and filament parameters
            if !exists(global.nozt)
            global nozt = -1 ; used to memorise nozzle temperature when pausing
            if !exists(global.filament)
            global filament = "" ; this will be name of filament
            if !exists(global.filChangeT)
            global filChangeT = 0 ; this wil be the nozzle temperature for a filament change
            M98 P"0:/sys/setfilament.g" ; enable whatever was last recorded
            ; Define tool
            M563 P0 S"Nozzle" 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
            M207 S1.5 F7200 Z0.2 ; set typical retract
            T0 ; select first tool
            1 Reply Last reply Reply Quote 0
            • undefined
              achrn
              last edited by 4 May 2024, 08:28

              A little more on this, I've now tried with both 32 bit and 64 bit DuetPi 'lite' images, and they exhibit the same behaviour. I haven't tried the full-fat images.

              I've also tried both images with no customisations (previously I had set machine name, set username, and enabled ssh).

              I tried putting the previous 3.4.2 SD card back in the Pi, and returning the firmware to 3.4.2, and now I get the same behaviour (i.e. it half forgets it has filament loaded when I M999). This is very odd, because I feel really sure that it wasn't doing that before (though I am now questioning myself).

              I've run out of ideas for diagnosing now, so maybe I just have to live with it and need to unload and reload filament every time the machine resets.

              chrishammundefined 1 Reply Last reply 8 May 2024, 13:12 Reply Quote 0
              • chrishammundefined
                chrishamm administrators @achrn
                last edited by chrishamm 5 Aug 2024, 13:22 8 May 2024, 13:12

                @achrn Thanks for the config, I could reproduce this problem and I will work out a fix. It looks like something in your config prevents the move key from being properly refreshed. If I run M906 E1234 (as an example), the assigned filament shows up as expected.

                Edit: I've got a bug fix ready. I suggest you change something that modifies the move key at the end of your config.g (as I did with M906 E...) to work-around this problem for now.

                Duet software engineer

                undefined 1 Reply Last reply 8 May 2024, 16:14 Reply Quote 1
                • undefined
                  achrn @chrishamm
                  last edited by 8 May 2024, 16:14

                  @chrishamm said in 3.5.1 forgets whether filament is loaded with M999:

                  Edit: I've got a bug fix ready. I suggest you change something that modifies the move key at the end of your config.g (as I did with M906 E...) to work-around this problem for now.

                  Excellent thanks. I changed the 'real' M906 E1000 near the top of the config to a lower value (actually 500) and put my desired M906 E1000 as the last statement in config.g and it now doesn't forget about the filament, either for a M999 or for a full power down and power up again.

                  1 Reply Last reply Reply Quote 0
                  • Phaedruxundefined Phaedrux moved this topic from Firmware installation 9 May 2024, 17:47
                  1 out of 8
                  • First post
                    1/8
                    Last post
                  Unless otherwise noted, all forum content is licensed under CC-BY-SA