From a995bb9ff446a514ce99064ad9fc6c2f8c773eba Mon Sep 17 00:00:00 2001 From: schodet Date: Sun, 26 Mar 2006 14:17:46 +0000 Subject: Ajout de la gestion en vitesse, d'une ligne de commande. Correction d'inversion I et D. --- n/asserv/utils/graph/asserv_graph.cc | 119 ++++++++++++++++++++++++----------- n/asserv/utils/graph/rc/config | 15 +++-- 2 files changed, 93 insertions(+), 41 deletions(-) diff --git a/n/asserv/utils/graph/asserv_graph.cc b/n/asserv/utils/graph/asserv_graph.cc index a3760e6..de7e337 100644 --- a/n/asserv/utils/graph/asserv_graph.cc +++ b/n/asserv/utils/graph/asserv_graph.cc @@ -33,27 +33,35 @@ class AsservGraph : public Proto::Receiver { Proto proto_; + int argc_; + char **argv_; int tkp, tki, tkd; int akp, aki, akd; int es, is; + int ta, aa; int te, ti, ae, ai; + int tsc, asc; + int cl, cr; int pl, pr; int n; public: - AsservGraph (void) - : proto_ (*this), + AsservGraph (int argc, char **argv) + : proto_ (*this), argc_ (argc), argv_ (argv), te (0), ti (0), ae (0), ai (0), + tsc (0), asc (0), cl (0), cr (0), n (0) { Config &config = Config::getInstance (); tkp = config.get ("asserv.tkp"); - tki = config.get ("asserv.tkd"); - tkd = config.get ("asserv.tki"); + tki = config.get ("asserv.tki"); + tkd = config.get ("asserv.tkd"); akp = config.get ("asserv.akp"); - aki = config.get ("asserv.akd"); - akd = config.get ("asserv.aki"); + aki = config.get ("asserv.aki"); + akd = config.get ("asserv.akd"); es = config.get ("asserv.esat"); is = config.get ("asserv.isat"); + ta = config.get ("asserv.ta"); + aa = config.get ("asserv.aa"); proto_.open (config.get ("asserv.tty")); init (); } @@ -69,7 +77,10 @@ class AsservGraph : public Proto::Receiver proto_.send ('p', "bww", 'd', tkd, akd); proto_.send ('p', "bw", 'E', es); proto_.send ('p', "bw", 'I', is); + proto_.send ('p', "bww", 'a', ta, aa); proto_.send ('P', "b", 1); + proto_.send ('S', "b", 1); + proto_.send ('C', "b", 1); proto_.send ('W', "b", 1); } void receive (char command, const Proto::Frame &frame) @@ -79,55 +90,93 @@ class AsservGraph : public Proto::Receiver case 'P': proto_.decode (frame, "WWWW", te, ti, ae, ai); break; + case 'S': + proto_.decode (frame, "BB", tsc, asc); + break; + case 'C': + proto_.decode (frame, "WW", cl, cr); + break; case 'W': if (proto_.decode (frame, "WW", pl, pr)) { std::cout << te << ' ' << ti << ' ' << ae << ' ' << ai << ' ' - << pl << ' ' << pr << std::endl; + << pl << ' ' << pr << ' ' << tsc << ' ' << asc << ' ' + << cl << ' ' << cr << std::endl; te = ti = ae = ai = 0; + tsc = asc = 0; + cl = cr = 0; n++; } break; } } - void main (void) + void syntax (void) { - proto_.send ('w', "ww", 0x3ff, 0x3ff); - for (n = 0; n < 100;) - proto_.wait (-1); - proto_.send ('w'); - for (n = 0; n < 100;) - proto_.wait (-1); - proto_.send ('c', "ww", 16, 0); - for (n = 0; n < 100;) - proto_.wait (-1); - proto_.send ('w'); + std::cout << "asserv_graph - graphe des variables de" + " l'asservissement.\n" + "Syntaxe : asserv_graph [commands]\n" + " w teste la pwm\n" + " c teste le pas\n" + " s teste la vitesse\n" + " p teste la position à vitesse controlée\n" + << std::endl; + } + int main (void) + { + if (argc_ == 1) + { + syntax (); + return 1; + } + for (int i = 1; i < argc_; ++i) + { + if (argv_[i][0] == '\0' || argv_[i][1] != '\0') + throw std::runtime_error ("bad command line"); + switch (argv_[i][0]) + { + case 'w': + proto_.send ('w', "ww", 0x3ff, 0x3ff); + for (n = 0; n < 100;) + proto_.wait (-1); + break; + case 'c': + proto_.send ('c', "ww", 64, 0); + for (n = 0; n < 100;) + proto_.wait (-1); + break; + case 's': + proto_.send ('s', "bb", 64, 0); + for (n = 0; n < 100;) + proto_.wait (-1); + proto_.send ('s'); + for (n = 0; n < 100;) + proto_.wait (-1); + break; + case 'p': + proto_.send ('s', "wwbb", 1024, 0, 64, 0); + for (n = 0; n < 100;) + proto_.wait (-1); + break; + default: + throw std::runtime_error ("bad command line"); + break; + } + proto_.send ('w'); + for (n = 0; n < 10;) + proto_.wait (-1); + } + return 0; } }; -/// Affiche un memo de syntaxe. -void -syntax (void) -{ - std::cout << "asserv_graph - graphe des variables de l'asservissement.\n" - "Syntaxe : asserv_graph\n" - " ? affiche cet écran d'aide\n" - << std::endl; -} - int main (int argc, char **argv) { try { - if (argc != 1) - { - syntax (); - return 1; - } Config config (argc, argv); - AsservGraph asservGraph; - asservGraph.main (); + AsservGraph asservGraph (argc, argv); + return asservGraph.main (); } catch (const std::exception &e) { diff --git a/n/asserv/utils/graph/rc/config b/n/asserv/utils/graph/rc/config index e110c54..3636d74 100644 --- a/n/asserv/utils/graph/rc/config +++ b/n/asserv/utils/graph/rc/config @@ -1,12 +1,15 @@ asserv.tty = "../../src/asserv/uart0.pts" -asserv.tkp = 700 -asserv.tki = 20 +asserv.tkp = 256 +asserv.tki = 8 asserv.tkd = 0 -asserv.akp = 0 -asserv.aki = 0 +asserv.akp = 256 +asserv.aki = 8 asserv.akd = 0 -asserv.esat = 4095 -asserv.isat = 400 +asserv.esat = 1023 +asserv.isat = 128 + +asserv.ta = 256 +asserv.aa = 256 -- cgit v1.2.3