toggle2nist hangs when pressing an other button at the same time

More
1 year 1 month ago #335504 by juergen-home
I have this gamepad.hal as an example for my problem.
This is used with the button of a gamepad.I start a program by a button, then I can pause/resume it by another button.The third button is to stop the program.
The problem I have: If the program is started and I press pause/resume and stop at the same time, sometimes the toggle2nist_on get stucked in on state and the pause/resume will not work until I quit linuxcnc and start again. Is this a known behavior, or is something wrong in my gamepad.hal

Code:
# test for linuxcnc 2.9 2025-09-28 work # generic china Gamepad loadusr -W hal_input -KRAL USB Gamepad #--------------------- # Program Stop #--------------------- #halui.program.stop (bit, in) - pin for stopping a program net button13  input.0.btn-base5 => halui.program.stop #--------------------- #--------------------- # Program Start #--------------------- net button16  input.0.btn-base4 => halui.program.run #--------------------- #--------------------- # Program Pause on/ Pause off #--------------------- # known bugs: if you stop  while in pause, than swich on and start program again, pause will not work. # sometimes tog2nist_1.on stays on ! loadrt toggle names=tog_1 addf tog_1 servo-thread 1 loadrt toggle2nist names=tog2nist_1 addf tog2nist_1 servo-thread 2 net net-button-pause-trigger input.0.btn-base6 => tog_1.in  # this is the pause button net net-button-pause tog2nist_1.in <= tog_1.out net net-pause-is-on tog2nist_1.is-on <= halui.program.is-paused net net-pause-off tog2nist_1.off => halui.program.resume net net-pause-on tog2nist_1.on => halui.program.pause #---------------------

Attachment not found

Please Log in to join the conversation.

More
1 year 1 month ago #335505 by Aciera
'toggle2nist.comp' up to and including 2.9.x has issues:
github.com/LinuxCNC/linuxcnc/pull/3193

A new version is available in master:
github.com/LinuxCNC/linuxcnc/blob/0bc97e...nts/toggle2nist.comp

which you could install into your version by downloading the new version and using
(sudo) halcompile --install toggle2nist.comp

Note that 'halcompile' requires the 'linuxcnc-dev' package to be installed

Also note that people used to work around some of the problematic 'toggle2nist' behavior by adding hal components between the momentary switch and 'toggle2nist.in'. Looking at your .in pin signal in the halscope sreenshot makes me think that you might have done that. If you use the new version make sure to directly connect the momentary switch to the .in pin.

Please Log in to join the conversation.

More
1 year 1 month ago #335512 by andypugh
Another possibility is that pressing two buttons means that the button-release event is not seen. So check the output pin from hal_input too.

Please Log in to join the conversation.

More
1 year 1 month ago #335516 by juergen-home
The Problem is the same as before.

@Aciera
So I did halcompile --install toggle2nist.comp.
I see a new pin toggle2nist_1.debounce so the update should be OK.
I also put the pause/resume signal direct to the toggle2nist without the toggle in front.

@andypugh
I dont understand "output pin from hal_input" my input pins from the gamepad are input.0.btn-base6 ...

Please Log in to join the conversation.

More
1 year 3 weeks ago #335860 by juergen-home
To illustrate my issue with toggle2nist a bit more I have made a simple hal file.
The hal file makes no other sens as to show problem easily for testing yourself. 


1. If I comment in 
net net-mist-off  => halui.program.stop
Linux runs as I expect. I can toggle the nist2 in halshow with set and clear.
If mist is switched off, a running program stops. I can start again and so on.

1. If I comment in 
net net-mist-on  => halui.program.stop
I can toggle the nist2 in halshow with set and clear only once.
If mist is switched on, a running program stops and the tog2nist.on LED is yellow all the time.

Is this working as expected?
Code:
# with this 2 lines each coolant shows a checkbox in the axis ui # this is normaly part of the machine.hal / here only for test in the SIM-HAL-AXIS #net coolant-mist      <=  iocontrol.0.coolant-mist #net coolant-flood     <=  iocontrol.0.coolant-flood #  start and stop the coolant. loadrt toggle2nist names=tog2nist0 addf tog2nist0 servo-thread net net-mist.is-on tog2nist0.is-on <= halui.mist.is-on net net-mist-off tog2nist0.off  => halui.mist.off net net-mist-on tog2nist0.on  => halui.mist.on #net net-mist-off  => halui.program.stop #net net-mist-on  => halui.program.stop

 

Attachment not found

Please Log in to join the conversation.

More
1 year 3 weeks ago #335873 by Aciera
The problem is that stopping a program will also switch off coolants (mist and flood). This is inbuilt behavior so by connecting 'halui.program.stop' in your hal example you are clearing 'tog2nist0.is-on' which upsets the logic.

When 'tog2nist0.in' goes true and 'tog2nist0.is-on' is false it sets 'tog2nist0.on' to true until 'tog2nist0.is-on' goes true. It then sets 'tog2nist0.on' to false. (So it basically produces a pulse on 'tog2nist0.on').
See the logic diagram in the manpage:
github.com/LinuxCNC/linuxcnc/blob/0bc97e...nts/toggle2nist.comp
In your case:
When 'tog2nist0.in' goes true it sets 'tog2nist0.on' to true which causes a program stop which forces 'tog2nist0.is-on' FALSE so the component waits forever with 'tog2nist0.on' True.

One way around this would be to change the component to have a maximum waiting time for 'tog2nist0.is-on' to change state.

[edit]
Attached is a modified component. 
As an example set '.pulse_length' to 1000. Mind you it will only fix the lockup state not the flawed logic behind the hal construct. 

Attachment not found


 

Please Log in to join the conversation.

More
1 year 3 weeks ago #335875 by Aciera
To toggle program run/stop you would need to use :
Code:
loadrt toggle2nist names=tog2nist0 addf tog2nist0 servo-thread net net-mist.is-on tog2nist0.is-on <= halui.program.is-running net net-mist-off tog2nist0.off => halui.program.stop net net-mist-on tog2nist0.on => halui.program.run

Please Log in to join the conversation.

More
1 year 3 weeks ago #335929 by juergen-home
Many thanks.
I compiled in your magic code in. With a puls-lenght of 50 my problems seem to be gone. This should become the standard toggle2nist.
Many thanks!

Please Log in to join the conversation.

Time to create page: 0.512 seconds
Powered by Kunena Forum