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

Trabajo Final: Simulación de caudal en un depósito

1. Introducción:

En este trabajo se realizará una interface hombre-máquina mediante el programa TIA Portal. Se va a simular el caudal de un depósito industrial y los distintos parámetros que influyen en su funcionamiento, como son:

  • Consola estándar: comando "On", comando "Off", botón de emergencia y botón de rearme.
  • Control manual de bomba: comando "On bomba" y comando "Off bomba" (además de un control manual también funcionará de forma automática).
  • Control manual de válvula: interruptor de "On/Off" (la válvula solo se activa de forma manual).
  • Nivel máximo del depósito: se puede regular la capacidad máxima.
  • Nivel mínimo del depósito: nivel a partir del cual la bomba se activa automáticamente evitando que se vacíe completamente el depósito.


2. Programación:

Para realizar el ejercicio se elige: SIMATIC S7-300 CPU 312 (CPU de entrada para aplicaciones de pequeña escala con requisitos moderados en la velocidad de procesamiento). Para conseguir la simulación del caudal se ha configurado la siguiente programación lógica:

- Consola Standard:

Imagen:10vpd.png
En estos segmentos se basa el control de la consola estándar:
  • Segmento 1: control de encendido automático de la bomba.
  • Segmento 2: ejecución del rearme.
  • Segmento 3: bombilla de "funcionamiento".
  • Segmento 4: bombilla en "stop" (cuando ninguna de las dos bombillas están encendidas el programa está en stand by).

- Caudal de la bomba:

El caudal de la bomba tiene una forma similar a la siguiente:
Imagen:13vpd.png
Para conseguir una señal de este tipo se utilizan estos dos temporizadores:
  • Temporizador S_ODT: el temporizador continúa en marcha con el valor indicado en la entrada TV mientras que el estado de señal en la entrada S sea positivo. El estado de señal en la salida Q será "1" si el tiempo ha transcurrido sin que se produjeran errores y si el estado de señal en la entrada S es "1". Si el estado de señal en la entrada S cambia de "1" a "0" mientras está en marcha el temporizador, éste se para. En este caso, el estado de señal en la salida Q será "0".
El temporizador se pone a 0 si la entrada de desactivación R del temporizador se pone a "1" mientras funciona el temporizador. El valor de temporización y la base de tiempo se ponen a 0. Entonces el estado de señal en la salida Q es "0". El temporizador también se pone a 0 si en la entrada de desactivación R el valor es "1", mientras el temporizador no está en marcha y el RLO en la entrada S es "1".
  • Temporizador S_PEXT: produciéndose un cambio de señal, el temporizador continúa en marcha durante el tiempo predeterminado (indicado en la entrada TV), aunque el estado de señal en la entrada S se ponga a "0" antes de haber transcurrido el intervalo de tiempo. El estado de señal en la salida Q es "1" mientras el temporizador esté en marcha.
El temporizador vuelve a arrancar con el valor de temporización predeterminado si el estado de señal en la entrada S cambia de "0" a "1" mientras está en marcha el temporizador. El temporizador se pone a 0 si la entrada de desactivación R del temporizador se pone a "1" mientras el temporizador está funcionando. El valor de temporización actual y la base de tiempo se ponen a 0.
Al combinar ambos temporizadores se consigue una señal como la mostrada en la figura anterior.
Imagen:12vpd.jpg
De esta manera y viendo los valores seleccionados en TV de los temporizadores (1 y 2), cada 4 segundos aumentará un valor de 1 el nivel del depósito.

- Caudal de la válvula:

Para representar el caudal de la bomba, se obtiene el caudal de la válvula.
Imagen:14vpd.png
Con los valores seleccionados en TV de los temporizadores (3 y 4), cada 6 segundos disminuirá un valor de 1 el nivel del depósito.

- Encendido de la bomba:

La activación de la bomba puede ser manual y automática.
- Para la activación manual es necesario que el programa esté en "modo On" y pulsar al botón "On bomba".
- Para que la bomba funcione de forma automática se deben cumplir las condiciones de que el nivel del depósito sea menor o igual al valor mínimo indicado. Así, la bomba estará activa hasta el llenado del depósito y después se desactivará. No volverá a funcionar hasta que el nivel del depósito vuelva a ser igual valor mínimo indicado.
Imagen:15vpd.png

- Encendido de la válvula:

La activación/desactivación de la válvula se hará de manera manual.
Imagen:16vpd.png

- Nivel del depósito:

Para conocer el nivel del depósito se utiliza un contador tipo S_CUD en el que se asigna su variable CU a la señal obtenida del caudal de la bomba y su variable CD a la señal obtenida del caudal de la válvula.
Imagen:17vpd.png

- Estado del depósito:

Para controlar el encendido y parada automática de la bomba se utilizan dos comparadores:
- Para contrastar si el depósito está completamente lleno.
- Para contrastar si el depósito alcanza el nivel mínimo indicado.
Imagen:18vpd.png

- Control del volumen máximo y mínimo del depósito:

Para indicar el valor máximo y mínimo del depósito se utilizan dos contadores S_CUD. Sus variables CU y CD se asignarán cada una de ellas a un botón para indicar el valor que toma cada una de las variables.
Imagen:19vpd.png


3. Tabla de variables estándar:

Las variables que se han declarado para la formación de los segmentos lógicos son las siguientes:
Imagen:21vpd.png


4. Interface Hombre-Máquina:

Para la representación se utiliza un HMI de 10". La interface está compuesta por distintas ventanas de fácil acceso entre sí, siendo:
- Ventana de inicio: con tres comandos que dan acceso a las siguientes ventanas:
  1. Comando "Configuration": acceso a la ventana de configuración del volumen del depósito.
  2. Comando "Start": acceso a la ventana con la simulación del depósito.
  3. Comando "Help": acceso a la ventana de ayuda.
Imagen:22vpd.png


- Ventana de "Volumen del depósito": se introduce el nivel máximo y mínimo de caudal que alcanza el depósito.
Imagen:23vpd.png


- Ventana "start": aparece la simulación del depósito con los siguientes sistemas:
  1. Consola Standard.
  2. Control manual de la bomba.
  3. Control manual de la válvula.
Imagen:20vpd.png


- Ventana de "Help": muestra una breve explicación ayudativa sobre el funcionamiento del programa.
Imagen:25vpd.png


- Ventana de "Evolución del nivel del depósito": aparece una gráfica que representa la evolución del caudal del depósito en el tiempo.
Acceso desde la ventana "start" a partir del comando de "gráfica".
Imagen:24vpd.png


5. Simulación:

A continuación, se muestra la simulación del funcionamiento del sistema y como se llenaría el depósito de forma correcta con el uso de la bomba y la válvula. Además, aparece un sistema de control por el que al pulsar el botón de emergencia, es necesario que el rearme sea realizado por el técnico, ya que le pedirá el nombre de usuario (tecnico) y contraseña (0000).
HMI


Archivo del trabajo: Media:Trabajo Final_-_M18347.rar

Herramientas personales