Página principal | Jerarquía de la clase | Lista alfabética | Lista de componentes | Lista de archivos | Miembros de las clases | Archivos de los miembros | Páginas relacionadas

actuador.C

Ir a la documentación de este archivo.
00001 //===========================================================================
00002 //= actuador.cc                                           Noviembre de 1998 =
00003 //=-------------------------------------------------------------------------=
00004 //= Definiciones de actuadores (toolkit NUKAK)                              =
00005 //=-------------------------------------------------------------------------=
00006 //= ADVERTENCIA: ESTE SOFTWARE NO ESTA CONCEBIDO NI DISENNADO PARA EL USO   =
00007 //= EN EQUIPO DE CONTROL EN LINEA EN ENTORNOS PELIGROSOS QUE REQUIERAN UN   =
00008 //= DESEMPENNO LIBRE DE FALLAS, COMO LA OPERACION DE PLANTAS NUCLEARES,     = 
00009 //= SISTEMAS DE NAVEGACION O COMUNICACION EN AVIONES, TRAFICO AEREO,        =
00010 //= EQUIPO MEDICO DEL CUAL DEPENDAN VIDAS HUMANAS O SISTEMAS DE ARMAMENTO,  =
00011 //= EN LOS CUALES UNA FALLA EN EL SOFTWARE PUEDA IMPLICAR DIRECTAMENTE LA   =
00012 //= MUERTE, DANNOS PERSONALES O DANNOS FISICOS Y/O AMBIENTALES GRAVES       =
00013 //= ("ACTIVIDADES DE ALGO RIESGO").                                         =
00014 //=-------------------------------------------------------------------------=
00015 //= Autor original: Oscar J. Chavarro G.  A.K.A. JEDILINK. Copyright (c),   =
00016 //= 1997 - 2003, oscarchavarro@hotmail.com                                  =
00017 //= AQUYNZA es software libre, y se rige bajo los terminos de la licencia   =
00018 //= LGPL de GNU (http://www.gnu.org). Para mayor informacion respecto a la  =
00019 //= licencia de uso, consulte el archivo ./doc/LICENCIA en la distribucion. =
00020 //===========================================================================
00021 
00022 #include "jed_defs.h"
00023 
00024 #include "core/control/actuador.h"
00025 
00026 #include <string.h>
00027 #include <stdlib.h>
00028 
00029 //===========================================================================
00030 //= CLASE ACTUADOR                                                          =
00031 //===========================================================================
00032 
00033 ACTUADOR::ACTUADOR()
00034 {
00035     ;
00036 }
00037 
00038 //===========================================================================
00039 //= CLASE ACTUADOR_FLOAT                                                   =
00040 //===========================================================================
00041 
00042 ACTUADOR_FLOAT::ACTUADOR_FLOAT(VARIABLE_DE_ESTADO *var) : ACTUADOR()
00043 {
00044     mi_variable_de_estado = var;
00045 }
00046 
00047 void
00048 ACTUADOR_FLOAT::actuar(double &new_val)
00049 {
00050     //printf("<ACTUADOR_FLOAT> Actuo %.2f\n", new_val); fflush(stdout);
00051     mi_variable_de_estado->actualizar_float(new_val);
00052 }
00053 
00054 int
00055 ACTUADOR_FLOAT::tipo(void)
00056 {
00057     return T_FLOAT;
00058 }
00059 
00060 //===========================================================================
00061 //= CLASE ACTUADOR_FLOAT_UDP                                               =
00062 //===========================================================================
00063 
00064 #define TAM_BUFFER 512
00065 
00066 static void
00067 reporte_error(char *cad)
00068 {
00069     fprintf(stderr, "<ACTUADOR_FLOAT> %s\n", cad);
00070     fflush(stderr);
00071     exit(-1);
00072 }
00073 
00074 ACTUADOR_FLOAT_UDP::ACTUADOR_FLOAT_UDP(CONEXION_UDP *C, char *nombre_publico) 
00075     : ACTUADOR_FLOAT(NULL)
00076 {
00077     //-----------------------------------------------------------------------
00078     Conexion = C;
00079     id = C->id();
00080     activo = FALSE;
00081     _nombre_publico = new char[strlen(nombre_publico) + 1];
00082     strcpy(_nombre_publico, nombre_publico);
00083 }
00084 
00085 void
00086 ACTUADOR_FLOAT_UDP::init(void)
00087 {
00088     //-----------------------------------------------------------------------
00089     if ( !activo ) {
00090         activo = TRUE;
00091     }
00092 }
00093 
00094 void
00095 ACTUADOR_FLOAT_UDP::actuar(double &new_val)
00096 {
00097     if ( !activo ) init();
00098     if ( id < 0 ) return;
00099 
00100     //-----------------------------------------------------------------------
00101     int n, m;
00102     char buffer[TAM_BUFFER];
00103 
00104     sprintf(buffer, "E %d %s %.5f", id, _nombre_publico, new_val);
00105     n = strlen(buffer);
00106     m = Conexion->enviar(buffer, n);
00107     if ( m != n ) reporte_error("cliente: error enviando datos");
00108 
00109     // OJO: Esto es un machete... esta aqui para no saturar de mensajes UDP
00110     // a los servidores... pero deberia existir una mejor manera...
00111     SLEEP_MICROSEC(50);
00112 }
00113 
00114 int
00115 ACTUADOR_FLOAT_UDP::tipo(void)
00116 {
00117     return T_FLOAT;
00118 }
00119 
00120 //===========================================================================
00121 //= CLASE ACTUADOR_VECTOR                                                   =
00122 //===========================================================================
00123 
00124 ACTUADOR_VECTOR::ACTUADOR_VECTOR(VARIABLE_DE_ESTADO *var) : ACTUADOR()
00125 {
00126     mi_variable_de_estado = var;
00127 }
00128 
00129 void
00130 ACTUADOR_VECTOR::actuar(VECTOR &new_val)
00131 {
00132     mi_variable_de_estado->actualizar_vector(new_val);
00133 }
00134 
00135 int
00136 ACTUADOR_VECTOR::tipo(void)
00137 {
00138     return T_VECTOR;
00139 }
00140 
00141 //===========================================================================
00142 //= CLASE ACTUADOR_VECTOR_UDP                                               =
00143 //===========================================================================
00144 
00145 ACTUADOR_VECTOR_UDP::ACTUADOR_VECTOR_UDP(CONEXION_UDP *C, char *nombre_publico)
00146  : ACTUADOR_VECTOR(NULL)
00147 {
00148     //-----------------------------------------------------------------------
00149     Conexion = C;
00150     id = C->id();
00151     activo = FALSE;
00152     _nombre_publico = new char[strlen(nombre_publico) + 1];
00153     strcpy(_nombre_publico, nombre_publico);
00154 }
00155 
00156 void
00157 ACTUADOR_VECTOR_UDP::init(void)
00158 {
00159     //-----------------------------------------------------------------------
00160     if ( !activo ) {
00161         activo = TRUE;
00162     }
00163 }
00164 
00165 void
00166 ACTUADOR_VECTOR_UDP::actuar(VECTOR &new_val)
00167 {
00168     if ( !activo ) init();
00169 
00170     //-----------------------------------------------------------------------
00171     int n, m;
00172     char buffer[TAM_BUFFER];
00173 
00174     sprintf(buffer, "V %d %s %.2f %.2f %.2f",
00175         id, _nombre_publico, new_val.x, new_val.y, new_val.z);
00176     n = strlen(buffer);
00177     m = Conexion->enviar(buffer, n);
00178     if ( m != n ) reporte_error("cliente: error enviando datos");
00179 
00180     // OJO: Esto es un machete... esta aqui para no saturar de mensajes UDP
00181     // a los servidores... pero deberia existir una mejor manera...
00182     SLEEP_MICROSEC(50);
00183 }
00184 
00185 int
00186 ACTUADOR_VECTOR_UDP::tipo(void)
00187 {
00188     return T_VECTOR;
00189 }
00190 
00191 //===========================================================================
00192 //= EOF                                                                     =
00193 //===========================================================================
00194 

Este archivo HTML ha sido generado automáticamente a partir del código fuente AQUYNZA. NO LO EDITE. Para mayor información contacte al autor.