M0 not behaving as I would expect it to..
-
Firmware version?
-
@Phaedrux 3.5.3
-
M122 === Diagnostics === RepRapFirmware for Duet 3 Mini 5+ version 3.5.3 (2024-09-18 11:25:48) running on Duet 3 Mini5plus WiFi (standalone mode) Board ID: 5FTQV-B396U-D65J0-40KMQ-KZ03Z-HQ1PY Used output buffers: 11 of 40 (32 max) Error in macro line 146 while starting up: in file macro line 146 column 71: meta command: unknown variable 'manual_m0_detected' === RTOS === Static ram: 103368 Dynamic ram: 122904 of which 132 recycled Never used RAM 12492, free system stack 198 words Tasks: NETWORK(2,nWait 7,13.9%,228) HEAT(3,nWait 1,0.0%,325) Move(4,nWait 6,0.0%,355) CanReceiv(6,nWait 1,0.0%,939) CanSender(5,nWait 7,0.0%,336) CanClock(7,delaying,0.0%,334) TMC(4,nWait 6,1.5%,110) MAIN(1,running,83.5%,665) IDLE(0,ready,0.3%,29) AIN(4,delaying,0.8%,268), total 100.0% Owned mutexes: WiFi(NETWORK) === Platform === Last reset 00:01:29 ago, cause: power up Last software reset at 2025-02-11 15:45, reason: HardFault imprec, FilamentSensors spinning, available RAM 12492, slot 1 Software reset code 0x406d HFSR 0x40000000 CFSR 0x00000400 ICSR 0x00489803 BFAR 0xe000ed38 SP 0x20012020 Task NETW Freestk 488 ok Stack: 2002c658 200322f8 200014e4 00000000 20033496 0003039d 000302b4 610f6000 2002c640 2002c640 00000001 2002c496 2001882c 2001ea80 00030523 00000000 00000000 00000000 200120b8 00000014 00000000 00000002 ebbf0050 f807a8c0 0800016a 00000001 00034c99 Error status: 0x00 Aux0 errors 0,0,0 MCU revision 3, ADC conversions started 67589, completed 67588, timed out 0, errs 0 MCU temperature: min 19.9, current 25.0, max 25.2 Supply voltage: min 23.8, current 23.9, max 23.9, under voltage events: 0, over voltage events: 0, power good: yes Heap OK, handles allocated/used 99/3, heap memory allocated/used/recyclable 2048/148/36, gc cycles 0 Events: 0 queued, 0 completed Driver 0: standstill, SG min 0, read errors 0, write errors 0, ifcnt 10, reads 8136, writes 10, timeouts 0, DMA errors 0, CC errors 0 Driver 1: standstill, SG min 0, read errors 0, write errors 0, ifcnt 10, reads 8136, writes 10, timeouts 0, DMA errors 0, CC errors 0 Driver 2: standstill, SG min 0, read errors 0, write errors 0, ifcnt 10, reads 8136, writes 10, timeouts 0, DMA errors 0, CC errors 0 Driver 3: standstill, SG min 0, read errors 0, write errors 0, ifcnt 10, reads 8136, writes 10, timeouts 0, DMA errors 0, CC errors 0 Driver 4: standstill, SG min 0, read errors 0, write errors 0, ifcnt 10, reads 8136, writes 10, timeouts 0, DMA errors 0, CC errors 0 Driver 5: standstill, SG min 0, read errors 0, write errors 0, ifcnt 10, reads 8136, writes 10, timeouts 0, DMA errors 0, CC errors 0 Driver 6: standstill, SG min 0, read errors 0, write errors 0, ifcnt 10, reads 8136, writes 10, timeouts 0, DMA errors 0, CC errors 0 Date/time: 2025-02-12 11:20:44 Cache data hit count 166834675 Slowest loop: 7.17ms; fastest: 0.16ms === Storage === Free file entries: 19 SD card 0 detected, interface speed: 22.5MBytes/sec SD card longest read time 3.6ms, write time 3.6ms, max retries 0 === Move === DMs created 83, segments created 0, maxWait 0ms, bed compensation in use: none, 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 0, completed 0, 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, chamber heaters -1 -1 -1 -1, ordering errs 0 Heater 1 is on, I-accum = 0.0 === GCodes === Movement locks held by null, 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 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 0x0000803 Code queue 0 is empty Q1 segments left 0, axes/extruders owned 0x0000000 Code queue 1 is empty === CAN === Messages queued 808, received 0, lost 0, errs 422845, boc 0 Longest wait 0ms for reply type 0, peak Tx sync delay 0, free buffers 26 (min 26), ts 450/0/0 Tx timeouts 0,0,449,0,0,357 last cancelled message type 30 dest 127 === Network === Slowest loop: 9.50ms; fastest: 0.00ms Responder states: MQTT(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0) HTTP sessions: 1 of 8 === WiFi === Interface state: active Module is connected to access point Failed messages: pending 0, notrdy 0, noresp 0 Firmware version 2.1.0 MAC address d8:bf:c0:14:df:67 Module reset reason: Power up, Vcc 3.33, flash size 2097152, free heap 36436 WiFi IP address 192.168.4.79 Signal strength -39dBm, channel 11, mode 802.11n, reconnections 0 Clock register 00002001 Socket states: 0 0 0 0 0 0 0 0
-
@JADoglio said in M0 not behaving as I would expect it to..:
When I add M25 as the first line of stop.g to pause the print, I get the same error and the print does not stop.
I don't think that's going to work. You'd have to issue the pause first, and then cancel.
What exactly are you trying to achieve?
-
@JADoglio M0 was originally intended to be used in sequential job files. In RRF it is also allowed to terminate a paused job, to save inventing another command. It is not intended to instantly stop a running Job. You should use M112 for that.
-
Phaedrux, I was just trying to find a way to do one click stop print with the option to leave the heaters on. I often find I start a print and quickly figure out that I made some mistake and need to adjust something. It is easy enough to do it with pause and cancel. The issue is it takes a few more seconds while the system writes the resume data and then calls the option to cancel and it also turns off the heaters and fans even though the next print starts seconds later. I thought this would be easy.
It seems it is not. In trying to do this I also became very familiar with the process and limitations of M0. I was also a bit surprised to learn that M0 is called automatically at the end of every print. I use a stop print macro to do the same things, not knowing it was not needed. I understand this was probably built in for safety reasons. The feature to make sure the heaters and fans were turned off after the print is good but it would be nice to have the option to manually turn that off and use my own macros to manage how the print ends..
DC42, thanks for the suggestion. Based on the above you have probably figured out why M112 is not a preferred option.
I appreciate the help. You might want to consider update M0 so when it is issued from the command line it pauses the print (if it is not already), then stops the print using stop.g.
-
@JADoglio you can create a macro to pause and cancel a job with one press of a button.
-
Interesting, I have written a lot of macros and I have been learning how to use variables and and adding logic to the macros. So, of you are referring to just creating a macro to this, that is not what I am looking for. If I can create a macro and then create a button on the status page (on both the DWC and the Panel Due) to activate it, that would be perfect? Is that possible? If it is, what resources can you point me to to see how this would work. Thanks
-
@JADoglio you can have macro buttons on the Dashboard page of DWC (Control page of PanelDue) but not on the Status pages.
There is a plugin for DWC called BtnCmd (https://github.com/MintyTrebor/BtnCmd) that lets you create custom layouts and buttons - perhaps that would be useful to you.
-
@dc42 Thanks I will have a look!
-
Thanks, I installed the add in and it should be useful. Can buttons be added to the standard pages that already exist in DWC like "Status" or "Dashboard" using this tool, or is that beyond what it was designed to do? Also, this only solves part of the issue. The bigger issue is how do I cancel or intercept the inherent M0 issued by Rep Rap so the firmware does not ALWAYS turn off the heaters at the end of the gcode execution for a print. Since the inherent M0 runs after the machine configured end print script runs, I should be able to intercept it and cancel/modify it before it executes. I am pretty sure at this point that it can't be, but it seems I should be able to configure the execution of my files to behave as I want them to. Your thoughts are always appreciated.
-
@JADoglio no, it can't add buttons to other pages than it's own.
I use global variables if I want to override heaters turning off https://github.com/TeamGloomy/Troodon-V2/blob/improved/Config/sys/stop.g -
@JADoglio said in M0 not behaving as I would expect it to..:
The bigger issue is how do I cancel or intercept the inherent M0 issued by Rep Rap so the firmware does not ALWAYS turn off the heaters at the end of the gcode execution for a print.
When M0 is executed within a print job (and in 3.6, when the end of the job file is reached without encountering M0), RRF runs file sys/stop.g if it exists, otherwise it uses the default behaviour which is to turn off all heaters. So you can change the behaviour by creating a stop.g file.
When M0 is run when the print is paused. RRF first tries to run sys/cancel.g, then if that isn't found it behaves as above.