Gentlemen, This is my gear shifting component. It probably is not the best and may not be completely functional. I will test it on my machine this week. It is somewhat functional on a sim machine. I have included it here as it is not too loooong. It comps successfully and the pins show up in EMC. This is a huge success for me so far. Having some fun now.
component gear4 "Select gear range from requested spindle speed"; /* This component if for a 4 speed gearbox with a separate tram shifter. * This has 5 solenoids to shift the gears and 5 limit switches to indicate the gearbox state. * It will sense the spindle speed near zero from the encoder feedback and inhibit the * tram shifting until the spindle is slow enough. * It will drive the spindle very slow to allow gear mesh. */ pin in float spincmd "spindle command from EMC"; pin in float spinspeed "spindle speed from encoder"; pin out float spinon "spindle speed command to VFD"; pin in float spinslow "gear mesh speed"; pin out bit sol1; pin out bit sol2; pin out bit sol3; pin out bit sol4; pin out bit sol5; pin in float min0; pin in float max0; pin in float max1; pin in float max2; pin in float max3; pin in float zeromax "max spindle speed to be considered zero for tram"; pin in bit ls1; pin in bit ls2; pin in bit ls3; pin in bit ls4; pin in bit tram; variable int skippy; variable int range; variable int shifting; function _; license "GPL"; ;; FUNCTION(_) { double spin = spincmd; double zero = spinspeed; /* initialize the solenoids to the startup state of the gearbox */ if (!skippy) { sol1 = ls1; sol2 = ls2; sol3 = ls3; sol4 = ls4; sol5 = tram; skippy = 1; } /* do we shift and if so which gear */ if((min0 < spin) && (spin < max3) && (!tram)) if ((spin < max0) && (spin < max0) && (range != 1)) { sol1 = true; sol2 = false; sol3 = true; sol4 = false; sol5 = false; range = 1; spin = spinslow; shifting = 1; } else if ((spin < max1) && (range != 2)) { sol1 = true; sol2 = false; sol3 = false; sol4 = true; sol5 = false; range = 2; spin = spinslow; shifting = 1; } else if ((spin < max2) && (range != 3)) { sol1 = false; sol2 = true; sol3 = true; sol4 = false; sol5 = false; range = 3; spin = spinslow; shifting = 1; } else if ((spin < max3) && (range != 4)) { sol1 = false; sol2 = true; sol3 = false; sol4 = true; sol5 = false; range = 4; spin = spinslow; shifting = 1; } else { sol1 = false; sol2 = false; sol3 = false; sol4 = false; sol5 = true; } else if ((tram) && (zero < zeromax)) { sol5 = true; } /* if we are shifting - wait until shifting is complete */ if (shifting) { if ((range =1) && (sol1) && (!sol2) && (sol3) && (!sol4) && (!sol5)) { shifting = 0; spin = spincmd; } else if ((range =2) && (sol1) && (!sol2) && (!sol3) && (sol4) && (!sol5)) { shifting = 0; spin = spincmd; } else if ((range =3) && (!sol1) && (sol2) && (sol3) && (!sol4) && (!sol5)) { shifting = 0; spin = spincmd; } else if ((range =4) && (!sol1) && (sol2) && (!sol3) && (sol4) && (!sol5)) { shifting = 0; spin = spincmd; } } } all questions critiques comments welcome be kind :) how do I view the documentation created from this? thanks Stuart ------------------------------------------------------------------------- This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone _______________________________________________ Emc-users mailing list Emc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/emc-users