PID controller: converted to general block; fixed initialization
This commit is contained in:
parent
014fd28f22
commit
53a06afd69
|
@ -23,7 +23,7 @@
|
||||||
#define INCLUDED_HAMNET70_PID_CONTROLLER_H
|
#define INCLUDED_HAMNET70_PID_CONTROLLER_H
|
||||||
|
|
||||||
#include <hamnet70/api.h>
|
#include <hamnet70/api.h>
|
||||||
#include <gnuradio/sync_block.h>
|
#include <gnuradio/block.h>
|
||||||
|
|
||||||
namespace gr {
|
namespace gr {
|
||||||
namespace hamnet70 {
|
namespace hamnet70 {
|
||||||
|
@ -33,7 +33,7 @@ namespace gr {
|
||||||
* \ingroup hamnet70
|
* \ingroup hamnet70
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class HAMNET70_API pid_controller : virtual public gr::sync_block
|
class HAMNET70_API pid_controller : virtual public gr::block
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef boost::shared_ptr<pid_controller> sptr;
|
typedef boost::shared_ptr<pid_controller> sptr;
|
||||||
|
|
|
@ -39,13 +39,14 @@ namespace gr {
|
||||||
* The private constructor
|
* The private constructor
|
||||||
*/
|
*/
|
||||||
pid_controller_impl::pid_controller_impl(size_t interval, float p, float i, float d, float post_gain)
|
pid_controller_impl::pid_controller_impl(size_t interval, float p, float i, float d, float post_gain)
|
||||||
: gr::sync_block("pid_controller",
|
: gr::block("pid_controller",
|
||||||
gr::io_signature::make(1, 1, sizeof(float)),
|
gr::io_signature::make(1, 1, sizeof(float)),
|
||||||
gr::io_signature::make(0, 0, 0)),
|
gr::io_signature::make(0, 0, 0)),
|
||||||
d_interval(interval),
|
d_interval(interval),
|
||||||
d_lastInput(0),
|
d_lastInput(0),
|
||||||
d_iVal(0),
|
d_iVal(0),
|
||||||
d_postGain(post_gain)
|
d_postGain(post_gain),
|
||||||
|
d_nextSampleIdx(0)
|
||||||
{
|
{
|
||||||
// TODO: scale with interval?
|
// TODO: scale with interval?
|
||||||
d_kp = p;
|
d_kp = p;
|
||||||
|
@ -63,13 +64,16 @@ namespace gr {
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
pid_controller_impl::work(int noutput_items,
|
pid_controller_impl::general_work(int noutput_items,
|
||||||
|
gr_vector_int &ninput_items,
|
||||||
gr_vector_const_void_star &input_items,
|
gr_vector_const_void_star &input_items,
|
||||||
gr_vector_void_star &output_items)
|
gr_vector_void_star &output_items)
|
||||||
{
|
{
|
||||||
const float *in = (const float *) input_items[0];
|
const float *in = (const float *) input_items[0];
|
||||||
|
|
||||||
while(d_nextSampleIdx < noutput_items) {
|
int ninput_avail = ninput_items[0];
|
||||||
|
|
||||||
|
while(d_nextSampleIdx < ninput_avail) {
|
||||||
const float &inp = in[d_nextSampleIdx];
|
const float &inp = in[d_nextSampleIdx];
|
||||||
|
|
||||||
// proportional part
|
// proportional part
|
||||||
|
@ -88,7 +92,11 @@ namespace gr {
|
||||||
d_nextSampleIdx += d_interval;
|
d_nextSampleIdx += d_interval;
|
||||||
}
|
}
|
||||||
|
|
||||||
d_nextSampleIdx -= noutput_items;
|
d_nextSampleIdx -= ninput_avail;
|
||||||
|
|
||||||
|
consume(0, ninput_avail);
|
||||||
|
|
||||||
|
noutput_items = 0;
|
||||||
|
|
||||||
// Tell runtime system how many output items we produced.
|
// Tell runtime system how many output items we produced.
|
||||||
return noutput_items;
|
return noutput_items;
|
||||||
|
|
|
@ -46,7 +46,8 @@ namespace gr {
|
||||||
~pid_controller_impl();
|
~pid_controller_impl();
|
||||||
|
|
||||||
// Where all the action really happens
|
// Where all the action really happens
|
||||||
int work(int noutput_items,
|
int general_work(int noutput_items,
|
||||||
|
gr_vector_int &ninput_items,
|
||||||
gr_vector_const_void_star &input_items,
|
gr_vector_const_void_star &input_items,
|
||||||
gr_vector_void_star &output_items);
|
gr_vector_void_star &output_items);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue