I think I must have figured it out from the manuals, but its been a few years
The problem is, if you have already sent some vector and speed commands into the buffer, then you cannot arbitrarily change the feedrate, because its already in execution.
You need to have a button hooked to one of the Galil inputs, to serve as your feedhold. Each of the Galil inputs has an "interrupt number" which the card monitors. I think there was a special label name given to use for a subroutine name which the galil recognises especially for this purpose.
A small program is written in the subroutine, and it begins execution as soon as the interrupt is detected. This all has to be written in, of course. So then you write some logic in there to save the bits (OP command) and stop the motors.
Here is a piece of code that I used on my lathe. It includes a limit switch contingency which aborts any running program if a limit switch is triggered. Study it for what it's worth, and go compare with what you read in the manual.
This is the tail end of a much longer program I use to do lathe threading with a program running in galil memory. I permit the feedhold to come into effect only after the current threading motion (if underway) has completed, as it would be bad news to stop a lathe in mid-thread I also have pushbuttons to the galil input which permit me to stop the spindle, start in reverse, and start in forward. I just add that info so you can deduce a bit of what is happening and why it is in the code.
#LIMSWI
CB 1
CB 2
CB 3
CB 4
CB 5
CB 6
CB 7
HX1
AB
#ININT
JP#ALLDONE,((@IN[1]=0)|(@IN[1]=1))&(@IN[6]=1)
JP#ALLDONE,((@IN[2]=0)|(@IN[2]=1))&(@IN[6]=1)
JP#ALLDONE,((@IN[4]=0)|(@IN[4]=1))&(@IN[6]=1)
SAVBITS=_OP0
AM XY
ST XY
XQ#BUTTONS,1
#AGAIN
IF (@IN[1]=0)
FORWFLG=(FORWFLG+1)
ENDIF
IF (@IN[2]=0)
STOPFLG=(STOPFLG+1)
ENDIF
IF (@IN[4]=0)
REVFLG=(REVFLG+1)
ENDIF
IF (@IN[6]=0)
JP#AGAIN
ENDIF
IF RESTART>0
OP SAVBITS
ENDIF
RESTART=0
FORWFLG=0
STOPFLG=0
REVFLG=0
HX1
#ALLDONE
RI1
EN
#BUTTONS
IF STOPFLG>0
JP#STOPSPN
ENDIF
IF FORWFLG>0
JP#SPINFOR
ENDIF
IF REVFLG>0
JP#SPINREV
ENDIF
JP#BUTTONS
#SPINFOR
IF RESTART=0
FORWFLG=0
JP#BUTTONS
ENDIF
CB6
SB5
FORWFLG=0
STOPFLG=0
REVFLG=0
JP#BUTTONS
#STOPSPN
CB 5
CB 6
RESTART=1
FORWFLG=0
STOPFLG=0
REVFLG=0
JP#BUTTONS
#SPINREV
IF RESTART=0
REVFLG=0
JP#BUTTONS
ENDIF
CB5
SB6
FORWFLG=0
STOPFLG=0
REVFLG=0
JP#BUTTONS
EN
First you get good, then you get fast. Then grouchiness sets in.
(Note: The opinions expressed in this post are my own and are not necessarily those of CNCzone and its management)