From 950f83d0e71dc886fcf5be9889796c5b2a85fa4c Mon Sep 17 00:00:00 2001 From: Ricardo Markiewicz Date: Thu, 20 Nov 2003 04:53:28 +0000 Subject: [PATCH] Se arregla bug en la union que hacia que el flujo inicial este en 0, y eso condicionaba todo el circuito armado a andal mal. Ahora el ejemplo del server corre como trompada --- Model/src/conduct.cpp | 18 +++++------------- Model/src/main.cpp | 4 ++-- Model/src/plantitem.cpp | 3 +++ Model/src/pump.cpp | 16 +++------------- Model/src/simulator.cpp | 1 + Model/src/splitter.cpp | 1 + Model/src/union.cpp | 4 ++-- 7 files changed, 17 insertions(+), 30 deletions(-) diff --git a/Model/src/conduct.cpp b/Model/src/conduct.cpp index b196eec..f278904 100644 --- a/Model/src/conduct.cpp +++ b/Model/src/conduct.cpp @@ -5,12 +5,12 @@ using namespace PlaQui::Model; Conduct::Conduct(const std::string &_name):Transport(_name) { - max_flow = actual_flow = 0.0f; + max_flow = 0.0f; // Inicio los parametros de conectores in_slots = 1; out_slots = 1; - actual_flow = 9999; + actual_flow = 99999; } Conduct::~Conduct() @@ -24,13 +24,10 @@ void Conduct::recieve_msg(int msg, IConector *who, void *data) // Me preguntan por el flujo máximo. // Primero me actualizo, y luego respondo float tmp = *((float *)data); - // update(); actual_flow = (actual_flow>max_flow)?max_flow:actual_flow; actual_flow = (actual_flowrecieve_msg(MSG_RESPONSE_MAX_FLOW, this, &actual_flow); updated = true; } @@ -55,13 +52,8 @@ void Conduct::update(int dir) // Seteo mi actualizar en true para evitar entrar de nuevo actual_flow = 99999; updated = true; - switch (dir) { - case IN: - send_msg(IN, MSG_QUERY_MAX_FLOW_IN, (void *)&max_flow); - break; - case OUT: - send_msg(OUT, MSG_QUERY_MAX_FLOW_OUT, (void *)&max_flow); - } + actual_flow = max_flow; + send_msg(OUT, MSG_QUERY_MAX_FLOW_OUT, (void *)&actual_flow); } void Conduct::simulate() @@ -71,7 +63,7 @@ void Conduct::simulate() return; } - std::cout << name << "::Flujo actual = " << actual_flow << std::endl; + std::cout << name << "::Flujo actual = " << actual_flow << " de " << max_flow << std::endl; updated = false; } diff --git a/Model/src/main.cpp b/Model/src/main.cpp index a656492..4470fc4 100644 --- a/Model/src/main.cpp +++ b/Model/src/main.cpp @@ -19,10 +19,10 @@ int main(int argc, char *argv[]) Simulator *sim = new Simulator(argv[1]); int i=0; - while (i<10) { + while (i<2) { sim->simulate(); - std::cout << sim->get_state_as_xml() << std::endl << std::endl; +// std::cout << sim->get_state_as_xml() << std::endl << std::endl; i++; } diff --git a/Model/src/plantitem.cpp b/Model/src/plantitem.cpp index efca4c1..ea3b85e 100644 --- a/Model/src/plantitem.cpp +++ b/Model/src/plantitem.cpp @@ -36,4 +36,7 @@ void PlantItem::get_state_as_xml(std::stringstream &out) out << "\t" << std::endl; out << "\t\t" << actual_flow << "" << std::endl; out << "\t" << std::endl; + + // Para que quede bonito + actual_flow = 99999; } diff --git a/Model/src/pump.cpp b/Model/src/pump.cpp index 9c2a9b4..fb355a0 100644 --- a/Model/src/pump.cpp +++ b/Model/src/pump.cpp @@ -29,14 +29,13 @@ void Pump::update(int dir) actual_flow = max_flow; else actual_flow = 0; - updated = true; + send_msg(OUT, MSG_QUERY_MAX_FLOW_OUT, (void *)&actual_flow); + updated = true; } void Pump::simulate() { - std::cout << name << "::Flujo actual = " << ((active && open)?actual_flow:0) \ - << " de " << max_flow; std::cout << ((active && open)?" (funcionando)":" (apagada)") << std::endl; updated = false; } @@ -53,18 +52,9 @@ bool Pump::get_output() void Pump::recieve_msg(int msg, IConector *who, void *data) { switch (msg) { - case MSG_QUERY_MAX_FLOW_OUT: { - // Me preguntan por el flujo máximo. - // Primero me actualizo, y luego respondo - // TODO la bomba nunca deberia ser consultada,pues el flujo sale ella - /* update(); - float tmp; - tmp = (actual_flowrecieve_msg(MSG_RESPONSE_MAX_FLOW, this, &tmp);*/ - } - break; case MSG_RESPONSE_MAX_FLOW: { float tmp = *((float *)data); + if (max_flow < tmp) tmp = max_flow; if (tmp < actual_flow) actual_flow = tmp; } break; diff --git a/Model/src/simulator.cpp b/Model/src/simulator.cpp index 3aeacd6..106f6e3 100644 --- a/Model/src/simulator.cpp +++ b/Model/src/simulator.cpp @@ -78,6 +78,7 @@ void Simulator::add_conduct(const std::string &name, float flujo) { Conduct *p = new Conduct(name); // FIXME no va!! + std::cout << flujo << std::endl; p->set_max_flow(flujo); conduct_lst.push_back(p); items.push_back(p); diff --git a/Model/src/splitter.cpp b/Model/src/splitter.cpp index 360c004..4d4497e 100644 --- a/Model/src/splitter.cpp +++ b/Model/src/splitter.cpp @@ -46,6 +46,7 @@ void Splitter::recieve_msg(int msg, IConector *who, void *data) break; case MSG_RESPONSE_MAX_FLOW: { float max = *((float *)data); + std::cout << name << ":Split " << max << std::endl; if (pos == OUT) { if (max < actual_flow) actual_flow = max; if (max_flow < actual_flow) actual_flow = max_flow; diff --git a/Model/src/union.cpp b/Model/src/union.cpp index 443cb2b..baf3cc3 100644 --- a/Model/src/union.cpp +++ b/Model/src/union.cpp @@ -8,9 +8,10 @@ Union::Union(const std::string &_name):Transport(_name) { in_slots = 2; out_slots = 1; - max_flow = actual_flow = 0.0f; + max_flow = 0.0f; in_on_zero = 0; in_ready = 0; + actual_flow = 999999; } Union::~Union() @@ -110,7 +111,6 @@ void Union::simulate() std::cout << name << "::Flujo actual = " << actual_flow << std::endl; updated = false; - actual_flow = 99999; in_on_zero = 0; in_ready = 0; } -- 2.43.0