Usuario:984 M18347

De Wikifab

Contenido

Práctica 1: Señal de onda senoidal con ruido aleatorio

El objetivo de esta práctica es realizar una interfase de usuario.

Deberá de aparecer:

-Dos señales de onda: una senoidal “SinePattern” con otra Ruido aleatorio “WhiteNoise”.
-SinePattern con el número de ciclos observados en el Numeric Ciclos (GetCtrlVal, para capturar el valor).
Esto permitirá modificar la amplitud y la fase en el origen.
-WhiteNoise con la amplitud en el Numeric Amplitud (GetCtrlVal).
-El color de la línea gráfica compuesta debe ser el leído en un control de tipo Colornum (GetCtrlVal pasa el color a PlotY).

El procedimiento para realizar la interfase y el código empleado es el siguiente:

1. Las variables declaradas a utilizar en el programa:

static int panelHandle;
double seno [1000];
double ruido [1000];
double senoruidoso [1000];
int color;
int i;
int Ciclos;

2.Código para dibujar las ondas "add_waves"

int CVICALLBACK add_waves (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal (panelHandle, PANEL_SINECYCLES, &Ciclos); // GetCtrlVal añade el código de ciclos variables al botón Sine Cycles
SinePattern (1000, 1.0, 0.0, Ciclos, seno); // SinePattern añade una onda de seno a la gráfica
GetCtrlVal (panelHandle, PANEL_NOISEAMPLITUTE, &Ciclos); // GetCtrlVal añade el código de amplitud de onda al botón Noise Amplitute
WhiteNoise (1000, 0.2, -1, ruido); // WhiteNoise añade ruido a la onda de la gráfica
for (i=0; i<=999; i++) // For condiciona que la onda de seno debe tener ruido
{
senoruidoso[i]=seno[i]+ruido[i]; // Se crea senoruidoso (onda de seno + onda de ruido)
}
GetCtrlVal (panelHandle, PANEL_COLORNUM, &color); // GetCtrlVal introduce el código al botón que debe de cambiar de color
PlotY (panelHandle, PANEL_GRAPH, senoruidoso, 1000, VAL_DOUBLE, // PlotY indica que el código de color de antes es para la onda senoruidoso
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, color); // Aquí se indica que el color a seleccionar es variable
break;
}
return 0;
}

3. Introducir el comando que cierre el programa "Quit"

Para añadir este comando se indicará en su código una función "QuitUserInterface" que cerrará el programa.
int CVICALLBACK Salir (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
QuitUserInterface (0);
break;
}
return 0;
}

4. Para mejorar el programa se ha decidido incorporar dos comandos que faciliten su uso:

a. Comando borrar "Delete"
Este comando permite eliminar todas las ondas dibujadas en la gráfica al pulsarlo.
int CVICALLBACK Delete (int panel, int control, int event, void *callbackData, int eventData1, int eventData2
{
switch (event)
{
case EVENT_COMMIT:
DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW); // Este código indica que se debe de borrar el gráfico
break;
}
return 0;
}
b. Comando ayuda "?"
Al pulsar sobre este comando aparece una ventana que indica lo que representa la gráfica.
int CVICALLBACK Help (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)
{
switch (event) // Event es el código que crea la función ayuda
{
case EVENT_RIGHT_CLICK: // El comando se accionará con el botón derecho
MessagePopup ("Help", // Nombre del comando
"La grafica representa un seno segun su Amplitud y Ciclo"); // Este es el mensaje que aparece
break;
}
return 0;
}

Resultado de la interfase:

Imagen:2vpd.JPG


Dibujo de la onda:

Imagen:3vpd.JPG


Mensaje de ayuda:

Imagen:4vpd.JPG


Archivo de la práctica: Media:Practica 1 - M18347.rar

Práctica 2: Muestra de la temperatura instantánea

El objetivo de esta práctica es conseguir un programa con los siguientes elementos:

  • Comando de arranque de encendido/apagado.
  • Gráfica "StripChart" que muestra las diferentes curvas que se modifican.
  • Gráfica "Graph" que carga los datos almacenados de una hoja de texto.
  • Utilización de 3 comandos de Numeric dial:
  1. Límite superior: pinta en la gráfica una curva que representa el límite superior de temperatura.
  2. Límite inferior: pinta en la gráfica una curva que representa el límite inferior de temperatura. (Comando opcional)
  3. Sample rate: determina la frecuencia de muestreo.
  • Alarma superior: se enciende cuando la curva de Sample Rate supera el límite superior impuesto.
  • Color de línea: permite seleccionar el color de la línea en el gráfico "Graph".(Comando opcional)
  • Numeric thermometer: representa el valor que alcanza la temperatura instantánea en cada instante.
  • Grabar set de datos: permite guardar en una hoja de texto la curva representada en el "Strip Chart".
  • Mostrar set de datos: permite representar una curva a partir de los datos de una hoja de texto cargada.
  • Comandos de "Borrar": borra las curvas representadas.
  • Comando "representar": abre un nuevo panel (panelHandle2) con la gráfica "Graph".
  • Comando "volver": permite volver al primer panel (panelHandle) desde el segundo (panelHandle2).
  • Comando "Salir": cierra el programa.

Variables que se definen en el programa:

static int panelHandle; // Primer panel
static int panelHandle2; // Segundo panel
static char nombre_archivo[MAX_PATHNAME_LEN]; // Permite crear una ruta de acceso del archivo
int On=0;
double LiInf;
double LiSup;
int i=0;
int j=0;
int tipo_archivo;
int Contador;
int Color=0;
double muestreo;
double temp[3];
double TempGuarda[10000];
double cargar_archivo[10000];

El código empleado para definir el programa contiene 8 Callbacks:

  • Callback Timer: se utiliza la función "if/else"
- Sample Rate: se define a partir de GetCtrlVal y SetCtrlAttribute.
- Límite Inferior: se determina con GetCtrlVal.
- Límite Superior: se determina con GetCtrlVal.
- Panel_Led: se programa que se active la alarma cuando se sobrepasa el límite máximo de temperatura.
  • Callback Salir:
- Switch: se indica "QuitUserInterface".
  • Callback Grabar: se utiliza la función if para indicar que se deben "Grabar" los datos de la curva en una hoja de datos.
- GetCtrlVal: para indicar qué panel hace la función.
- ArrayToFile: se programa la matriz del archivo.
  • Callback Borrar y Borrar2:
- Switch: ClearStripChart (borra la gráfica).
- Switch: DeleteGraphPlot (borra la gráfica 2).
  • Callback Mostrar: se utiliza un "if" y un "for".
- GetCtrlVal: para seleccionar que comando cambia el color de la curva.
- GetCtrlVal: para seleccionar que comando representa la curva que se debe de mostrar.
- FileToArray: para cargar los datos de una hoja de datos a la gráfica.
- PlotY: para permitir cambiar de color a la curva.
  • Callback Representar y Volver:
- Switch: DisplayPanel (panelHandle2). // Abre el segundo panel
- Switch: HidePanel (panelHandle2). // Cierra el segundo panel y vuelve al primero

Resultado de la interfase

Primer panel:

Imagen:7vpd.jpg


Representación de datos en el segundo panel:

Imagen:8vpd.jpg


Archivo de la práctica: Media:Practica 2 - M18347.rar

Herramientas personales