Subroutine to wait for input using M66

More
15 years 1 month ago #12923 by automata
I had this problem to wait for an input before executing the next line of gcode. like a punching machine / drilling mahcine.

This is a subroutine to to do that.
Code:
O<wait_for_input_fall> sub M66 P0 L2 Q1 O<loop> while [#5399 EQ -1] M66 P0 L2 Q1 O<loop> endwhile O<wait_for_input_fall> endsub

Put this subrouting at the start of your Gcode file and call it as:
Code:
O<wait_for_input_fall> call

This will wait for input 0 to go low and keep re-checking the input at every 1s.

The changes made to the HAL file are to link motion.digital-in-00 to the input pin. In my case I am using the MESA 7i43 card and I want a time delay after the input is received..

HAL File....
Code:
#use halui to configure estop... and machine on # net estop-in <= hm2_7i43.0.gpio.047.in_not net estop-in => iocontrol.0.emc-enable-in #load a time delay... loadrt timedelay count=2 #add the time delay function to the servo-thread addf timedelay.0 servo-thread #set the on-delays and offselays in seconds setp timedelay.0.on-delay 0.25 setp timedelay.0.off-delay 0.0 net estop-in => timedelay.0.in net machineon <= timedelay.0.out net machineon => halui.machine.on # start the program... # and step-program-input with mode auto loadrt and2 count=2 loadrt edge count=1 addf and2.0 servo-thread addf and2.1 servo-thread addf timedelay.1 servo-thread setp timedelay.1.on-delay 0.4 setp timedelay.1.off-delay 0.0 #connect andgate to step program edge net step-program-input hm2_7i43.0.gpio.046.in => and2.0.in0 #and the input with machine on signal net machineon => and2.0.in1 net step-and-machine and2.0.out => and2.1.in0 net modeauto halui.mode.is-auto => and2.1.in1 net step-program and2.1.out => timedelay.1.in net progstep timedelay.1.out => motion.digital-in-00

PLEASE USE ABOVE AT YOUR OWN DISCRETION and after understanding what it does... This is what works for me. Ofcourse I will also be changing this to make it better and am very open to suggestion to that same effect.

Regards,

automata

Please Log in to join the conversation.

More
15 years 1 month ago #12939 by andypugh
automata wrote:

I had this problem to wait for an input before executing the next line of gcode. like a punching machine / drilling mahcine.

This is a subroutine to to do that.

Code:
O<wait_for_input_fall> sub M66 P0 L2 Q1 O<loop> while [#5399 EQ -1] M66 P0 L2 Q1 O<loop> endwhile O<wait_for_input_fall> endsub


I am a bit confused. Are you saying that M66 P0 L2 doesn't work properly?
M66 L2 is meant to wait P seconds for a falling edge on input Q. There shouldn't be any need for the rest of the subroutine.

Please Log in to join the conversation.

More
15 years 1 month ago #12946 by automata
Hi Andy,

I am not saying the M66 does not work. Infact it works perfectly.

The routine is to wait indefinitely for an input or stop / abort being pressed.

Although this routine keeps writing to the disk at 1s intervals (to the .var file). So it is a problem if you want to minimize disk writes (if you are using SSD's or Flash based devices with finite write cycles and hve not implemented read-only root file systems).

regards,

automata

Please Log in to join the conversation.

Time to create page: 0.069 seconds
Powered by Kunena Forum