From: Dave H. <dhy...@gm...> - 2006-11-08 08:06:47
|
Hi Rodrigo, > The PID loops algorithm im using make use of information of the past up to 2 > steps backwards (in the actual calculation, it uses info_n, info_n-1 and > info_n-2 where n is the actual step and info may be the error for example ) > As i may be using about 8 PID loops i was trying to think how to code in an > efficient manner. My first idea was to define a struct called PID and there > store values from the different steps, parameters (Kp: poportional gains, > Ti/Td :Integration time/derivation time, etc), and the actual output of the > PID loop, in one word, everything. > Then use functions like PIDinitialize, that would read data from a txt file > (that way i dont need to recompile if PID parameters are going to change > during PID tuning) > and other function like PIDupdate, that performs the next step in the > calculations. > > I would like more the idea of a java class, like storing the parameters and > previous steps data and perform the next steps calling the function for that > member (hope i explain well here) So, I haven't played with PID yet, but I'm familiar with the data structure stuff. In java or C++ you create a class and the class has members. In C you create a structure and pass pointers to the structure around. An instance of the structure is just like an instance of the class. typedef struct { int Kp; int Kd; .... } PID; Then you declare some function (i.e. methods) that operate on the structure: void PID_Initialize( PID *pid ); void PID_Update( PID *pid, int someParam ); In C++ you'd probably do something like: PID myPid; myPid.Initialize(); In C you do: PID myPid; PID_Initialize( &myPid ); -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |