From fa0adf1e28bf9b6ee03c04234bceed20ac4bced2 Mon Sep 17 00:00:00 2001 From: Jeroen Vreeken <jeroen@vreeken.net> Date: Mon, 1 Dec 2014 22:07:16 +0100 Subject: [PATCH] Add test network for pid_aw block Cleanup libs Add lib dependancies for console_httpd. Add inf as double constant. --- Makefile | 3 + common/command/build.mk | 2 +- common/log/build.mk | 2 +- common/trace/build.mk | 2 +- common/utils/build.mk | 2 +- console/console/build.mk | 7 ++- controller/block/block_pid_aw.c | 11 ++-- controller/block/block_pid_aw.test.ctrl | 58 +++++++++++++++++++ controller/block/build.mk | 1 + .../controller/controller_load_parser.l | 1 + .../controller/controller_load_parser.y | 3 + controller/controller/controller_sample.c | 2 +- 12 files changed, 81 insertions(+), 13 deletions(-) create mode 100644 controller/block/block_pid_aw.test.ctrl diff --git a/Makefile b/Makefile index d74da47..5438e2d 100644 --- a/Makefile +++ b/Makefile @@ -32,12 +32,14 @@ help: echo "golden repository (on eris.camras.nl)." +libnova/libnova.h: lib/libnova.la libnova.la: lib/libnova.la lib/libnova.la: cd libnova-0.13.0 ; ./configure -enable-static -disable-shared --prefix=${CURDIR} $(CONF_HOST); make; make install clean: subdirs_CLEAN rm -rf lib/* + rm -rf include/libnova cd libnova-0.13.0 ; make clean || true # Rules for building a release @@ -131,6 +133,7 @@ endef CFLAGS := -pthread -Icommon -Icommon/include -Icontroller -Iconsole/console -Iinclude LDFLAGS := -pthread -Lcommon/lib -Lcontroller/lib -Lconsole/console/lib -Llib -Wl,--as-needed VPATH += common/lib controller/lib console/console/lib lib +VPATH += include TARGETS:= diff --git a/common/command/build.mk b/common/command/build.mk index 0a8f3e6..88fcc9f 100644 --- a/common/command/build.mk +++ b/common/command/build.mk @@ -23,4 +23,4 @@ $(DIR)/command_list: $(COMMAND_LIST_OBJS) SRCS += $(ARCHSRCS) $(COMMAND_LIST_SRCS) TARGETS += $(COMMAND_TARGETS) -CLEAN += $(COMMAND_TARGETS) $(ARCHOBJS) $(COMMAND_LIST_OBJS) +CLEAN += $(COMMAND_TARGETS) $(ARCHOBJS) $(COMMAND_LIST_OBJS) $(LIBDIR)/libcommand.a diff --git a/common/log/build.mk b/common/log/build.mk index f3c75fa..0fa627d 100644 --- a/common/log/build.mk +++ b/common/log/build.mk @@ -12,4 +12,4 @@ $(LIBDIR)/liblog.la_LDFLAGS += -lutils $(LIBDIR)/liblog.la: $(ARCHOBJS) $(LIB_LINK) -CLEAN += $(TARGETS) $(ARCHOBJS) +CLEAN += $(TARGETS) $(ARCHOBJS) $(LIBDIR)/liblog.a diff --git a/common/trace/build.mk b/common/trace/build.mk index 19fb9cf..82ccb8e 100644 --- a/common/trace/build.mk +++ b/common/trace/build.mk @@ -53,7 +53,7 @@ SRCS += $(TRACE_DUMPDIFF_SRCS) SRCS += $(TRACE_FFT_SRCS) SRCS += $(TRACE_LIST_SRCS) SRCS += $(TRACE_VIEW_SRCS) -CLEAN += $(TRACE_TARGETS) $(ARCHOBJS) +CLEAN += $(TRACE_TARGETS) $(ARCHOBJS) $(LIBDIR)/libtrace.a CLEAN += $(TRACE_DUMP_OBJS) CLEAN += $(TRACE_DUMPDIFF_OBJS) CLEAN += $(TRACE_FFT_OBJS) diff --git a/common/utils/build.mk b/common/utils/build.mk index e4ebcd6..bb13112 100644 --- a/common/utils/build.mk +++ b/common/utils/build.mk @@ -36,6 +36,6 @@ $(LIBDIR)/libutils.la: $(ARCHOBJS) CLEAN += $(LIBDIR)/libutils.la CLEAN += $(DIR)/weather_test -CLEAN += $(WEATHER_OBJS) $(ARCHOBJS) +CLEAN += $(WEATHER_OBJS) $(ARCHOBJS) $(LIBDIR)/libutils.a SRCS += $(ARCHSRCS) $(WEATHER_SRCS) diff --git a/console/console/build.mk b/console/console/build.mk index 503056e..02c2e24 100644 --- a/console/console/build.mk +++ b/console/console/build.mk @@ -51,24 +51,28 @@ $(DIR)/command_shell: $(DIR)/command_shell.o CONSOLE_SRCS += $(DIR)/command_shell.c $(DIR)/console_moontracker.o: CFLAGS += -Wall -O3 +$(DIR)/console_moontracker.o: libnova/libnova.h $(DIR)/console_moontracker_LDFLAGS += -lcommand -lm -laa $(DIR)/console_moontracker: libcommand.la libaa.la $(DIR)/console_moontracker: $(DIR)/console_moontracker.o CONSOLE_SRCS += $(DIR)/console_moontracker.c $(DIR)/console_j2000tracker.o: CFLAGS += -Wall -O3 +$(DIR)/console_j2000tracker.o: libnova/libnova.h $(DIR)/console_j2000tracker_LDFLAGS += -lcommand -lm -lnova -ltrace $(DIR)/console_j2000tracker: libcommand.la libtrace.la libnova.la $(DIR)/console_j2000tracker: $(DIR)/console_j2000tracker.o CONSOLE_SRCS += $(DIR)/console_j2000tracker.c $(DIR)/console_j2000tracer.o: CFLAGS += -Wall -O3 +$(DIR)/console_j2000tracesr.o: libnova/libnova.h $(DIR)/console_j2000tracer_LDFLAGS += -lm -lnova -lutils $(DIR)/console_j2000tracer: libutils.la libnova.la $(DIR)/console_j2000tracer: $(DIR)/console_j2000tracer.o CONSOLE_SRCS += $(DIR)/console_j2000tracer.c $(DIR)/console_j2000_indi.o: CFLAGS += -Wall -O3 +$(DIR)/console_j2000_indi.o: libnova/libnova.h $(DIR)/console_j2000_indi_LDFLAGS += -lm -lindi -lindidriver -lnova -lutils $(DIR)/console_j2000_indi: libutils.la libnova.la $(DIR)/console_j2000_indi: $(DIR)/console_j2000_indi.o @@ -135,6 +139,7 @@ $(DIR)/spg_auth: $(DIR)/spg_auth.o CONSOLE_SRCS += $(DIR)/spg_auth.c $(DIR)/console_sattracker.o: CFLAGS += -Wall -O3 +$(DIR)/console_sattracker.o: libnova/libnova.h $(DIR)/console_sattracker_LDFLAGS += -lcommand -lnova -lpredict $(DIR)/console_sattracker: libcommand.la libpredict.la libnova.la $(DIR)/console_sattracker: $(DIR)/console_sattracker.o @@ -142,7 +147,7 @@ CONSOLE_SRCS += $(DIR)/console_sattracker.c $(DIR)/console_httpd.o: CFLAGS += -Wall -O0 -g $(DIR)/console_httpd_LDFLAGS += -llog -ltrace -lcommand -lwebsockets -lmagic -$(DIR)/console_httpd: liblog.la +$(DIR)/console_httpd: liblog.la libtrace.la libcommand.la $(DIR)/console_httpd: $(DIR)/console_httpd.o CONSOLE_SRCS += $(DIR)/console_httpd.c diff --git a/controller/block/block_pid_aw.c b/controller/block/block_pid_aw.c index 28ef18f..8545c6b 100644 --- a/controller/block/block_pid_aw.c +++ b/controller/block/block_pid_aw.c @@ -22,6 +22,7 @@ #include <string.h> #include <controller/controller_block.h> +#include <controller/controller_sample.h> /* inputs outputs @@ -72,7 +73,6 @@ struct controller_block_private { float kp; /* K factors */ float ki; float kd; - float t; /* sample period */ float ci; /* Factors used in calculate (K * T) */ float cd; float previous; @@ -115,7 +115,7 @@ static struct controller_block_param_list params[] = { { "kp", true }, { "ki", true }, { "kd", true }, - { "t", true }, + { "t", true }, /* deprecated */ { "maxw", false }, { "minw", false }, { "reset", true }, @@ -135,7 +135,6 @@ static void param_get(struct controller_block *pid, int param, void *val) *(float*)val = pid->private->kd; break; case 3: - *(float*)val = pid->private->t; break; case 4: *(float*)val = pid->private->maxi; @@ -161,7 +160,6 @@ static void param_set(struct controller_block *pid, int param, va_list val) pid->private->kd = va_arg(val, double); break; case 3: - pid->private->t = va_arg(val, double); break; case 4: pid->private->maxi = va_arg(val, double); @@ -177,8 +175,8 @@ static void param_set(struct controller_block *pid, int param, va_list val) pid->private->out = 0.0; break; } - pid->private->ci = pid->private->ki * pid->private->t; - pid->private->cd = pid->private->kd / pid->private->t; + pid->private->ci = pid->private->ki * controller_sample_period(); + pid->private->cd = pid->private->kd / controller_sample_period(); } @@ -210,7 +208,6 @@ struct controller_block * block_pid_aw_create(char *name) pid->private->kp = 0.0; pid->private->ki = 0.0; pid->private->kd = 0.0; - pid->private->t = 1.0; pid->private->ci = 0.0; pid->private->cd = 0.0; pid->private->maxi = 0.0; diff --git a/controller/block/block_pid_aw.test.ctrl b/controller/block/block_pid_aw.test.ctrl new file mode 100644 index 0000000..7d233ae --- /dev/null +++ b/controller/block/block_pid_aw.test.ctrl @@ -0,0 +1,58 @@ +frequency 100 + +blocks { + { "pid_aw", "pid" } + + { "test_input_float", "in" } + { "test_input_bool", "enable" } + + { "test_output_float", "out" } + { "test_output_float", "outp" } + { "test_output_float", "outi" } + { "test_output_float", "outd" } +} + +links { + { "in", "value", "pid", "in", true } + { "enable", "value", "pid", "enable", true } + { "pid", "out", "out", "value", true } + { "pid", "outp", "outp", "value", true } + { "pid", "outi", "outi", "value", true } + { "pid", "outd", "outd", "value", true } +} + +params { + { "pid", "kp", (float) 10.0 } + { "pid", "ki", (float) 2.0 } + { "pid", "kd", (float) 0.5 } + { "pid", "maxw", (float) 3.0 } + { "pid", "minw", (float) -0.01 } + + { "enable", "value", 10, + (int) { false, true, true, true, true, true, true, true, true, false } + } + + { "in", "value", 10, + (float) { 0.0, 1.0, -1.0, -1.0, 10.0, 10.0, 100.0, 100.0, 10.0, 10.0 } + } + + { "out", "value", 10, + (float) { 0.0, 60.02, -10.0, -10.0, 100.0, 100.0, 1000.0, 1000.0, 100.0, 0.0}, + (float) { 0.0, 0.0, inf, inf, inf, inf, inf, inf, inf, 0.0} + } + + { "outp", "value", 10, + (float) { 0.0, 10.0, -10.0, -10.0, 100.0, 100.0, 1000.0, 1000.0, 100.0, 0.0}, + (float) { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0} + } + + { "outi", "value", 10, + (float) { 0.0, 0.02, 0.0, -0.01, 0.19, 0.39, 2.39, 3.0, 3.0, 0.0}, + (float) { 0.0, 0.0, 0.0, 0.0, 1e-6, 1e-6, 1e-6, 0.0, 0.0, 0.0} + } + + { "outd", "value", 10, + (float) { 0.0, 50.0, -100.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, + (float) { 0.0, 0.0, 0.0, 0.0, inf, inf, inf, inf, inf, 0.0} + } +} diff --git a/controller/block/build.mk b/controller/block/build.mk index 6ef548b..df912e8 100644 --- a/controller/block/build.mk +++ b/controller/block/build.mk @@ -83,6 +83,7 @@ CTRL_TESTS += \ $(DIR)/block_limit.test.ctrl \ $(DIR)/block_matrix_2x2.test.ctrl \ $(DIR)/block_not.test.ctrl \ + $(DIR)/block_pid_aw.test.ctrl \ $(DIR)/block_rangecheck.test.ctrl \ $(DIR)/block_setpoint_generator_1d.test.ctrl \ $(DIR)/block_setpoint_generator_3d.test.ctrl \ diff --git a/controller/controller/controller_load_parser.l b/controller/controller/controller_load_parser.l index b51eb6d..fdbd797 100644 --- a/controller/controller/controller_load_parser.l +++ b/controller/controller/controller_load_parser.l @@ -90,6 +90,7 @@ boolcast "("[ \t]*"bool"[ \t]*")" "deg2rad" { return FUNC_DEG2RAD_SYM; } "rpm2rads" { return FUNC_RPM2RADS_SYM; } "pi" { return CONST_PI_SYM; } +"inf" { return CONST_INF_SYM; } {floatcast} { return FLOATCASTSYM; } {doublecast} { return DOUBLECASTSYM; } diff --git a/controller/controller/controller_load_parser.y b/controller/controller/controller_load_parser.y index c8d67c4..9206099 100644 --- a/controller/controller/controller_load_parser.y +++ b/controller/controller/controller_load_parser.y @@ -72,6 +72,7 @@ void yyerror(yyscan_t *scanner, char const *s); %token FUNC_RPM2RADS_SYM %token <dbl> CONST_PI_SYM +%token <dbl> CONST_INF_SYM %left DUMMY_DOUBLEVAR %left DUMMY_INTVAR @@ -254,6 +255,8 @@ doublevar: DOUBLEVARIABLESYM { $$ = $1; } | CONST_PI_SYM { $$ = M_PI; } + | CONST_INF_SYM + { $$ = INFINITY; } | MINSYM doublevar %prec UMINUS { $$ = - $2; } ; diff --git a/controller/controller/controller_sample.c b/controller/controller/controller_sample.c index e2c05a6..8ea67b3 100644 --- a/controller/controller/controller_sample.c +++ b/controller/controller/controller_sample.c @@ -303,7 +303,7 @@ static void *sample_thread(void *arg) uint64_t t_start; uint64_t t_io; uint64_t t_end; - param.sched_priority = 99; + param.sched_priority = 90; sigset_t sigset; struct sigaction sigact; -- GitLab