Práctica 5

Anuncio
LABORATORIO DE CONTROL POR COMPUTADOR.
4o CURSO INGENIERÍA DE TELECOMUNICACIÓN.
PRÁCTICA 5: LABVIEW-Bibliotecas de funciones de
enlace dinámico(DLL). Aplicación a un PID.
1.
Objetivos
Esta práctica tiene como objetivo aprender a crear DLL’s (bibliotecas de funciones
de enlace dinámico), y a hacer uso de ellas en LabView.
2.
Creación de una DLL
La DLL es una biblioteca de funciones de enlace dinámico. Crearemos una dll usando
lenguaje C. Serán necesarios los siguientes archivos:
cpcdll.def: En él se definen las funciones que va a exportar la dll para que
puedan ser usadas por los programas que la carguen.
cpcdll.h: En él se incluirán los prototipos de las funciones que componen la
biblioteca. En el prototipo de las funciones incluiremos la palabra WINAPI
para indicar al compilador el método de llamada a las funciones llevado a cabo.
cpcdll.cpp: Se definen las funciones que han sido declaradas en cpcdll.h.
3.
Ejemplo de DLL
A continuación se van a mostrar los tres ficheros correspondientes a una dll que
contiene las funciones suma y resta de dos parámetros. Tanto para la suma como
para la resta se han creado dos funciones. En una el paso de parámetros es por
valor, y en la otra el paso de parámetros es por referencia, por lo que se hará uso de
punteros.
© mlm 2008
A continuación se muestra el contenido del archivo cpcdll.def
;-------------------------------------;
; Nombre del Fichero:cpcdll.DEF
;
;-------------------------------------LIBRARY CPCDLL
DESCRIPTION ’Ejemplo de Creacion de una DLL’
EXPORTS
Sumar
Restar
Sumar_Ref
Restar_Ref
@1
@2
@3
@4
Del mismo modo, se adjunta seguidamente el contenido del archivo cpcdll.h
/* Nombre del fichero:cpcdll.h*/
/* Funciones prototipo */
#ifdef __cplusplus /* si los ficheros fuente son .cpp*/
extern "C" {
#endif
double WINAPI Sumar(double Param1, double Param2);
double WINAPI Restar(double Param1, double Param2);
void WINAPI Sumar_Ref(double *Param1,double *Param2, double *Suma);
void WINAPI Restar_Ref(double *Param1,double *Param2, double *Resta);
#ifdef __cplusplus /*si el compilador es C++ */
}
#endif
Y por último el archivo cpcdll.cpp
//-------------------------------------------------------------// Nombre del fichero: CPCDLL.CPP
//
//-------------------------------------------------------------#include <windows.h>
#include "cpcdll.h"
/* Funcion DllMain es llamada por Windows no por el usuario*/
BOOL WINAPI DllMain(HANDLE hModule, DWORD dwReason, LPVOID
lpReserved) {
switch(dwReason)
{
case DLL_PROCESS_ATTACH: break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH: break;
}
return TRUE; //DLL_PROCESS_ATTACH satisfactorio
}
© mlm 2008
/*Funcion Sumar con paso de parametros por Valor*/
double WINAPI Sumar(double Param1,double Param2)
{
return(Param1+Param2);
}
/*Funcion Restar con paso de parametros por Valor */
double WINAPI Restar(double Param1,double Param2)
{
return(Param1-Param2);
}
/*Funcion Sumar con paso de parametros por Referencia*/
void WINAPI Sumar_Ref(double *Param1,double *Param2, double *Suma)
{
*Suma=(*Param1)+(*Param2);
}
/*Funcion Restar con paso de parametros por Referencia*/
void WINAPI Restar_Ref(double *Param1,double *Param2,
double*Resta)
{
*Resta=(*Param1)-(*Param2);
}
4.
Uso de la DLL en LabVIEW
En el siguiente modelo de labVIEW hemos incluido 2 controles y 2 indicadores
numéricos. Si se observa el diagrama de conexiones, se verá que se conectan a un
bloque que es el que realiza la llamada a las dll’s.
Figura 1: Interfaz y Diagrama
Si pulsamos 2 veces sobre dicho bloque aparecerá un menú para configurar qué dll se
va a cargar, ası́ como qué función se va exportar y cuál es su prototipo (ver figuras
2 y 3). Para ello habrá que declarar los tipos de los distintos parámetros de entrada
© mlm 2008
y de salida de la función, ası́ como si el paso de los mismos se hace por valor o por
referencia.
Figura 2: Menú de configuración. Paso de parámetros por valor
Figura 3: Paso de parámetros por referencia
© mlm 2008
5.
Desarrollo de la práctica
Se pide:
1. Añadir a la biblioteca de funciones proporcionada una función que contenga un
controlador PI, al cual se le han de pasar los valores Kp, Ki, el valor del error
y ha de devolver la señal de control.
2. Sustituir el PID de la practica 2 por el bloque de llamada a la dll. Configurar
dicho bloque para que llame a la función PI y se comporte como el bloque de
control.
3. Implementar un método de anti-Wind Up.
Anti-Wind Up
Con el PID básico implementado hay que realizar el siguiente experimento.
Introducir una referencia de velocidad inalcanzable (el motor satura)
Usar el freno magnético para introducir una perturbación.
Llevar la referencia hasta un valor normal de funcionamiento.
Tras realizar este experimento se observa un fenómeno de Wind Up.
Se pretende implementar un PID (PI) que tenga en cuenta la aparición del fenómeno
de wind up como consecuencia de la saturación del motor y de la existencia de un
término integral en el controlador. Una forma de evitar este efecto es limitar la salida,
otra es solo integrar para errores pequeños. Un esquema práctico de antwindup es
el siguiente, donde se mide la salida del sistema (y) y la señal enviada al actuador
(u):
Figura 4: Interfaz y Diagrama
© mlm 2008
Descargar