Usuario:984 M18143

De Wikifab

JOSÉ LUIS SÁNCHEZ

Tarea 1: REPRESENTACIÓN DE ONDAS SENOIDALES

Este programa permite representar ondas senoidales en función del número de ciclos, fase y amplitud seno y amplitud ruido, tambien se puede elegir el color con el que se quiera representar dicha curva.

Imagen:Imagen_1.JPG


Se ha ejecutado este programa de ondas senoidales con ruido se ingresar el número de ciclos, la amplitud y el ruido deseado. A continuación se indicara presenta los botones de control:

Número de ciclos: permite modificar el numero de ciclos de la onda senoidal.

Fase: perite modificar la fase de la onda.

Amplitud del seno: permite modificar la amplitud de la onda.

Amplitud del ruido: permite modificar la amplitud del ruido.

Color: permite selesccionar el color deseado en la grafica.

Graficar: pulsando este botón se representa la gráfica de la función senoidal descrita con los parámetros anteriores.

Borrar: pulsando este botón se eliminan todas las curvas representadas.

Salir: pulsando este botón se sale del programa.


Para que el programa pueda definir estas curvas senoidales con un ruido se fijan en el código las siguientes funciones:

SinePattern (1000, amplitudseno, fase, ciclos, seno);

WhiteNoise (1000, amplitud, -1, ruido);

for (i=0;i<=999;i++)

{

SenoRuidoso[i]=seno[i]+ruido[i];

}


Los valores numéricos que se introducieron para los ciclos, amplitud, la fase y el color.

GetCtrlVal (panelHandle, PANEL_NUMERIC, &ciclos);

GetCtrlVal (panelHandle, PANEL_NUMERIC_2, &amplitud);

GetCtrlVal (panelHandle, PANEL_NUMERIC_3, &fase);

GetCtrlVal (panelHandle, PANEL_NUMERIC_4, &amplitudseno);

GetCtrlVal (panelHandle, PANEL_COLORNUM, &color);


Para graficar la curva deseada se emplea la siguiente función:


PlotY (panelHandle, PANEL_GRAPH, SenoRuidoso, 1000, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, color);


Se ha añadido para que en los tres botones, al dar clcic derecho dé información de lo que hace. Con el siguenite codigo:

case EVENT_RIGHT_CLICK:

MessagePopup ("AYUDA", "este boton genera la grafica señoidal");

break;

Como resultado tenemos lo siguiente:

Imagen:Imagen_2.JPG

Media:Tarea1.rar



TAREA 2 Interfaz del Usuario.

Objetivo: Almacenar una set de datos en un archivo, posteriormente mostrar el set de datos. Para ello se genera de forma aleatoria una serie de datos. Además, al mostrar los datos generados permitirá seleccionar un límite superior y uno inferior, indicando de forma visual cuando ambos son superados.

Imagen:Modelo2_M18143.JPG


En el desarrollo se partió definiendo las variables que se emplearan, para poder definir los componentes a emplearse en la interfaz del usuario.

static int panelHandle;

double valor[3]; double maximo; double freq; double arrayout[10000]; double arrayin[10000];

static char proj_dir[MAX_PATHNAME_LEN]; static char nombre_archivo[MAX_PATHNAME_LEN];

int encendido; int color; int contador; int i=0; int j=0; Para asignar las propiedades de funcionamiento a los botones en las líneas de programación se ha empleado el comando “CALLBACK” y para introducir los valores característicos de la función se empleó el comando “GetCtrlVal”.

La gráfica se la genero empleando un “tiempo” que entra en funcionamiento cuando el switch este en contacto, dicha gráfica estará guiada por los valores límite, que activara la alarma luminosa a través de condicionales.

int CVICALLBACK tiempo (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) {

switch (event) { case EVENT_TIMER_TICK: GetCtrlVal (panelHandle, PANEL_BINARYSWITCH, &encendido); if (encendido==1)

{ GetCtrlVal (panelHandle, PANEL_NUMERICDIAL_2, &freq); SetCtrlAttribute (panelHandle, PANEL_TIMER, ATTR_INTERVAL, freq);


valor[0]=rand(); valor[0]=valor[0]/32000; valor[0]=valor[0]*48; valor[0]=valor[0]+36;

SetCtrlVal (panelHandle, PANEL_NUMERIC, valor[0]);


GetCtrlVal (panelHandle, PANEL_NUMERICDIAL, &maximo); valor[1]=maximo;

arrayin[i]=valor[0]; i++; GetCtrlVal (panelHandle, PANEL_COLORNUM, &color); SetTraceAttribute (panelHandle, PANEL_STRIPCHART, 1, ATTR_TRACE_COLOR, color); SetTraceAttribute (panelHandle, PANEL_STRIPCHART, 1, ATTR_TRACE_COLOR, color); PlotStripChart (panelHandle, PANEL_STRIPCHART, valor, 3, 0, 0, VAL_DOUBLE);

if(valor[0]>=valor[1])

{ SetCtrlVal (panelHandle, PANEL_LED, 1); } else { SetCtrlVal (panelHandle, PANEL_LED, 0); } }

break; }

return 0; }


Para la grabación de los datos se ha empleado el comando “FileSelectPopupEx” y “ArrayToFile” para generar el fichero y darle propiedades.

int CVICALLBACK guardar (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) {

switch (event) { case EVENT_COMMIT:

FileSelectPopup ("", "*.dat", "*.dat", "Nombre del fichero que grabar", VAL_OK_BUTTON, 0, 0, 1, 1, nombre_archivo);

ArrayToFile (nombre_archivo, arrayin, VAL_DOUBLE, 1000, 1, VAL_GROUPS_TOGETHER, VAL_GROUPS_AS_COLUMNS, VAL_CONST_WIDTH, 10, VAL_ASCII, VAL_TRUNCATE);



break;

} return 0; }

Imagen:Guardar.JPG


Para mostrar el archivo se genera con un contador, el mismo que permite graficar únicamente los datos almacenados.

int CVICALLBACK mostrar (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT:

if(FileSelectPopupEx ("", "*.dat", "*.dat", "Name of File to Read", VAL_OK_BUTTON, 0, 1, nombre_archivo) > 0)

{ contador=0, FileToArray (nombre_archivo, arrayin, VAL_DOUBLE, 1000, 1, VAL_GROUPS_TOGETHER, VAL_GROUPS_AS_COLUMNS, VAL_ASCII);

DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW);

for(j=0;arrayin[j]!=0;j++) contador++; PlotY (panelHandle, PANEL_GRAPH, arrayin, 1000, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED); }


break; } return 0; }

Por último se presenta la interfaz del usuario en funcionamiento, visualizando la grafca instantanea y graficando un archivo del historial Imagen:Modelo_M18143.JPG

Media:Tarea_2.rar


== TAREA FINAL ==


Diseño de la interfaz

Lo que vamos a realizar en la sigueinte interfaz es controlar la carga y descarga de los caudales de entrada y salida, para poder evitar el derrame o vaciado inesperado, lo cual nos generaria problemas en el sistema.

Este diseño se lo realizo en el software LabWindows/CVI.

Imagen:Imagen2.18143.JPG

Los elementos que se han puesto en este diseño son:

Boton ON: Realiza el funcinamiento del sistema.

Boton OFF: Realiza el apagado del sistema.

Boton de emergencia: Suspende el funcionamiento del sistema.

Boton reset: Realiza la activación luego de precionar el boton de emergencia activando con las condiciones finales del sistema.

Indicadores de caudal de salida y entrada al tanque que estan medidos en galones por minuto, en el cual se implemento dos bombas una para la entrada y la otra para la salida del tanque.

Mandos para variar la cantidad de caudal en la entrada y salida del tanque los cuales tenemos 7 denominados F1, F2, F3, F4, F5, F6, F7.

Pulsadores para el llenado automático y uno para el vaciado manual.

Dos indicadores para medir el nivel de llenado o vaciado del tanque lo cual podemos variar los limites a nuestras necesidades y por ultimo un boton para salir denomidado exit.

Quedandonos de la siguiente forma:

Imagen:Imagen1.18143.JPG

Para poder interpretar el diseño en el programa podeis ver en el siguente archivo adjunto.

Media:Trabajo_final_18143.rar

Herramientas personales