Problem with toggle2nist component
08 Nov 2020 18:18 #188678
by mwinterm
Problem with toogle2nist component was created by mwinterm
Hello,
I'm trying to implement a physical button to start/stop the spindle. To do so I try to use the toggle2nist component the following way:
This does not work as supposed. The spindle is stopping as long as I keep the button pressed and starting again as soon as I release it. The following workaround where I delay the spindle-enable signal is providing the desired result.
However I don't understand why this hack is needed. Could it be connected to the sequence the HAL execution?
Further, what would be the right way to initialize a toggle or toggle2nist component to be in a specific state on start-up?
Regards,
Marc
PS: spindle-enable has the following connections:
I'm trying to implement a physical button to start/stop the spindle. To do so I try to use the toggle2nist component the following way:
# --- SPINDLE-BUTTON ---
net spindle-button toggle2nist.0.in <= hm2_7i76e.0.7i76.0.0.input-25
net spindle-enable => toggle2nist.0.is-on
net spindle-manual-start toggle2nist.0.on
net spindle-manual-stop toggle2nist.0.off
This does not work as supposed. The spindle is stopping as long as I keep the button pressed and starting again as soon as I release it. The following workaround where I delay the spindle-enable signal is providing the desired result.
# --- SPINDLE-BUTTON ---
net spindle-button toggle2nist.0.in <= hm2_7i76e.0.7i76.0.0.input-25
net spindle-enable => timedelay.0.in
net spindle-enable-delayed toggle2nist.0.is-on <= timedelay.0.out
net spindle-manual-start toggle2nist.0.on
net spindle-manual-stop toggle2nist.0.off
However I don't understand why this hack is needed. Could it be connected to the sequence the HAL execution?
Further, what would be the right way to initialize a toggle or toggle2nist component to be in a specific state on start-up?
Regards,
Marc
PS: spindle-enable has the following connections:
net spindle-enable => pid.s.enable
net spindle-enable => hm2_7i76e.0.7i76.0.0.spinena
net spindle-enable <= spindle.0.on
Please Log in or Create an account to join the conversation.
08 Nov 2020 18:33 #188679
by cmorley
Replied by cmorley on topic Problem with toogle2nist component
What does spindle-manual-start/spindle-manual-stop connect to.
also what is the addf sequence for the components.
addf sets the sequence that components are evaluated and it can mean a component id evaluating old data.
also what is the addf sequence for the components.
addf sets the sequence that components are evaluated and it can mean a component id evaluating old data.
Please Log in or Create an account to join the conversation.
08 Nov 2020 19:11 #188683
by mwinterm
and here the addf-statements:
Replied by mwinterm on topic Problem with toogle2nist component
net spindle-manual-stop halui.spindle.0.stop
net spindle-manual-start halui.spindle.0.start
and here the addf-statements:
addf hm2_7i76e.0.read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.x.do-pid-calcs servo-thread
addf pid.y.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
addf pid.s.do-pid-calcs servo-thread
addf ratio_select servo-thread
addf scale.gear servo-thread
addf hm2_7i76e.0.write servo-thread
setp hm2_7i76e.0.dpll.01.timer-us -50
setp hm2_7i76e.0.stepgen.timer-number 1
addf and2.0 servo-thread
addf and2.1 servo-thread
addf spindle-scale servo-thread
addf conv-float-s32.0 servo-thread
addf feed-scale servo-thread
addf conv-float-s32.1 servo-thread
addf rapid-scale servo-thread
addf conv-float-s32.2 servo-thread
addf toggle.0 servo-thread
addf toggle2nist.0 servo-thread
addf timedelay.0 servo-thread
Please Log in or Create an account to join the conversation.
08 Nov 2020 22:53 #188706
by cmorley
Replied by cmorley on topic Problem with toogle2nist component
My guess is the servo thread updates faster then the HALUI component does.
HALUI is userspace so it's update is a little unpredictable but should be about 100ms IIRC.
Please describe completely what you are trying to do and maybe we can find a different way or just live with the time delay - it works !
Chris
HALUI is userspace so it's update is a little unpredictable but should be about 100ms IIRC.
Please describe completely what you are trying to do and maybe we can find a different way or just live with the time delay - it works !
Chris
Please Log in or Create an account to join the conversation.
11 Nov 2020 15:17 #189008
by mwinterm
Replied by mwinterm on topic Problem with toggle2nist component
Hello Chris,
this makes sense to me and knowing what the problem is I think I can live with my workaround for the moment.
However I'm facing another problem with toggle2nist: When I'm starting LinuxCNC toggle2nist immediately tries to do a switch-action (not sure if it is from on to off or other way around). As at start-up E-stop is still active this causes rightfully an error.
Here is the code from toggle2nist from that I found on GitHub:I'm pretty new to linuxcnc and have no experience in HAL component programming so far. However based on my general understanding of programming I think there could be a problem withnot being initialized on start-up and therefore having an arbitrary value most likely not being 0 or 1. With that when run the first time in the servo-thread it meets the first if-condition and therefore causes an immediate switch-action.
If my assumptions are correct a solution could be to add an additional initialization parameter that defines old_in when the HAL file is executed.
Does this make any sense?
Regards,
Marc
this makes sense to me and knowing what the problem is I think I can live with my workaround for the moment.
However I'm facing another problem with toggle2nist: When I'm starting LinuxCNC toggle2nist immediately tries to do a switch-action (not sure if it is from on to off or other way around). As at start-up E-stop is still active this causes rightfully an error.
Here is the code from toggle2nist from that I found on GitHub:
component toggle2nist "toggle button to nist logic";
description
"""
toggle2nist can be used with a momentary push button connected to a
toggle component to control a device that has separate on and off inputs
and has an is-on output.
If in changes states via the toggle output
If is-on is true then on is false and off is true.
If is-on is false the on true and off is false.
""";
pin in bit in;
pin in bit is_on;
pin out bit on;
pin out bit off;
variable int old_in;
variable int to_state=0;
function _ nofp;
license "GPL";
;;
FUNCTION(_) {
if (in!=old_in) /* a toggle has occurred */ {
if (is_on) { /* turn OFF if it's on */
on=0;
off=1;
to_state=0;
}
else if (!is_on) { /* turn ON if it's off */
on=1;
off=0;
to_state=1;
}
}
else {
/* reset pins when we see the desired state */
if (to_state==is_on) {
on=0;
off=0;
}
}
old_in=in;
}
variable int old_in;
If my assumptions are correct a solution could be to add an additional initialization parameter that defines old_in when the HAL file is executed.
Does this make any sense?
Regards,
Marc
Please Log in or Create an account to join the conversation.
13 Nov 2020 22:57 #189267
by mwinterm
Replied by mwinterm on topic Problem with toggle2nist component
...no one with any feedback on this?
Regards,
Marc
Regards,
Marc
Please Log in or Create an account to join the conversation.
- tommylight
- Away
- Moderator
Less
More
- Posts: 19209
- Thank you received: 6438
13 Nov 2020 23:13 #189269
by tommylight
Replied by tommylight on topic Problem with toggle2nist component
You can do some quick tests to check if it "misses", just load it in a sim config and check the sates with halshow or halscope or "show hal configuration" from the machine menu.
Please Log in or Create an account to join the conversation.
22 Nov 2020 03:51 #190021
by Benb
Replied by Benb on topic Problem with toogle2nist component
Attached is a cartoon showing similar hal file to toggle2nist with couple of interlocks to prevent signal racing. I have not tested this configuration, but its start.
Please Log in or Create an account to join the conversation.
22 Nov 2020 05:07 #190023
by cmorley
Replied by cmorley on topic Problem with toggle2nist component
you could compile a new component and try your fix to see if it helps.
linuxcnc.org/docs/devel/html/hal/comp.ht...side_the_source_tree
linuxcnc.org/docs/devel/html/hal/comp.ht...side_the_source_tree
Please Log in or Create an account to join the conversation.
26 Nov 2020 20:46 #190367
by mwinterm
Replied by mwinterm on topic Problem with toggle2nist component
@cmorley: Thanks for the link, that is exactly what I'm currently looking into (once I find a little more time again...)
@Benb: that is also very nice work, even though I try to keep the logical programming in the HAL file to a minimum (I'm more a higher level language coder... . However you have made a very nice schemata. Do you have a tool to create this directly from the *.hal file?
Best regards,
Marc
@Benb: that is also very nice work, even though I try to keep the logical programming in the HAL file to a minimum (I'm more a higher level language coder... . However you have made a very nice schemata. Do you have a tool to create this directly from the *.hal file?
Best regards,
Marc
Please Log in or Create an account to join the conversation.
Time to create page: 0.224 seconds