- Posts: 1850
- Thank you received: 0
Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
8 years 10 months ago #103490
by tecno
Replied by tecno on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
once you resolve lut 5 to a speed = speedrange is more what I am looking for.
Will read up on LUT5, thank´s Rod
Will read up on LUT5, thank´s Rod
Please Log in to join the conversation.
8 years 10 months ago #103492
by rodw
Replied by rodw on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
After a bit of reading myself, maybe LUT5 is not the answer.
A custom written component would make it trivial though.
A custom written component would make it trivial though.
Please Log in to join the conversation.
8 years 10 months ago #103493
by tecno
Replied by tecno on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
OK, for those with the knowledge but for a beginner like me you are talking utopia
Please Log in to join the conversation.
8 years 10 months ago #103494
by rodw
Replied by rodw on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
Try this. Totally untested of course... but it does compile with halcompile.
To install type
then loadrt and addf as per normal Just set your inputs for each gear. Have a look at the pins in halshow first, They should be input-a... input-e
Setting idx is not intuitive as it uses C's ternary operator. Basically, one value decides if it is based at row 0 or row 2 and the next decides if it should read that row or the next one.
Writing Components is LinuxCNC's best kept secret.
Code:
component gearbox "LinuxCNC HAL component for Techno's gearbox";
author "Rod Webster";
pin in bit input_a "input a";
pin in bit input_b "input b";
pin in bit input_c "input c";
pin in bit input_d "input d";
pin in bit input_e "input e";
pin in bit gear_shift "gear shift, true if high";
pin in bit higear "true if in high gear";
pin out float speed "speed in RPM";
function _;
license "GPL";
;;
#include <rtapi_math.h>
FUNCTION(_) {
static double speedarray[4][5] = {
{2500.0, 1500.0, 900.0, 540.0, 325.0},
{1500.0, 900.0, 540.0, 325.0, 195.0},
{1250.0, 750.0, 450.0, 270.0, 160.0},
{ 750.0, 450.0, 270.0, 160.0, 100.0}
};
int idx;
idx = (higear) ? 0:1 + (gear_shift) ? 0:2;
if(input_a)
speed = speedarray[idx][0];
if(input_b)
speed = speedarray[idx][1];
if(input_c)
speed = speedarray[idx][2];
if(input_d)
speed = speedarray[idx][3];
if(input_e)
speed = speedarray[idx][4];
}
To install type
Code:
halcompile --install gearbox.comp
Setting idx is not intuitive as it uses C's ternary operator. Basically, one value decides if it is based at row 0 or row 2 and the next decides if it should read that row or the next one.
Writing Components is LinuxCNC's best kept secret.
Attachment not found
Please Log in to join the conversation.
8 years 10 months ago #103495
by tecno
Replied by tecno on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
WOW
Thanks Rod but I need some clarification to understand.
pin in bit input_a "input a"; Is pin in =hm2_7i76e.0.7i76.0.0.input-10 (net input_a hm2........)
Hi range {2500.0, 1500.0, 900.0, 540.0, 325.0}, = A, B, C, D, E
{1500.0, 900.0, 540.0, 325.0, 195.0}, = A, B, C, D, E
Lo range {1250.0, 750.0, 450.0, 270.0, 160.0}, = A, B, C, D, E
{ 750.0, 450.0, 270.0, 160.0, 100.0} = A, B, C, D, E
loadart and addf = gearbox ??
Thanks Rod but I need some clarification to understand.
pin in bit input_a "input a"; Is pin in =hm2_7i76e.0.7i76.0.0.input-10 (net input_a hm2........)
Hi range {2500.0, 1500.0, 900.0, 540.0, 325.0}, = A, B, C, D, E
{1500.0, 900.0, 540.0, 325.0, 195.0}, = A, B, C, D, E
Lo range {1250.0, 750.0, 450.0, 270.0, 160.0}, = A, B, C, D, E
{ 750.0, 450.0, 270.0, 160.0, 100.0} = A, B, C, D, E
loadart and addf = gearbox ??
Please Log in to join the conversation.
8 years 10 months ago #103496
by rodw
Replied by rodw on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
Bengt,
Once you install the component with halcompile, it is like any other standard LinuxCNC component so yes, it will be something like this
Just be aware that the underscores '_' in pin names become hyphens '-' in HAL which is why I suggest using halshow to see with your own eyes the pin names.
The only other thing to consider is that I made the speed output to be a float. If it needs to be a s32 or a u32 in Hal, we will need to change the type in the C code.
And yes, I made the array the same format as your spreadsheet so you have it correct.
Hopefully, the code will select the right row of values. if the gear-shift pin = 1 (true) then it should select either row 0 or 1 depending on the value of the higear pin. If gear-shift is false, it should select rows 2 or 3. You may need to add a checkbox to your GUI for one of these pins.
Once you install the component with halcompile, it is like any other standard LinuxCNC component so yes, it will be something like this
Code:
loadrt gearbox
addf gearbox servo-thread
net gear-a <= hm2_7i76e.0.7i76.0.0.input-10
net gear-a => gearbox.input-a
Just be aware that the underscores '_' in pin names become hyphens '-' in HAL which is why I suggest using halshow to see with your own eyes the pin names.
The only other thing to consider is that I made the speed output to be a float. If it needs to be a s32 or a u32 in Hal, we will need to change the type in the C code.
And yes, I made the array the same format as your spreadsheet so you have it correct.
Hopefully, the code will select the right row of values. if the gear-shift pin = 1 (true) then it should select either row 0 or 1 depending on the value of the higear pin. If gear-shift is false, it should select rows 2 or 3. You may need to add a checkbox to your GUI for one of these pins.
Please Log in to join the conversation.
8 years 10 months ago #103497
by tecno
Replied by tecno on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
Will try to give this a whirl tomorrow if possible.
Thanks and have a peaceful Christmas.
Thanks and have a peaceful Christmas.
Please Log in to join the conversation.
8 years 10 months ago #103499
by andypugh
It is probably something you could do with a mux. You need 5 input bits so probably mux_generic using “ff32”
You could just connect each sensor to a select bit, set the inputs to 1,2,3 etc and see what output you get for each selector position, then change them.
This doesn’t get as far as what you do with the numbers when you have them, though.
Replied by andypugh on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
rodw wrote: Have a look at lut5 as that gives you 5 bits of input.
It is probably something you could do with a mux. You need 5 input bits so probably mux_generic using “ff32”
You could just connect each sensor to a select bit, set the inputs to 1,2,3 etc and see what output you get for each selector position, then change them.
This doesn’t get as far as what you do with the numbers when you have them, though.
Please Log in to join the conversation.
8 years 10 months ago #103500
by rodw
I did think of a mux but thought I was short a few bits. I had forgotten about mux_generic to get more.
I also thought of adding a separate parameter for each gear ratio rather than a hard coded array. I might have done this if the hi/lo ratios could have been locked down to a simple multiple of the base ratio but that did not appear to be the case.
I think sometimes a custom component is very efficient and results in much easier to maintain and understand hal files. This is a good candidate for it as writing the component probably took no more time than cobbling all the required hal components together.
Prospective LCNC integrators would be well advised to play with an Arduino to gain a smattering of C and maybe do the Google python course as it adds so much more flexibility to your problem solving ability. That's my thoughts anyway.
Replied by rodw on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
andypugh wrote:
rodw wrote: Have a look at lut5 as that gives you 5 bits of input.
It is probably something you could do with a mux. You need 5 input bits so probably mux_generic using “ff32”
I did think of a mux but thought I was short a few bits. I had forgotten about mux_generic to get more.
I also thought of adding a separate parameter for each gear ratio rather than a hard coded array. I might have done this if the hi/lo ratios could have been locked down to a simple multiple of the base ratio but that did not appear to be the case.
I think sometimes a custom component is very efficient and results in much easier to maintain and understand hal files. This is a good candidate for it as writing the component probably took no more time than cobbling all the required hal components together.
Prospective LCNC integrators would be well advised to play with an Arduino to gain a smattering of C and maybe do the Google python course as it adds so much more flexibility to your problem solving ability. That's my thoughts anyway.
Please Log in to join the conversation.
8 years 10 months ago #103524
by tecno
Lo is 50% of Hi or do I misunderstand this?
Replied by tecno on topic Help needed to get my 7i76E + 7i85S + 7i73 on my mill going.
I might have done this if the hi/lo ratios could have been locked down to a simple multiple of the base ratio but that did not appear to be the case.
Lo is 50% of Hi or do I misunderstand this?
Please Log in to join the conversation.
Time to create page: 0.302 seconds
