I cannot help with the programming... But this is pretty cool. I am going to need something similar. (I figured I would be doing mostly in CL) We have a 16 speed gear box that is binary (4 solenoids). 0000- first gear 0001 - second gear.... 1111 high gear. it has 1 pressure sensor that at the end of the shift rails that detects when the shift is done. (used to have a 2 speed hydraulic spindle - now it has a vfd.
http://www.electronicsam.com/images/KandT/conversion/shiftlogic.JPG sam ----- Original Message ----- From: "Stuart Stevenson" <[EMAIL PROTECTED]> To: "EMC2-Users-List" <Emc-users@lists.sourceforge.net> Sent: Wednesday, April 30, 2008 4:40 PM Subject: [Emc-users] gearbox > Gentlemen, > I cannot get this program to run with comp. Would someone look at > it and tell me what I need to do. Is it getting too long to post here? > If it is I can start putting it on my web site. I have seen longer > posts but I am not sure where the line is. > > 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 sol31; > pin out bit sol32; > pin out bit sol33; > pin out bit sol34; > pin out bit sol35; > pin in float minSpeed; > pin in float maxGear1; > pin in float maxGear2; > pin in float maxGear3; > pin in float maxGear4; > 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(_) { > /*gear program*/ > /*read*/ > > /* #include <stdio.h> > #include <stdlib.h> */ > #include "rtapi.h" > #include "rtapi_app.h" > #include "rtapi_string.h" > #include "hal.h" > > #define fperiod (period * 1e-9) > #define spincmd (0+*inst->spincmd) > #define spinspeed (0+*inst->spinspeed) > #define spinon (*inst->spinon) > #define spinslow (0+*inst->spinslow) > > #define SOL31 (*inst->sol31) > #define SOL32 (*inst->sol32) > #define SOL33 (*inst->sol33) > #define SOL34 (*inst->sol34) > #define SOL35 (*inst->sol35) > > #define MINSPEED (0+*inst->minSpeed) > #define GEAR1MAX (0+*inst->maxGear1) > #define GEAR2MAX (0+*inst->maxGear2) > #define GEAR3MAX (0+*inst->maxGear3) > #define GEAR4MAX (0+*inst->maxGear4) > > #define zeromax (0+*inst->zeromax) > #define ls1 (0+*inst->ls1) > #define ls2 (0+*inst->ls2) > #define ls3 (0+*inst->ls3) > #define ls4 (0+*inst->ls4) > #define tram (0+*inst->tram) > > FUNCTION(_) { > int gear, currentGear, tram, currentTram; > float scale, currentScale, spindleEncoder, speedDAC, adaptiveFeed, > transition = 2, programRPM, programFeed; > > //set desired gear and scale needed > if (programRPM > MINSPEED && programRPM < GEAR1MAX) > { > gear = 1; > scale = 15.2; > } > else if (programRPM > GEAR3MAX) > { > gear = 4; > scale = 1; > } > else if (programRPM > GEAR2MAX) > { > gear = 3; > scale = 1.9; > } > else > { > gear = 2; > scale = 8; > } > > //spindle encoder read and current gear set > /* initialize the solenoids to the startup state of the gearbox */ > if (SOL31 == 1 && SOL34 == 1) > { > currentGear = 1; > currentScale = 15.2; > } > else if (SOL31 == 1 && SOL35 == 1) > { > currentGear = 2; > currentScale = 8; > } > else if (SOL32 == 1 && SOL34 == 1) > { > currentGear = 3; > currentScale = 1.9; > } > else > { > currentGear = 4; > currentScale = 1; > } > > // set tram > if (sol33 == 1) > { > currentTram = 1; > currentGear = 5; > } > else > {currentTram = 0; > > //if no shift needed > if (currentGear == gear) > spindleEncoder = programRPM * scale; > //if shift needed > else > { > //set speed to slow down for transition > speedDac = transition * currentScale; > > //turn on gear solinoids once spindle speed is less than transition speed > if (spindleEncoder <= transition * currentScale) > switch (gear) > { > case 1: SOL31=1; > SOL32=0; > SOL34=1; > SOL35=0; > break; > case 2: SOL31=1; > SOL32=0; > SOL34=0; > SOL35=1; > break; > case 3: SOL31=0; > SOL32=1; > SOL34=1; > SOL35=0; > break; > case 4: SOL31=0; > SOL32=1; > SOL34=0; > SOL35=1; > break; > default: fprintf ("error.txt", "ERROR in Gear Switch\n") ; > exit (0); > break; > > if (tram = 1) > SOL33=1; > > } > } > > } > > > 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 > > > -- > No virus found in this incoming message. > Checked by AVG. > Version: 7.5.524 / Virus Database: 269.23.6/1407 - Release Date: 4/30/2008 > 11:35 AM > > ------------------------------------------------------------------------- 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