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

    Tool changer wait for cooldown... :(

    Scheduled Pinned Locked Moved
    General Discussion
    4
    22
    471
    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.
    • droftartsundefined
      droftarts administrators @Chriss
      last edited by

      @Chriss Okay, thanks. I've asked for it to be tested, as I don't have a tool changer or multiple tool machine.

      Ian

      Bed-slinger - Mini5+ WiFi/1LC | RRP Fisher v1 - D2 WiFi | Polargraph - D2 WiFi | TronXY X5S - 6HC/Roto | CNC router - 6HC | Tractus3D T1250 - D2 Eth

      Chrissundefined 1 Reply Last reply Reply Quote 0
      • Chrissundefined
        Chriss @droftarts
        last edited by Chriss

        @droftarts So we have misunderstood us. I have this:

        tpost0.g:M116 P0
        tpost1.g:M116 P1
        tpost2.g:M116 P2
        tpost3.g:M116 P3
        

        So every tpost has a "M116 with Px" accordingly. I can remember that I stumbled over that when I started to write the config and the effect is present with that config.

        We agree that we want to M116 in the tpost, don't we?

        Cheers, Chriss

        Edit: I just saw that "M116" only (without the P) has effect to the current selected too only. I'm not sure that this is correct. I can remember that I added the "P" later because I saw that "waiting for standby" in the past. But it could be that there was a firmware update since than and all of my memory is not valid anymore.

        droftartsundefined 1 Reply Last reply Reply Quote 0
        • droftartsundefined
          droftarts administrators @Chriss
          last edited by

          @Chriss Maybe it should be just M116. According to this change in 3.5.1 https://github.com/Duet3D/RepRapFirmware/wiki/Changelog-RRF-3.x#reprapfirmware-351-stable-changes-since-346

          M116 without parameters only waits for slow heaters (beds, chambers) and for the selected tool heaters of the current tool (if any) assigned to the current motion system. In previous versions, M116 waited for all heaters to reach their target temperatures

          Ian

          Bed-slinger - Mini5+ WiFi/1LC | RRP Fisher v1 - D2 WiFi | Polargraph - D2 WiFi | TronXY X5S - 6HC/Roto | CNC router - 6HC | Tractus3D T1250 - D2 Eth

          Chrissundefined 1 Reply Last reply Reply Quote 0
          • Chrissundefined
            Chriss @droftarts
            last edited by Chriss

            @droftarts Good morning Ian,

            I gave it a shoot but with the very same result. The active tool waits till the tool which went into standby reached the standby temp.

            And that "new" (3.5.1) behavior does not seems to make much sense to me to be honest.

            It would be far more logical to me to have:
            M116 = wait for all
            M116 P0,1,2 = wait for the list of tools
            M116 P-1 = wait for all
            And maybe a other switch like: "X0" = do not wait for standby temp at all. There are maybe some very rare edge cases where you want to wait till the temp went down.

            Cherrs, Chriss

            Edit: I was unable to resist and had a quick look into the current code (well at 3.5-dev), I have to admit that I do not fully understand how that value of P is handed over:

            if (gb.Seen('P'))
                    {
                     // Wait for the heaters associated with the specified tool to be ready
                      if (!ToolHeatersAtSetTemperatures(Tool::GetLockedTool(gb.GetIValue()).Ptr(), true, lerance, gb.IsFileChannel()))
                                  {
                          return false;
                                    }
                                      seen = true;
                             }
                                                    
            

            I do think to use "H" in the meantime, that looks a bit more promising:

              if (gb.Seen('H'))
                          {
                            // Wait for specified heater(s) to be ready
                            uint32_t heaters[MaxHeaters];
                            size_t heaterCount = MaxHeaters;
                            gb.GetUnsignedArray(heaters, heaterCount, false);
                                                    
                            for (size_t i = 0; i < heaterCount; i++)
                                                                                                    {
                    if (!reprap.GetHeat().HeaterAtSetTemperature(heaters[i], true, tolerance, gb.
                                                    IsFileChannel()))
                                   {
                         return false;
               }
                     }
                            seen = true;
                       }
            
            droftartsundefined 1 Reply Last reply Reply Quote 0
            • droftartsundefined
              droftarts administrators @Chriss
              last edited by

              @Chriss Thanks for checking the code! The code in 3.6-dev looks the same: https://github.com/Duet3D/RepRapFirmware/blob/5c06d3b1e200de8c7cc2b70f00d9234a28f49fea/src/GCodes/GCodes2.cpp#L1940

              @dc42 will need to have a look at this.

              Ian

              Bed-slinger - Mini5+ WiFi/1LC | RRP Fisher v1 - D2 WiFi | Polargraph - D2 WiFi | TronXY X5S - 6HC/Roto | CNC router - 6HC | Tractus3D T1250 - D2 Eth

              Chrissundefined 1 Reply Last reply Reply Quote 0
              • Chrissundefined
                Chriss @droftarts
                last edited by

                @droftarts Hi Ian,
                I had the hope to see how the value of P is handed over. The "GetLockedTool" seems to me like it is pointing to the attached tool. Anyway, just guessing. I guess that David can point it out here.

                I have the feeling that we end her in a feature request and I will work around that with the H parameter. It seems to me that H will do what I need too.

                Cheers, Chriss

                droftartsundefined 1 Reply Last reply Reply Quote 1
                • droftartsundefined
                  droftarts administrators @Chriss
                  last edited by

                  @Chriss @dc42 tested M116 last night, and found it to be working correctly from his tests. These were very simplified, please could you try the same?

                  Test 1 (tested with 3.6.0-beta.4 in standalone mode):

                  • T2 heater is on an expansion board, T1 heater on the main board. But it shouldn't make a difference where the heaters are because the main board does the waiting.
                  • File tpost1.g has M116 P1 in it
                  • Temperatures set manually in DWC. T2 to 195/140, T1 to 100/100.
                  • T2 selected manually, and wait for it to heat up
                  • Run this macro:
                    T1
                    G1 X-50 Y-50
                    
                  • Macro selects T1 which has active/standby temps 100 and 100
                  • Followed by a G1 move, which happens immediately, with T1 at temperature, and T2 still cooling down from 195.

                  Test 2

                  • temperatures manually in DWC. T2 to 192/140, T1 to 110/100, in case having to heat T1 makes a difference
                  • Worked correctly. After selecting T1 it waited for it to heat from 100 to 110C, then moved and the machine went idle. T2 was still cooling down through 180C.

                  Notes fro dc42

                  • I've looked at the code several times and I really don't think there is a problem with it. Are we certain that the user doesn't have more than one M116 command for each tool? Or could it be that he has a heater that is shared between tools, and that is complicating the issue? (I said no, I don't think this is the case)
                  • Has he tried running M122 while he says the tool is waiting to cool down? It should report under GCodes which commands it is waiting on. (Please try this)
                  • There is no difference in how tool change is handled in SBC mode, it's all handled by RRF, so this shouldn't be different between SBC and standalone.
                  • Please test with the new tool active and standby temps set the same, like dc42 did. If that works OK, try making them just slightly different.
                  • M116 P# is working correctly for me.

                  And perhaps most importantly ... !

                  • Maybe his slicer is inserting temperature commands for the old tool or its heater? (Please check the gcode you're running to see if this is the case)

                  Ian

                  Bed-slinger - Mini5+ WiFi/1LC | RRP Fisher v1 - D2 WiFi | Polargraph - D2 WiFi | TronXY X5S - 6HC/Roto | CNC router - 6HC | Tractus3D T1250 - D2 Eth

                  Chrissundefined 2 Replies Last reply Reply Quote 0
                  • mikeabuilderundefined
                    mikeabuilder
                    last edited by

                    I had some temperature challenges with my tool changer and found I had some temperature settings in my filament config.g file which I was calling via M703 and those were messing me up. But I don't see any M703 in your tpost.g.

                    Chrissundefined 1 Reply Last reply Reply Quote 0
                    • Chrissundefined
                      Chriss @mikeabuilder
                      last edited by

                      @mikeabuilder Thanks for the input, that does not apply to me, I do not use any filament specific config.

                      1 Reply Last reply Reply Quote 0
                      • Chrissundefined
                        Chriss @droftarts
                        last edited by

                        @droftarts Hi Ian,

                        Thanks for your comment. The Slicer is the very first thing I checked, I do not trust the Prusa slicer at all. 😉

                        I was off for some days. Give me some days for the test you and David asked me to too. It may be the case that I made a mistake with the config of the heaters/tools. That could be a very good explanation.

                        I will come back to this thread.

                        Cheers, Chriss

                        1 Reply Last reply Reply Quote 0
                        • Chrissundefined
                          Chriss @droftarts
                          last edited by

                          @droftarts said in Tool changer wait for cooldown... 😞:

                          • Has he tried running M122 while he says the tool is waiting to cool down? It should report under GCodes which commands it is waiting on. (Please try this)

                          I configured T0 and T1 to be at 195/100, I activated T0 via the CodeConsole, waited till it was heated up. Changed to T1 and executed M112 via the DWC console:

                          m122
                          === Diagnostics ===
                          RepRapFirmware for Duet 3 MB6HC version 3.5.4 (2024-11-24 10:47:10) running on Duet 3 MB6HC v1.0 or earlier (SBC mode)
                          Board ID: 08DJM-956L2-G43S4-6JTDL-3SS6L-1876H
                          Used output buffers: 1 of 40 (39 max)
                          === RTOS ===
                          Static ram: 155464
                          Dynamic ram: 93804 of which 2196 recycled
                          Never used RAM 91528, free system stack 119 words
                          Tasks: SBC(2,ready,1.1%,797) HEAT(3,nWait 6,0.0%,321) Move(4,nWait 6,0.0%,211) CanReceiv(6,nWait 1,0.1%,771) CanSender(5,nWait 7,0.0%,329) CanClock(7,delaying,0.0%,346) TMC(4,nWait 6,9.5%,53) MAIN(2,running,88.0%,139) IDLE(0,ready,1.2%,29), total 100.0%
                          Owned mutexes: HTTP(MAIN)
                          === Platform ===
                          Last reset 20:47:26 ago, cause: power up
                          Last software reset at 2025-02-26 14:52, reason: User, Gcodes spinning, available RAM 91424, slot 2
                          Software reset code 0x6003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x00400000 BFAR 0x00000000 SP 0x00000000 Task SBC Freestk 0 n/a
                          Error status: 0x00
                          Aux0 errors 0,0,0
                          MCU temperature: min 40.4, current 41.3, max 41.8
                          Supply voltage: min 23.8, current 23.9, max 24.1, under voltage events: 0, over voltage events: 0, power good: yes
                          12V rail voltage: min 12.0, current 12.1, max 12.1, under voltage events: 0
                          Heap OK, handles allocated/used 99/26, heap memory allocated/used/recyclable 2048/632/240, gc cycles 0
                          Events: 0 queued, 0 completed
                          Driver 0: standstill, SG min 0, mspos 888, reads 23697, writes 14 timeouts 0
                          Driver 1: standstill, SG min n/a, mspos 8, reads 23711, writes 0 timeouts 0
                          Driver 2: standstill, SG min 25, mspos 632, reads 23703, writes 8 timeouts 0
                          Driver 3: standstill, SG min 0, mspos 344, reads 23703, writes 8 timeouts 0
                          Driver 4: standstill, SG min 0, mspos 1000, reads 23703, writes 8 timeouts 0
                          Driver 5: standstill, SG min 0, mspos 264, reads 23697, writes 14 timeouts 0
                          Date/time: 2025-03-07 07:10:35
                          Slowest loop: 656.65ms; fastest: 0.05ms
                          === Storage ===
                          Free file entries: 20
                          SD card 0 not detected, interface speed: 37.5MBytes/sec
                          SD card longest read time 0.0ms, write time 0.0ms, max retries 0
                          === Move ===
                          DMs created 125, segments created 6, maxWait 164754ms, bed compensation in use: mesh, height map offset 0.000, max steps late 0, min interval 0, bad calcs 0, ebfmin 0.00, ebfmax 0.00
                          no step interrupt scheduled
                          Moves shaped first try 0, on retry 0, too short 0, wrong shape 0, maybepossible 0
                          === DDARing 0 ===
                          Scheduled moves 145, completed 145, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
                          === DDARing 1 ===
                          Scheduled moves 0, completed 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
                          === Heat ===
                          Bed heaters 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1, chamber heaters -1 -1 -1 -1, ordering errs 0
                          Heater 15 is on, I-accum = 0.0
                          === GCodes ===
                          Movement locks held by null, null
                          HTTP* is doing "M122" in state(s) 0
                          Telnet* is doing "M116" in state(s) 0 9, running macro
                          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
                          SBC is idle in state(s) 0
                          Daemon is idle in state(s) 0
                          Aux2 is idle in state(s) 0
                          Autopause is idle in state(s) 0
                          File2 is idle in state(s) 0
                          Queue2 is idle in state(s) 0
                          Q0 segments left 0, axes/extruders owned 0x40000003
                          Code queue 0 is empty
                          Q1 segments left 0, axes/extruders owned 0x0000000
                          Code queue 1 is empty
                          === CAN ===
                          Messages queued 2839, received 26664, lost 0, errs 0, boc 0
                          Longest wait 2ms for reply type 6013, peak Tx sync delay 376, free buffers 50 (min 49), ts 1508/1508/0
                          Tx timeouts 0,0,0,0,0,0
                          === SBC interface ===
                          Transfer state: 5, failed transfers: 0, checksum errors: 0
                          RX/TX seq numbers: 48709/48709
                          SPI underruns 0, overruns 0
                          State: 5, disconnects: 0, timeouts: 0 total, 0 by SBC, IAP RAM available 0x24cfc
                          Buffer RX/TX: 0/0-0, open files: 0
                          === Duet Control Server ===
                          Duet Control Server version 3.5.4 (2024-11-25 17:32:26, 64-bit)
                          HTTP+Executed:
                          > Executing M122
                          Trigger+Start:
                          > Executing M409 K"network" I1 (32 more codes pending)
                          >> Macro config.g: Idle
                          Trigger+Pre:
                          > Executing M409 K"volumes" I1 (32 more codes pending)
                          >> Macro config.g: Idle
                          Trigger+ProcessInternally:
                          > Executing M409 K"volumes" I1 (32 more codes pending)
                          >> Macro config.g: Idle
                          Trigger+Post:
                          > Executing M409 K"volumes" I1 (32 more codes pending)
                          >> Macro config.g: Idle
                          Telnet:
                          Buffered code: M116
                          Buffered codes: 24 bytes total
                          >> Doing macro tpost1.g, started by T1
                          Trigger:
                          >> Finishing macro config.g, started by system
                          Code buffer space: 4096
                          Configured SPI speed: 8000000Hz, TfrRdy pin glitches: 0
                          Full transfers per second: 38.23, max time between full transfers: 77.5ms, max pin wait times: 66.6ms/23.4ms
                          Codes per second: 1.33
                          Maximum length of RX/TX data transfers: 5256/720
                          

                          I was a bit unsure because it looks OKish to me. So I did the same similar test: (same temp settings)
                          T1 was active
                          I changed to T0 via the CodeConsole and I was not able to enter any command on the CodeConsole. So I tied to move the tool via the DWC console (G1 Y100) and the head was moving before the the T1 reached its standby temp.
                          The CodeConsole on the PI was responsive as soon as the T1 reached its standby temp.

                          I will do some of the other tests soon, this is just an update.

                          Cheers, Chriss

                          Chrissundefined 1 Reply Last reply Reply Quote 0
                          • Chrissundefined
                            Chriss @Chriss
                            last edited by

                            Here some parts of my config:

                            root@blimy:~/SD-Card/sys/hardware# cat tool* | grep M563

                            M563 P0 S"Tool 0" D0 H10 F10	; define tool
                            M563 P1 S"Tool 1" D1 H15 F15	; define tool
                            M563 P2 S"Tool 2" D2 H20 F20	; define tool
                            M563 P3 S"Tool 3" D3 H25 F25	; define tool
                            
                            

                            Heater/fan configs for the tools:
                            root@blimy:~/SD-Card/sys/hardware# cat tool* | grep M950

                            M950 H10 C"120.out0" T10	; create nozzle heater output on 120.out0 and map it to sensor 10
                            M950 F10 C"120.out1" Q50	; create fan 10 on pin 120.out1 and set its frequency
                            M950 F11 C"120.out2" Q50	; create fan 11 on pin 120.out2 and set its frequency
                            M950 H15 C"121.out0" T15	; create nozzle heater output on 121.out0 and map it to sensor 15
                            M950 F15 C"121.out1" Q50	; create fan 15 on pin 121.out1 and set its frequency
                            M950 F16 C"121.out2" Q50	; create fan 16 on pin 121.out2 and set its frequency
                            M950 H20 C"122.out0" T20	; create nozzle heater output on 0.out3 and map it to sensor 20
                            M950 F20 C"122.out1" Q50	; create fan 20 on pin 122.out1 and set its frequency
                            M950 F21 C"122.out2" Q50	; create fan 1 on pin 0.out9 and set its frequency
                            M950 H25 C"123.out0" T25	; create nozzle heater output on 123.out0 and map it to sensor 25
                            M950 F25 C"123.out1" Q50	; create fan 25 on pin 123.out1 and set its frequency
                            M950 F26 C"123.out2" Q50	; create fan 26 on pin 123.out2 and set its frequency
                            

                            I do not see a overlap in my sensor config:
                            root@blimy:~/SD-Card/sys/hardware# cat tool* | grep M308

                            M308 S10 P"120.temp0" Y"thermistor" A"Tool 0" T100000 B4725 C7.06e-8	; Slice engineering 300C
                            M308 S15 P"121.temp0" Y"thermistor" A"Tool 1" T500000 B4723 C1.196220e-7 H0	; Slice 450°C
                            M308 S20 P"122.temp0" Y"thermistor" A"Tool 2" T500000 B4723 C1.196220e-7 H0     ; Slice 450°C
                            M308 S25 P"123.temp0" Y"thermistor" A"Tool 3" T100000 B4725 C7.06e-8	; Slice engineering 300C
                            

                            Any my fan config:

                            root@blimy:~/SD-Card/sys/hardware# cat tool* | grep M950

                            M950 H10 C"120.out0" T10	; create nozzle heater output on 120.out0 and map it to sensor 10
                            M950 F10 C"120.out1" Q50	; create fan 10 on pin 120.out1 and set its frequency
                            M950 F11 C"120.out2" Q50	; create fan 11 on pin 120.out2 and set its frequency
                            M950 H15 C"121.out0" T15	; create nozzle heater output on 121.out0 and map it to sensor 15
                            M950 F15 C"121.out1" Q50	; create fan 15 on pin 121.out1 and set its frequency
                            M950 F16 C"121.out2" Q50	; create fan 16 on pin 121.out2 and set its frequency
                            M950 H20 C"122.out0" T20	; create nozzle heater output on 0.out3 and map it to sensor 20
                            M950 F20 C"122.out1" Q50	; create fan 20 on pin 122.out1 and set its frequency
                            M950 F21 C"122.out2" Q50	; create fan 1 on pin 0.out9 and set its frequency
                            M950 H25 C"123.out0" T25	; create nozzle heater output on 123.out0 and map it to sensor 25
                            M950 F25 C"123.out1" Q50	; create fan 25 on pin 123.out1 and set its frequency
                            M950 F26 C"123.out2" Q50	; create fan 26 on pin 123.out2 and set its frequency
                            

                            There is no problem with a config, isn't it?

                            Cheers, Chriss

                            Chrissundefined 1 Reply Last reply Reply Quote 0
                            • Chrissundefined
                              Chriss @Chriss
                              last edited by Chriss

                              I write a tiny macro

                              t0
                              g1 y100 x100
                              t1
                              g1 y100 y100
                              

                              I started the macro via the DWV, T0 was active wen I started it. The tool drove to y100 x100 picked up the new tool and the head stopped after the pickup and I executed M122 via the CodeConsole

                              m122
                              === Diagnostics ===
                              RepRapFirmware for Duet 3 MB6HC version 3.5.4 (2024-11-24 10:47:10) running on Duet 3 MB6HC v1.0 or earlier (SBC mode)
                              Board ID: 08DJM-956L2-G43S4-6JTDL-3SS6L-1876H
                              Used output buffers: 10 of 40 (39 max)
                              === RTOS ===
                              Static ram: 155464
                              Dynamic ram: 93856 of which 2144 recycled
                              Never used RAM 91528, free system stack 119 words
                              Tasks: SBC(2,rWait:,1.1%,797) HEAT(3,nWait 6,0.0%,321) Move(4,nWait 6,0.0%,211) CanReceiv(6,nWait 1,0.1%,771) CanSender(5,nWait 7,0.0%,329) CanClock(7,delaying,0.0%,346) TMC(4,nWait 6,9.3%,53) MAIN(2,running,89.5%,139) IDLE(0,ready,0.0%,29), total 100.0%
                              Owned mutexes: Telnet(MAIN)
                              === Platform ===
                              Last reset 21:21:33 ago, cause: power up
                              Last software reset at 2025-02-26 14:52, reason: User, Gcodes spinning, available RAM 91424, slot 2
                              Software reset code 0x6003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x00400000 BFAR 0x00000000 SP 0x00000000 Task SBC Freestk 0 n/a
                              Error status: 0x00
                              Aux0 errors 0,0,0
                              MCU temperature: min 41.2, current 41.5, max 42.3
                              Supply voltage: min 23.8, current 23.9, max 24.1, under voltage events: 0, over voltage events: 0, power good: yes
                              12V rail voltage: min 12.0, current 12.1, max 12.1, under voltage events: 0
                              Heap OK, handles allocated/used 99/26, heap memory allocated/used/recyclable 2048/632/240, gc cycles 0
                              Events: 0 queued, 0 completed
                              Driver 0: standstill, SG min 0, mspos 888, reads 41360, writes 6 timeouts 0
                              Driver 1: standstill, SG min n/a, mspos 8, reads 41367, writes 0 timeouts 0
                              Driver 2: standstill, SG min 26, mspos 568, reads 41361, writes 6 timeouts 0
                              Driver 3: standstill, SG min 0, mspos 280, reads 41361, writes 6 timeouts 0
                              Driver 4: standstill, SG min 0, mspos 936, reads 41361, writes 6 timeouts 0
                              Driver 5: standstill, SG min 0, mspos 264, reads 41360, writes 6 timeouts 0
                              Date/time: 2025-03-07 07:44:43
                              Slowest loop: 54.58ms; fastest: 0.04ms
                              === Storage ===
                              Free file entries: 20
                              SD card 0 not detected, interface speed: 37.5MBytes/sec
                              SD card longest read time 0.0ms, write time 0.0ms, max retries 0
                              === Move ===
                              DMs created 125, segments created 6, maxWait 1762317ms, bed compensation in use: mesh, height map offset 0.000, max steps late 0, min interval 0, bad calcs 0, ebfmin 0.00, ebfmax 0.00
                              no step interrupt scheduled
                              Moves shaped first try 0, on retry 0, too short 0, wrong shape 0, maybepossible 0
                              === DDARing 0 ===
                              Scheduled moves 244, completed 244, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 1], CDDA state -1
                              === DDARing 1 ===
                              Scheduled moves 0, completed 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
                              === Heat ===
                              Bed heaters 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1, chamber heaters -1 -1 -1 -1, ordering errs 0
                              Heater 15 is on, I-accum = 0.0
                              === GCodes ===
                              Movement locks held by null, null
                              HTTP* is doing "M116" in state(s) 0 9 0, running macro
                              Telnet* is doing "M122" 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
                              SBC is idle in state(s) 0
                              Daemon is idle in state(s) 0
                              Aux2 is idle in state(s) 0
                              Autopause is idle in state(s) 0
                              File2 is idle in state(s) 0
                              Queue2 is idle in state(s) 0
                              Q0 segments left 0, axes/extruders owned 0x40000003
                              Code queue 0 is empty
                              Q1 segments left 0, axes/extruders owned 0x0000000
                              Code queue 1 is empty
                              === CAN ===
                              Messages queued 18453, received 180246, lost 0, errs 0, boc 0
                              Longest wait 2ms for reply type 6013, peak Tx sync delay 384, free buffers 50 (min 49), ts 10239/10239/0
                              Tx timeouts 0,0,0,0,0,0
                              === SBC interface ===
                              Transfer state: 5, failed transfers: 0, checksum errors: 0
                              RX/TX seq numbers: 59813/59813
                              SPI underruns 0, overruns 0
                              State: 5, disconnects: 0, timeouts: 0 total, 0 by SBC, IAP RAM available 0x24cfc
                              Buffer RX/TX: 0/0-0, open files: 0
                              === Duet Control Server ===
                              Duet Control Server version 3.5.4 (2024-11-25 17:32:26, 64-bit)
                              Telnet+Executed:
                              > Executing M122
                              Trigger+Start:
                              > Executing M409 K"network" I1 (32 more codes pending)
                              >> Macro config.g: Idle
                              Trigger+Pre:
                              > Executing M409 K"volumes" I1 (32 more codes pending)
                              >> Macro config.g: Idle
                              Trigger+ProcessInternally:
                              > Executing M409 K"volumes" I1 (32 more codes pending)
                              >> Macro config.g: Idle
                              Trigger+Post:
                              > Executing M409 K"volumes" I1 (32 more codes pending)
                              >> Macro config.g: Idle
                              HTTP:
                              Buffered code: M116
                              Buffered codes: 24 bytes total
                              >> Doing macro 0:/macros/test.g, started by M98 P"0:/macros/test.g"
                              >> Suspended code: G1 Y100 Y100
                              >>> Doing macro tpost1.g, started by T1
                              Trigger:
                              >> Finishing macro config.g, started by system
                              Code buffer space: 4096
                              Configured SPI speed: 8000000Hz, TfrRdy pin glitches: 0
                              Full transfers per second: 37.42, max time between full transfers: 71.2ms, max pin wait times: 66.5ms/42.1ms
                              Codes per second: 0.05
                              Maximum length of RX/TX data transfers: 5560/720
                              ok
                              

                              Here is the tpost1.g at the time of the execution:
                              root@blimy:~/SD-Card/sys# cat tpost1.g

                              ; tpost1.g
                              ; called after tool 1 has been selected
                              ;
                              
                              ; Wait for set temperatures to be reached
                              M116
                              ; P1
                              
                              

                              I have removed the "P1" as a result from previous part of the thread.

                              Cheers, Chriss

                              Chrissundefined 1 Reply Last reply Reply Quote 0
                              • Chrissundefined
                                Chriss @Chriss
                                last edited by

                                I have the same behavior with the "P0" and "P1" at the M116. And It is till the case that the tools starts moving as soon as I change the standby temp close to the current temp of the previous tool. So M116 is definitely waiting for the previous tools standby temp. 😞

                                I will continue doing the tests...

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

                                  @Chriss I have reviewed the code and I believe there is a bug in that M116 with no P parameter may incorrectly wait on some additional heaters to reach temperature. However, the code to implement M116 with P parameter looks good to me, and that is what I tested (and failed to find a fault with).

                                  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

                                  Chrissundefined 2 Replies Last reply Reply Quote 0
                                  • Chrissundefined
                                    Chriss @dc42
                                    last edited by

                                    @dc42 Hi David, I apologies for the late reply, I lost the focus on that problem.
                                    I will retest it with the P parameter tomorrow. But I can tell you that I had the P parameter in the config at the very beginning and I experienced the issue.
                                    Anyway, I do understand the concept behind the M116 in this way:
                                    "M116" = Wait for every active heaters on the active motion system. That may indicate that all tools at a toolchanger are infected because they belong to the same axes. But that is is not clear to me why it should wait for the standby temp at all. But this is a philosophical question.
                                    "M116 Px" = That waiting should affect the selected tool.

                                    So it was logical to me that I should use the "Px".

                                    The only thing which I have not tested yet is the H parameter. That could do it in this case too, I may need to test that. But anyway, it would be good retest "Px" again to make sure that it works as it should.

                                    Will let you know more tomorrow.

                                    Cheers, Chriss

                                    1 Reply Last reply Reply Quote 0
                                    • Chrissundefined
                                      Chriss @dc42
                                      last edited by

                                      @dc42 Hi David, I just tested a bit with a very simple setup:

                                      tpost0.g

                                      ; tpost0.g
                                      ; called after tool 0 has been selected
                                      ;
                                      ; Wait for set temperatures to be reached
                                      M116 P0
                                      

                                      tpost1.g

                                      ; tpost1.g
                                      ; called after tool 1 has been selected
                                      ;
                                      
                                      ; Wait for set temperatures to be reached
                                      M116 P1
                                      

                                      test_macro.g

                                      t0
                                      g1 y100 x100
                                      t1
                                      g1 y100 y100
                                      
                                      t-1
                                      

                                      And I configured T0 and T1 via the DWC to 205:100. And you guess what? The problem is gone now. 🤔

                                      I have to admit that I do not know how I felt into that rabbit hole at the beginning. I swear that I experienced that. I can remember that I was on the phone with the first time it happened and I spoke with him about it. (Yes, I just called him for confirmation) But I do not know what I have changed in the meantime.

                                      It could be that I configured T1 at that time, I simply don't know and I see no big benefit in speculating more.

                                      That made me to look a bit closer in the slicer generated g-code:

                                      ;AFTER_LAYER_CHANGE
                                      ;8.3
                                      G92 E0
                                      ;_ON_LAYER_CHANGE LAYER=41
                                      G1 E-.2 F7200
                                      ; Filament-specific end gcode
                                      G10 S100 P0 ; set temperature ;cooldown
                                      ; ##### Chriss
                                      T1
                                      
                                      ; ##### Chriss END
                                      ; Filament gcode
                                      G10 S210 P1 ; set temperature
                                      M116 ; wait for temperature to be reached
                                      G1 Z8.5 F3000
                                      G1 X111.499 Y113.02 F9600
                                      G1 Z8.3 F3000
                                      
                                      

                                      You can find my tool change gcode from the prusa slicer in the lines 8 till 11. I tested with the slicer generated g-code and the "problem" is back. So I can confirm now that the slicer generated M116 from line 14 is stopping the printer and the printer waits till the old tool has reached the standby temp.
                                      The firmware is still 3.5.4. So my understanding is that the sentence form the M116 docu: "Note that in v3.5, the scope of tool heaters to wait for is limited to the heaters of the currently selected tool of the selected motion system." is not fully tue, isn't it? So I guess that I run into the bug you mentioned.

                                      Cheers, Chriss

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

                                        @Chriss yes, that sounds like the reason. That bug is fixed in recent 3.6.0-rc firmware builds. The latest is rc1+2 at https://www.dropbox.com/scl/fo/y03luwmbypirbxncla3rk/AAJFLPFsVdFylemyhkXsAac?rlkey=7cq4svp4rzl2ztdffpzq2ghjk&dl=0 but if you use these, you will need to get DWC from the 3.6.0-rc.1 release.

                                        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

                                        Chrissundefined 1 Reply Last reply Reply Quote 0
                                        • Chrissundefined
                                          Chriss @dc42
                                          last edited by

                                          @dc42 Cool.. thank you very much! I will consider to do the upgrade in the next days. The printer is still in the build phase and I have a lot of other things todo anyway. So I may wait, let's see.

                                          Cheers, Chriss

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