CNC Pause and Resume config files
-
It works! And the spindle turns off with pause and on with resume!
-
@owend It's only 9pm here, but I've been trying to sort this all day!
-
@nightowl999
OK,
So the problem was there was no tool selected.
I would have thought that was necessary to turn a spindle on, but maybe not.
If you have multiple tools then you'll need to consider how to store which tool was selected when you pause (if RRF doesn't store that in CNC mode) -
@owend This is how my spindle is configured in config.g:
; Makita and relay configuration M950 R0 C"out1+out7" L0:18000 ; enable router relay on out7 M563 P0 S"Makita" R0 ; assign spindle 0 to tool 0 and name it Makita T0 ; select tool 0
This was only configured to turn the spindle off/on via a relay, but I figured I will need this resolved for when my speed-contollable milling motor turns up. My assumption is the speed thing isn't relevant as the DI isn't connected.
-
@nightowl999
What happens in the console when you run
M98 P"0:/sys/config.g"
You're selecting T0, so I'm at a loss why it's not selected in your job.
Somewhere something is turning it off. -
-
@nightowl999
yes -
@owend
Only this:27/05/2022, 21:02:24 M98 P"0:/sys/config.g"
HTTP is enabled on port 80
FTP is disabled
TELNET is disabled
Error: in file macro line 66 column 27: meta command: variable 'savedSpindleSpeed' already existsbut I haven't 'rebooted' the Duet
-
@nightowl999
OK
That error is normal if you haven't rebooted.I'm at a loss why you have no tool selected when pause.g begins unless RRF deselects it when G25 is run.
I've been looking through the object model a bit and I think you can do away with teh global variable and use values from the object model.
I'll post something to try in 5-10 minutes -
@owend If you're sure. I don't want to stress you (or me!) out trying to resolve this. I thought this would be easy
I'm going back to the hous, but I'll update the files when you post the answer ( ) and I'll try it out toorrow morning (my time).
I'm really grateful for your time and help with this, @OwenD
-
@nightowl999
Try these
; pause.g G1 X273.5 Y560 F2400 ; move XY to a safe place M5 ; turn the spindle off
and
;resume.g if state.restorePoints[0].toolNumber =-1 "echo no tool was saved- selecting T0" T0 else T{state.restorePoints[0].toolNumber} ; select the tool that was active if state.restorePoints[0].spindleSpeeds[0] = 0 echo "No resume speed was saved" else M3 S{state.restorePoints[0].spindleSpeeds[0]} ; resume saved spindle speed G4 S1 ; wait 1 second to allow the spindle to spin up echo "Spindle speed resumed at ", state.restorePoints[0].spindleSpeeds[0], "RPM" ; this should show that the setting was successful
Forgot to comment "resume.g" corrected.
Also I have no way of checking what's stored in the restore point arrays. -
@owend I tweaked the first echo, too!
-
@owend I need to call it a night. I've been summoned and the neighbours don't like the noise!
Here's the last bit of Console text...
27/05/2022, 21:28:41 M0 Printing paused at X205.3 Y258.9 Z64.0 Cancelled printing file 0:/gcodes/Calibration Toolpath.gcode, print time was 0h 0m 27/05/2022, 21:28:30 M25 Resume state saved 27/05/2022, 21:28:29 Printing resumed 27/05/2022, 21:28:21 M24 no tool was saved- selecting T0 Error: in file macro line 7 column 4: meta command: unknown value 'spindleSpeeds^' 27/05/2022, 21:28:17 Printing paused at X205.3 Y212.6 Z65.0 27/05/2022, 21:28:07 M25 Resume state saved 27/05/2022, 21:27:48 M32 "0:/gcodes/Calibration Toolpath.gcode" File 0:/gcodes/Calibration Toolpath.gcode selected for printing
Once again, the spindle didn't restart
-
@nightowl999
OK.
As I said, I have no way of checking exactly how the restore points for spindles work.
Perhaps @DC42 could chime in at this point now that it's narrowed down and explain why there's no tool selected when you pause and also whether all the spindle speeds etc are saved in the object model. -
-
@owend said in CNC Pause and Resume config files:
As I said, I have no way of checking exactly how the restore points for spindles work.
I think the issue was only really with saving and restoring the spindle speed of a digitally controlled milling motor.
If I need to pause the CNC, the only real difference between that and a 3D printer is it would be safer to turn the spindle off, and back on at the same speed on resume. Lifting the Z and moving the XY to a predetermined location is my variation on what seems to be the default for a 3D printer, i.e. X0, Y0 and Z0 (but I'm happy to be corrected.
The default pause.g and resume.g files work as they should, even with my 'safe location' amendments, it's just saving and restoring the spindle speed.
@dc42 first helped me with this by showing how to declare a global variable (savedSpindleSpeed) in the config.g file, then setting the variable's value to the actual spindle speed when pause.g is initiated.
It sounded simple, but for some reason - as you've identified @OwenD - something is 'deselecting' the tool or the value of the variable isn't being saved.
-
@nightowl999
I've just found that the restore points are saved to slot 1 in a pause.
So if my last macro was to work it would have to be;resume.g if state.restorePoints[1].toolNumber =-1 "echo no tool was saved- selecting T0" T0 else T{state.restorePoints[1].toolNumber} ; select the tool that was active if state.restorePoints[1].spindleSpeeds[0] = 0 echo "No resume speed was saved" else M3 S{state.restorePoints[1].spindleSpeeds[0]} ; resume saved spindle speed G4 S1 ; wait 1 second to allow the spindle to spin up echo "Spindle speed resumed at ", state.restorePoints[1].spindleSpeeds[0], "RPM" ; this should show that the setting was successful
-
Thank you so much, @OwenD!
I'll update the pause.g and resume.g files, but am I correct in thinking all the save/resume 'stuff' is being carried out in the resume.g file now, rather than the pause.g file?
From what I've gleaned, these are the files I'm going to try out:
; pause.g G1 Z{max(move.axes[2].userPosition+5,move.axes[2].max-5)} F240 ; move the Z axis slowly to a safe height G0 X273.5 Y560 ; move XY to a safe place M5; turn the spindle off
;resume.g if state.restorePoints[1].toolNumber =-1 echo "No tool was saved - selecting T0" T0 else T{state.restorePoints[1].toolNumber} ; select the tool that was active if state.restorePoints[1].spindleSpeeds[0] = 0 echo "No resume speed was saved" else M3 S{state.restorePoints[1].spindleSpeeds[0]} ; resume saved spindle speed G4 S1 ; wait 1 second to allow the spindle to spin up echo "Spindle speed resumed at ", state.restorePoints[1].spindleSpeeds[0], "RPM" ; this should show that the setting was successful G1 R1 X0 Y0 F2400 ; move XY back to last saved location G1 R1 Z0 F240 ; move Z slowly to last saved location
Also, it seems I no longer need the variable to be defined in the config.g file?Thank you
-
I'm wondering if the issue is with the state of the spindle is being saved after it's been turned off with the M5 line in the pause.g file, or does the very act of initiating pause.g save the state of the machine somewhere?
I'll have a look at transposing the files and see how I get on...
-
@nightowl999
When you pause the job RRF saves certain values automatically.
From what I can glean from the docs that should include the spindle state, direction and speed.
If you hit pause and then use the object model browser you should be able to confirm.
I can't as I don't have a spindle configured.