How to pause a GCode program, run a remapped MCode, then resume GCode program

14 May 2018 04:54 #110714 by stark
Hi All,

I have a 3D printer with a paste extruder (four axes: X, Y, Z, A). Sometimes paste fouls the nozzle, which can effect the quality of the print. I have remapped an MCode so that the extruder moves to a place on my build plate where it can be cleaned on foam, as below. I can run this MCode from a button I have created in Axis.

When a GCode program is being run and when I notice the nozzle is dirty, I want to be able to press the button such that the program pauses, the MCode is run, and the program resumes from where it left off. At the moment, when I press the button during a program, I get the error "Can't switch mode while mode is AUTO and interpreter is not IDLE". I wonder if someone can suggest a way I can get around this please?

Thanks very much in advance.

o<m300> sub
#1 = 0 (set first counter to zero)
#2 = -1 (set secound reversing counter)
#3 = #<_x> (remember current print coordinates)
#4 = #<_y>
#5 = #<_z>
#6 = 2 (number of wipes)
G1 X-50.000 Y50.000 Z0.000 F1200 (go to wipe tower)
G91 (change to incremental distance for G1 moves)
o100 while [#1 LT #6] (loop from 1 to value set by user in M300 command)
#1 = [#1+1] (increase first counter)
#2 = -#2 (reverse sign of second counter)
G1 X[#2*10] (wipe needle)
o100 endwhile
G90 (change to absolute distance)
G1 X[#3] Y[#4] Z[#5] (return back to print coordinates)
o<m300> endsub
M2 (end sub routine)
14 May 2018 05:28 #110716 by cmorley
Linuxcnc can't pause in auto mode and run other code.
(well there has been code developed to do something similar but it never got finished/integrated)

You would have to abort the program, run your code then restart your original program.
restarting linuxcnc in an existing program is also a big weakness of linuxcnc - sucess depends on the type of gcode written.

Chris M
14 May 2018 05:32 #110717 by cmorley
You could possible do something along these lines with the moveoff component.
It's a kinda hacky way to do what you want but....

Chris M
14 May 2018 21:31 #110743 by stark
Thanks Chris,

It might be easier to incorporate the MCode into the GCode program so that there is regular wiping, say at times when my extruder lifts to move to another point on the print.

I appreciate your help.
15 May 2018 21:22 #110774 by cmorley
This is where block delete would work great.. unfortunately linuxcnc is weak there too .. it doesn't respond to block delete changes after it starts running..something I've meant to look into but never got too.
The inner workings of the motion controller is a hard pill to swallow.
There probably is a way to make a subroutine that checks a HAL pin state..then you could just add that subroutine at appropriate places - not elegent but workable.

Chris M
22 May 2018 01:43 #111007 by stark
Sorry for the late reply Chris,

We've talked amongst ourselves in the group and decided it's probably more practical to regularly, automatically wipe by placing MCode into the GCode at regular intervals (at layer changes for example), which will free us to walk away for the hour it might take to print something, rather than sit there and assiduously check for fouling and manually press a button. It will probably take a little trial and error to figure out where in the GCode is best to place the wipe sequence, but that's ok. Once again, thanks for your help.
Time to create page: 0.082 seconds
Powered by Kunena Forum