- Posts: 99
- Thank you received: 0
Cause button to change integer
- echristley
- Topic Author
- Offline
- Premium Member
-
Less
More
3 years 2 months ago #278487
by echristley
Cause button to change integer was created by echristley
I've been searching the forum for an hour, but can find a methodology to get this to work.
Gmoccapy has three buttons to control the spindle. Best I can tell is that their outputs are:
halui.spindle.0.forward which latches halui.spindle.0.runs_forward and halui.spindle.0.is-on
halui.spindle.0.reverse which latches halui.spindle.0.runs_backward and halui.spindle.0.is-on
and. . . I didn't write down the identifier for the stop, but it's there.
Unable to get LinuxCNC to load with vfdmod, I'm using mb2hal to control the spindle. And I have verified it is working with halshow. I set the value of mb2hal.spindle_set.target_state to an integer. 1: forward, 2:reverse, 5:stop
The divide I can't find a way over is how do I coerce these boolean buttons to set the proper value in a u32 pin?
PS. The next part sounds like it should be simple. The spindle speed is mainly controlled mechanically by a Reeve's drive. But, I set the VFD to a minimum frequency of 30Hz, and a max of 90 (60 being nominal for the motor). The halui component for override outputs a float between zero and 1. All I have to do there is set a multiplier of 10,000 on the mb2hal pin. The VFD will scale the output between 30 ( 0 or 0%), and 90 (10,000 or 100%). That statement is:
halui.spindle.0.override.value => mb2hal.spindle_speed.target_speed
Gmoccapy has three buttons to control the spindle. Best I can tell is that their outputs are:
halui.spindle.0.forward which latches halui.spindle.0.runs_forward and halui.spindle.0.is-on
halui.spindle.0.reverse which latches halui.spindle.0.runs_backward and halui.spindle.0.is-on
and. . . I didn't write down the identifier for the stop, but it's there.
Unable to get LinuxCNC to load with vfdmod, I'm using mb2hal to control the spindle. And I have verified it is working with halshow. I set the value of mb2hal.spindle_set.target_state to an integer. 1: forward, 2:reverse, 5:stop
The divide I can't find a way over is how do I coerce these boolean buttons to set the proper value in a u32 pin?
PS. The next part sounds like it should be simple. The spindle speed is mainly controlled mechanically by a Reeve's drive. But, I set the VFD to a minimum frequency of 30Hz, and a max of 90 (60 being nominal for the motor). The halui component for override outputs a float between zero and 1. All I have to do there is set a multiplier of 10,000 on the mb2hal pin. The VFD will scale the output between 30 ( 0 or 0%), and 90 (10,000 or 100%). That statement is:
halui.spindle.0.override.value => mb2hal.spindle_speed.target_speed
Please Log in to join the conversation.
- echristley
- Topic Author
- Offline
- Premium Member
-
Less
More
- Posts: 99
- Thank you received: 0
3 years 2 months ago #278489
by echristley
Replied by echristley on topic Cause button to change integer
I think I'm on the right track. Should I be using a mux4 component?
loadusr -W mux4 spindle
setp mux4.spindle.in0 <= 1 ; forward
setp mux4.spindle.in1 <= 2 ; reverse
setp mux4.sjpindle.in2 <= 5 ; stop
setp mux4.spindle.in3 <= 7 ; fault reset
mux4.spindle.out => mb2hal.spindle_set.target_state
Is that right? And then I just have to figure a way to get those three UI buttons so that they feed the two mux inputs:
??? => mux4.spindle.sel0
??? => mux4.spindle.sel1
loadusr -W mux4 spindle
setp mux4.spindle.in0 <= 1 ; forward
setp mux4.spindle.in1 <= 2 ; reverse
setp mux4.sjpindle.in2 <= 5 ; stop
setp mux4.spindle.in3 <= 7 ; fault reset
mux4.spindle.out => mb2hal.spindle_set.target_state
Is that right? And then I just have to figure a way to get those three UI buttons so that they feed the two mux inputs:
??? => mux4.spindle.sel0
??? => mux4.spindle.sel1
Please Log in to join the conversation.
3 years 2 months ago #278507
by JPL
Replied by JPL on topic Cause button to change integer
Since the selection (sel) is binary based it is easier to use one sel input for each 'case'. You have 4: fwd, rev, stop and reset. You should then use mux16 instead in a similar way as below
This is to set the scale for a MPG but will work for you by replacing the scale value (in) with the float you want, as you did. Then each select line need to be 'connected' to a button instead of the input above. (This example is with mux8 but is the same way for mux16).
loadrt mux8 count=1
addf mux8.0 servo-thread
setp mux8.0.in0 0.001
setp mux8.0.in1 0.01
setp mux8.0.in2 0.1
setp mux8.0.in4 1.0
net scaleX10 mux8.0.sel0 <= hm2_7i92.0.7i77.0.0.input-25
net scaleX100 mux8.0.sel1 <= hm2_7i92.0.7i77.0.0.input-26
net scaleX1000 mux8.0.sel2 <= hm2_7i92.0.7i77.0.0.input-27
net mpg-scale <= mux8.0.out
This is to set the scale for a MPG but will work for you by replacing the scale value (in) with the float you want, as you did. Then each select line need to be 'connected' to a button instead of the input above. (This example is with mux8 but is the same way for mux16).
Please Log in to join the conversation.
3 years 2 months ago #278508
by JPL
Replied by JPL on topic Cause button to change integer
One more thing...
You need to create a net to connect 2 pins. Pin to pin connection are NOT allowed.
This is wrong: mux4.spindle.out => mb2hal.spindle_set.target_state
You should do:
net my-target-state <= mux4.spindle.out
net my-target-state => mb2hal.spindle_set.target_state
Or the single line version:
net my-target-state mux4.spindle.out => mb2hal.spindle_set.target_state
('my-target-state' could be any name you wish for the net)
You need to create a net to connect 2 pins. Pin to pin connection are NOT allowed.
This is wrong: mux4.spindle.out => mb2hal.spindle_set.target_state
You should do:
net my-target-state <= mux4.spindle.out
net my-target-state => mb2hal.spindle_set.target_state
Or the single line version:
net my-target-state mux4.spindle.out => mb2hal.spindle_set.target_state
('my-target-state' could be any name you wish for the net)
Please Log in to join the conversation.
- echristley
- Topic Author
- Offline
- Premium Member
-
Less
More
- Posts: 99
- Thank you received: 0
3 years 2 months ago #278510
by echristley
Replied by echristley on topic Cause button to change integer
I think I've figure out that I can do this with a mux4, because the STOP state is simply when both FORWARD and REVERSE are both false.
I've tried it out, and this is tracked by halui.spindle.0.runs-forward and runs-backwards. Using both the UI buttons and the mechanical switch I have connected, these two are mutually exclusive.
forward is wired to sel1
backwards is wired to sel0
So, sel0=0 and sel1=0 then it is stopped, so I wire that to send 5.
sel0=0 and sel1=1, it is running forward, and that is wired to send 1
sel0=1 and sel1=0, it is running in reverse, and that is wired to send 2
I don't yet know a way to set both to 1, but I have the output of the mux prepared to send 7 when I do.
I've tried it out, and this is tracked by halui.spindle.0.runs-forward and runs-backwards. Using both the UI buttons and the mechanical switch I have connected, these two are mutually exclusive.
forward is wired to sel1
backwards is wired to sel0
So, sel0=0 and sel1=0 then it is stopped, so I wire that to send 5.
sel0=0 and sel1=1, it is running forward, and that is wired to send 1
sel0=1 and sel1=0, it is running in reverse, and that is wired to send 2
I don't yet know a way to set both to 1, but I have the output of the mux prepared to send 7 when I do.
Please Log in to join the conversation.
3 years 2 months ago #278519
by JPL
Nope, not gonna work... Here is why:
Forward is the command, it will set runs-forward and is-on as you wrote BUT on the rising edge. Once done it is latched and the spindle will continue running until a stop command is sent.
You can see that by watching the state of forward runs-forward and is-on pins. You will also see that both forward and reverse can be false and the spindle still running.
Yes, this could work ... But you have to use the runs-forward and runs-backward status pins instead if the forward, reverse 'control' pins.
Replied by JPL on topic Cause button to change integer
I think I've figure out that I can do this with a mux4, because the STOP state is simply when both FORWARD and REVERSE are both false.
Forward is the command, it will set runs-forward and is-on as you wrote BUT on the rising edge. Once done it is latched and the spindle will continue running until a stop command is sent.
You can see that by watching the state of forward runs-forward and is-on pins. You will also see that both forward and reverse can be false and the spindle still running.
Yes, this could work ... But you have to use the runs-forward and runs-backward status pins instead if the forward, reverse 'control' pins.
Please Log in to join the conversation.
- echristley
- Topic Author
- Offline
- Premium Member
-
Less
More
- Posts: 99
- Thank you received: 0
3 years 2 months ago #278568
by echristley
Replied by echristley on topic Cause button to change integer
It works. Here is the code I used:
loadusr -W mb2hal config=mb2vfd.ini
loadrt mux4 count=1
addf mux4.0 servo-thread
#stop
setp mux4.0.in0 5
#forward
setp mux4.0.in1 1
#reverse
setp mux4.0.in2 2
#fault reset
setp mux4.0.in3 7
net spindle_forward_button halui.spindle.0.runs-forward => mux4.0.sel0
net spindle_rev_button halui.spindle.0.runs-backward => mux4.0.sel1
net spindle_commanded_state mux4.0.out => mb2hal.spindle_set.target_state
loadusr -W mb2hal config=mb2vfd.ini
loadrt mux4 count=1
addf mux4.0 servo-thread
#stop
setp mux4.0.in0 5
#forward
setp mux4.0.in1 1
#reverse
setp mux4.0.in2 2
#fault reset
setp mux4.0.in3 7
net spindle_forward_button halui.spindle.0.runs-forward => mux4.0.sel0
net spindle_rev_button halui.spindle.0.runs-backward => mux4.0.sel1
net spindle_commanded_state mux4.0.out => mb2hal.spindle_set.target_state
Please Log in to join the conversation.
Time to create page: 0.097 seconds
