I would like to see an existing motion behavior removed or at least be disabled optionally in settings. Whenever an M or S code is encountered in the GCode or MDI the machine decelerates to 0, executes the command, and resumes. There is not necessarily any need for it to stop in the following example.
g00 x0 s1000 motion starts and spindle at 1000
g01 x10 s5500 motion stops, spindle changes to 5500, motion continues
g01 x20 s5500 motion stops, spindle still at 5500, motion continues (no change was made but the fact there was an S code in the line means the motion stops to address it)
If the spindle speed commands weren't in there, the machine would travel from x0 to x20 without interruption but with the extra commands in there (I tested and saw the same behavior with turning coolant on and off during motion) travel slows to 0 and without any delay executes the command and accelerates back to it's previous rate.
I have my Spindle Accel/Decel time at 0 and 'Wait on spindle to stabilize' disabled
The reason I want the travel rate uninterrupted is because I'm using spindle control PWM signals to control the power output of a laser to do raster engraving.
Assume each 'pixel' i want to engrave is 1mm and I'm drawing a 5mm striped pattern I'd code as:
g00 x0y0 starting point
x50 lead in for acceleration
x55 s255 laser power max 5mm
x60 s0 laser off 5mm
x65 s128 laser half power 5mm
x70 s0 laser off
x120 lead out for deceleration
y1 next line
The laser PWM control and positional results of this code work perfectly but that forced motion stop before executing S kills the end result of the piece.
Fixing this would make raster laser engraving incredibly easy in Mach4 with the use Inkscape plugin 'Raster 2 Laser GCode' which produces great results with simpler GCode senders. It would achieve the equivalent of Art's Impact / Laser plugin for Mach3.
There is a parameter option that changes the behavior of the look ahead. Normally, you WANT to wait on the motion to complete before the M, S, or T codes are processed by the look ahead.
Set #3003 = 2. That will disable MST waits. But you must consider the look ahead! If it is set to say 100, then up to 100 lines are read (and processed!) at one time. In effect, the S command would be the last S command. The only thing you can do to combat that is set the look ahead to 2 lines. That way CV will be maintained across the G code moves and not come to a complete stop. Setting the look ahead to 1 line would be the equivalent of running in exact stop mode, BTW.
You would be wise to set #3003 back to 0 before any stop M code is issued (M01 M02, M30, etc...)
I really don't recommend the above at all. Instead, Have a look at M62 and M63 (The motion controller must support these). They control outputs synchronized to the movement of the G code. M62 and M63 are special M codes that do not break the CV chain. So you can leave the look ahead alone. You could easily implement 0%, 25%, 50%, 75%, and %100 with a few outputs.
We are still working on a dedicated laser interpreter. It will have options specifically for lasers that should accommodate this type of thing.
Steve