Documente Academic
Documente Profesional
Documente Cultură
DE SISTEMAS Y AUTOMTICA
ESCUELA TCNICA SUPERIOR DE INGENIEROS E.S.I.
UNIVERSIDAD DE SEVILLA
PROYECTO FIN DE CARRERA
SISTEMA
GESTIN DOCUMENTAL
TRAVS DE INTERNET
DE
INGENIERA DE TELECOMUNICACIN
NDICE
DEL
PROYECTO "SISTEMA
1. Anlisis de Antecedentes............................................................................................. 6
1.1. Bases de Datos..................................................................................................... 6
1.1.1. MySQL........................................................................................................... 6
1.1.2. PHP............................................................................................................... 9
1.1.3. HTML.......................................................................................................... 10
1.2. Mtodos Educativos........................................................................................... 11
1.2.1. Matlab......................................................................................................... 12
1.2.2. Microsoft Visual Studio .NET.................................................................... 18
2. Anlisis de Factibilidad............................................................................................ 21
3. Objetivos del Proyecto.............................................................................................. 22
3.1. Actualizacin Automtica de Bases de Datos.................................................. 22
3.2. Requisitos Previos para la Actualizacin Automtica.................................... 22
3.2.1. MySQL Server............................................................................................ 23
3.2.2. MySQL Control Center.............................................................................. 26
3.2.3. Apache Web Server.................................................................................... 27
3.2.4. PHP............................................................................................................ 29
3.2.5. Groupweb................................................................................................... 33
3.2.5.1. Copia Local del Sitio Web................................................................... 34
3.2.5.2. Restauracin de la Base de Datos..................................................... 34
3.2.5.2.1. Introduccin al Comando "mysqldump".................................... 34
3.2.5.2.2. Restauracin de la Base de Datos a Travs de Mysqldump..... 38
3.2.5.3. Estructura del Sitio Web.................................................................... 40
3.2.5.4. Relacin entre las Tablas de la Base de Datos..................................40
3.3. Control Remoto de Procesos en Tiempo Real Mediante Matlab/Tcp/Ip........45
3.4. Requisitos Previos para el Control Remoto..................................................... 45
3.4.1. Microsoft Visual .NET................................................................................ 45
3.4.2. Matlab 6.5.................................................................................................. 46
4. Metodologa.............................................................................................................. 47
4.1. Actualizacin Automtica de Bases de Datos................................................... 47
4.1.1. Paso 1 Validacin.................................................................................... 49
4.1.2. Paso 2 Seleccin de ficheros e Insercin de Rutas................................. 50
4.1.3. Paso 3 Seleccin de Campos de la Actualizacin................................... 53
4.1.4. Paso 4 Complecin de Entradas para Actualizacin............................ 55
4.1.5. Fichero de Inclusin General..................................................................... 60
4.2. Control Remoto de Procesos en Tiempo Real mediante Matlab/TCP/IP....... 61
4.2.1. Estructura General del Sistema de Control Remoto................................ 63
4.2.2. Servigar..................................................................................................... 64
4.2.2.1. Interfaz Web....................................................................................... 64
4.2.2.2. Aplicacin Servidor en Servigar........................................................ 67
4.2.3. Neoxite....................................................................................................... 69
4.2.3.1. Bloque Tunning (S-Function)............................................................. 69
4.2.3.2. Aplicacin Matlab............................................................................... 71
3
1 A NLISIS
1.1 B ASES
DE
DE
A NTECEDENTES .
D ATOS .
1.1.1 M YSQL.
MySQL es un sistema de gestin de base de datos, multihilo y multiusuario.
MySQL es un sistema de administracin de bases de datos. Una base de datos es una
coleccin estructurada de datos. Esta puede ser desde una simple lista de compras a una
galera de pinturas hasta el vasto volumen de informacin en un red corporativa. Para
agregar, acceder a y procesar datos guardados en un computador, se necesita un
administrador como MySQL Server. Dado que los ordenadores son muy buenos manejando
Concurrencia: Mientras MySQL est leyendo los datos de una tabla, ste la
bloquea, de tal manera que nadie ms puede escribir en ella, aunque s pueden
leerla. Cuando MySQL est actualizando o eliminando filas de una tabla, ste la
bloquea, y por lo tanto nadie puede al menos leerla.
una
gran
cantidad
de
entrada/salida
en
el
disco.
Esto
puede
alentar
1.1.2 PHP.
PHP es un lenguaje de programacin usado generalmente para la creacin de
contenidos de sitios web. El nombre es el acrnimo recursivo de "PHP: Hypertext
Preprocessor" (inicialmente "PHP Tools" o "Personal Home Page Tools") y se trata de un
lenguaje interpretado usado para la creacin de aplicaciones para servidores, o creacin de
contenido dinmico para sitios web.
La interpretacin del cdigo en lenguaje PHP y su ejecucin se da en el servidor, en el
cual se encuentra almacenado el script, y el cliente slo recibe el resultado de la ejecucin.
Cuando el cliente hace una peticin al servidor para que le enve una pgina web, generada
por un script PHP, el servidor ejecuta el intrprete de PHP, el cual procesa el script
solicitado que generar el contenido de manera dinmica, pudiendo modificar el contenido a
enviar, y regresa el resultado al servidor, el cual se encarga de regresrselo al cliente.
PHP permite la conexin a diferentes tipos de servidores de bases de datos, entre ellos
el que interesa para el presente proyecto (MySQL).
PHP tambin tiene la capacidad de ser ejecutado en distintos sistemas operativos, entre
los que se incluyen Windows y Linux (los dos sistemas operativos sobre los que se prueba
el script realizado aqu).
Los principales usos de PHP son los siguientes:
Las ventajes de PHP son que se trata de un lenguaje multiplataforma, posee capacidad
de conexin con la mayora de los manejadores de bases de datos que se utilizan en la
actualidad, permite leer y manipular datos desde diversas fuentes (incluyendo los datos que
pueden ingresar los usuarios desde formularios HTML), posee capacidad de expandir su
potencial utilizando la enorme cantidad de mdulos (tambin conocidos como "extensiones")
1.1.3 HTML.
HTML (acrnimo ingls de "HyperText Markup Language") es un lenguaje de marcacin
diseado para estructurar textos y presentarlos en forma de hipertexto, que es el formato
estndar de las pginas web. Gracias a Internet y a los navegadores del tipo Internet
Explorer, Opera, Firefox o Netscape, el HTML se ha convertido en uno de los formatos ms
populares que existen para la construccin de documentos y tambin de los ms fciles de
aprender.
HTML es una aplicacin de SGML conforme al estndar internacional ISO 8879. XHTML
es una reformulacin de HTML 4 como aplicacin XML 1.0, y que supone la base para la
evolucin estable de este lenguaje. Adems, XHTML permite la compatibilidad con los
agentes de usuario que ya admitan HTML 4 siguiendo un conjunto de reglas.
El lenguaje HTML puede ser creado y editado con cualquier editor de textos bsico,
como puede ser el Bloc de Notas de Windows (o Notepad), o cualquier otro editor que
admita texto sin formato como GNU Emacs, Microsoft Wordpad, TextPad, Vim, Notepad++,
etc.
Existen adems, otros programas para la realizacin de sitios Web o edicin de cdigo
HTML, como por ejemplo Microsoft FrontPage, el cual tiene un formato bsico parecido al
resto de los programas de Office. Tambin existe el famoso software de Macromedia (que
adquiri la empresa Adobe) llamado Dreamweaver, siendo uno de los ms utilizados en el
mbito de diseo y programacin Web. Estos programas se les conoce como editores
WYSIWYG o What You See Is What You Get (en espaol: lo que ves es lo que obtienes).
Esto significa que son editores que van mostrando el resultado de lo que se est editando
en tiempo real a medida que se va desarrollando el documento. Ahora bien, esto no significa
una manera distinta de realizar sitios web, sino que una forma un tanto ms simple ya que
estos programas, adems de tener la opcin de trabajar con la vista preliminar, tiene su
propia seccin HTML la cual va generando todo el cdigo a medida que se va trabajando.
Combinar estos dos mtodos resulta muy interesante, ya que de alguna manera se
10
No pueden abrirse y cerrarse, como <hr> que se vera en su navegador como una
lnea horizontal (aunque en el nuevo estndar XHTML 1.0 se escribe de la forma <hr
/>, cerrndose de forma correcta en este nuevo estndar, es decir, que para cerrar
una etiqueta que no tiene cierre en HTML, se antepone una barra inclinada al signo
mayor que).
11
controladores
1.2.1 M ATLAB .
Matlab es la abreviatura de "Matrix Laboratory" (laboratorio de matrices). Es un programa
de matemticas creado por "The MathWorks" en 1984. Est disponible para las plataformas
Unix, Windows y Mac.
Es un software muy usado en universidades, centros de investigacin y por ingenieros.
En los ltimos aos ha incluido muchas ms capacidades, como la de programar
directamente procesadores digitales de seales, crear cdigo VHDL y otras.
Matlab es un programa de clculo numrico, orientado a matrices y vectores. Por tanto,
desde el principio hay que pensar que todo lo que se pretenda hacer con l, ser mucho
ms rpido y efectivo si se piensa en trminos de matrices y vectores.
Posee una interfaz fcil de usar: su ventana principal se divide en tres partes principales:
12
Control
System
Toolbox:
este
paquete
proporciona
herramientas
para
13
14
ficheros .M que cubren muchos temas, entre los que se incluyen optimizacin,
ecuaciones diferenciales ordinarias y parciales, cuadratura y estadstica. Esta
'toolbox' tambin incorpora nueva funciones de gran inters para tareas especficas
como resolucin de problemas de valores de contorno, realizacin de cuadraturas
adaptativas unidimensional y multidimensional, ajuste de curvas y superficies y
acceder directamente a los algoritmos LAPACK para resolucin de ecuaciones
lineales.
15
SIMULINK Real Time Workshop: Real Time Workshop es una extensin de las
16
17
estandarizado por Microsoft como parte de su plataforma .NET, que despus fue
aprobado como un estndar por la ECMA e ISO.
Su sintaxis bsica deriva de C/C++ y utiliza el modelo de objetos de la plataforma
.NET, el cual es similar al de Java aunque incluye mejoras derivadas de otros
lenguajes (ms notablemente de Delphi y Java). C# fue diseado para combinar el
18
19
20
2 A NLISIS
DE
FACTIBILIDAD .
En la parte referente al control remoto de una planta a travs de internet mediante el uso
de Matlab y una interfaz web, la factilidad es limitada, ya que Matlab no permite el
establecimiento de sockets de forma sencilla. Si se intenta abrir un socket con Java, el hilo
principal del programa queda bloqueado, impidiendo el correcto control de la planta. Si se
intenta utilizar Matlab Server, entonces se permiten conexiones sobre la planta a travs de
internet, pero cada conexin se realiza en un hilo distinto del programa, lo que implicara que
el control no se estara llevando a cabo realmente. No obstante, haciendo uso de las
funciones S, que permiten el uso de funciones programadas en C puede encontrarse una
solucin viable, haciendo posible la factibilidad de la otra parte del presente proyecto.
21
3 O BJETIVOS
DEL
DE
P ROYECTO .
B ASES
DE
D ATOS .
PARA LA
A CTUALIZACIN A UTOMTICA .
22
SQL.
Apache Web Server: servidor web para poder visualizar la pgina web bajo
pruebas.
web.
El
usuario
puede
instalar
cualquier
otra
versin.
La
instalacin
no
variar
.tar.gz
apropiado.
3. Realizar un enlace simblico al directorio creado por la descompresin del punto
2:
23
24
Ahora lo que se va a hacer es automatizar el arranque del servidor con el arranque del
sistema. Para ello, se copiar el script de manejo del servidor en la ubicacin donde se
encuentren los ficheros de arranque del sistema. Esto se consigue con la siguiente orden:
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d
Este script se puede utilizar tanto para arrancar el servidor en el inicio del sistema como
para pararlo al apagar el ordenador. Para ello, se ultimarn estas dos operaciones creando
unos enlaces simblicos, necesarios para el script:
# cd /etc/rc2.d
# ln -s /etc/init.d/mysql.server S20mysql
# cd /etc/rc0.d
# ln -s /etc/init.d/mysql.server K20mysql
Es conveniente ejecutar el script de inicio y apagado del servidor como el usuario "mysql"
y no como el usuario "root" por razones de seguridad. A tal efecto, se modificar el fichero
"mysql.server" que se ha copiado en "/etc/init.d/". Se ha de buscar la siguiente lnea:
$bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file &
25
El
usuario
puede
instalar
cualquier
otra
versin.
La
instalacin
no
variar
significativamente.
Los pasos a seguir para instalacin de MySQL Control Center a travs de un terminal
son los siguientes:
1. Descomprimir el archivo que contiene MySQL Control Center en el directorio
"/usr/local/":
# cd /usr/local
# tar -xzf /directorio/mysqlcc-0.9.4-linux-glibc23.tar.gz
.tar.gz
directorio apropiado.
2. Realizar un enlace simblico al directorio creado por la descompresin del punto
2:
# ln -s mysqlcc-0.9.4-linux-glibc23/ mysqlcc
4. Aparecer una ventana con el ttulo "MySQLCC Register Server". En primera instancia,
nos bastar rellenar los campos existentes con los siguientes datos:
Name localhost
NOTA: Aqu se debe poner el nombre que se quiere dar a la conexin.
26
5. Pulsar el botn "Add" (o "Aadir"). Acto seguido, aparecer una ventana, que es la
ventana principal de MySQL Control Center. En la parte izquierda aparece un men
titulado "MySQL Servers". En su interior, aparece "localhost", que es la conexin actual. Si
se despliega, aparecern tres submens, a saber: "Databases", "Server
Administration"
Administration"
Administration"
sern tiles ms
27
El
usuario
puede
instalar
cualquier
otra
versin.
La
instalacin
no
variar
significativamente. En este caso se tendrn que compilar las fuentes del servidor Apache.
Los pasos a seguir para instalacin de Apache Server a travs de un terminal son los
siguientes:
1. Descomprimir el archivo que contiene Apache Server en el directorio
"/usr/local/src/":
# cd /usr/local/src
# tar -zxf /directorio/httpd-2.0.55.tar.gz
.tar.gz
apropiado.
2. Configurar los fuentes para que la compilacin se adapte al sistema y las
necesidades:
# cd httpd-2.0.55
# ./configure --prefix=/usr/local/apache2 --enable-so --with-mpm=prefork
NOTA: con esto se compila Apache Server con las opciones por defecto. La
opcin "prefix" indica dnde se va a instalar el servidor Apache. La opcin
"enable-so" sirve para realizar la carga dinmica de mdulos. Es importante
poner esta opcin para despus cargar dinmicamente php. "with-mpm" es una
opcin necesaria para un correcto funcionamiento con php.
3. Compilar los fuentes:
# make
28
Si la instalacin ha tenido xito, debera mostrarse una pgina con el siguiente texto al
comienzo:
"If you can see this, it means that the installation of the Apache web server software on this system was successful.
You may now add content to this directory and replace this page."
Para proseguir con la siguiente instalacin, que corresponde a php, es conveniente parar
el servidor con la siguiente orden:
# ./apachectl stop
Este script se puede utilizar tanto para arrancar el servidor en el inicio del sistema como
para pararlo al apagar el ordenador. Para ello, se ultimarn estas dos operaciones, creando
unos enlaces simblicos necesarios para el script:
# cd /etc/rc2.d
# ln -s /etc/init.d/apachectl S20apachectl
# cd /etc/rc0.d
# ln -s /etc/init.d/apachectl K20apachectl
sobre el instalador anterior y proceder con todos los pasos que vaya solicitando el mismo.
Se ofrecer, al igual que pasaba con MySQL Server iniciar este servidor como un servicio
del sistema. sta es la opcin recomendada.
3.2.4 PHP.
PHP es un lenguaje de programacin de pginas web que permite dotarlas de
dinamismo. Este lenguaje permite la comunicacin entre los navegadores y los servidores
que alojan las pginas web, permitiendo que aqullos soliciten determinados datos,
devolvindoselos ste.
29
El
usuario
puede
instalar
cualquier
otra
versin.
La
instalacin
no
variar
significativamente.
Los pasos a seguir para instalacin de php a travs de un terminal son los siguientes:
1. Descomprimir el archivo que contiene php en el directorio "/usr/local/src/":
# cd /usr/local/src
# tar -zxf /directorio/php-4.4.2.tar.gz
.tar.gz
apropiado.
2. Configurar las fuentes para su posterior instalacin:
# cd php-4.4.2
#./configure
--prefix=/usr/local/php4
--with-mysql=/usr/local/mysql
--with-
apxs2=/usr/local/apache2/bin/apxs --with-gettext[=DIR]
NOTA: con estas opciones se compilar php con las opciones por defecto.
"with-mysql" incluye el soporte para MySQL, por lo que se le indica el directorio
donde est instalado dicho servidor; "with-apxs2" compila el mdulo para
Apache Server 2, por lo que se le indica el directorio donde est instalado
dicha utilidad. Por ltimo, se indica tambin "with-gettext" porque la pgina del
grupo de control predictivo hace uso de este mdulo, por lo que, o bien se
incluye ahora, o bien se recompilara php ms adelante de nuevo.
3. Compilar php:
# make
4. Instalar php:
# make install
6. Hacer que Apache Server reconozca los ficheros con extensin .php. Para ello,
aadir en el fichero "/usr/local/apache2/conf/httpd.conf" la siguiente lnea:
30
31
'root',
32
3.2.5 G ROUPWEB .
La primera de las tareas a realizar es el mantenimiento, actualizacin y modificacin del
sitio web del grupo de control predictivo del departamento de sistemas y automtica de la
Escuela Superior de Ingenieros de Sevilla. Esta pgina es accesible desde la url:
http://nyquist.us.es/groupweb/index.php
Lo primero que se hizo fue una copia de la pgina web, ya que por razones de seguridad
no era conveniente la modificacin "in situ" de la pgina en el propio servidor. Esto se realiz
mediante una transferencia ftp. Posteriormente, hubo que configurar la pgina web para su
correcta visualizacin en el servidor configurado en el apartado 2 de la presente memoria.
El sitio web se encuentra comprimido en el siguiente fichero:
groupweb.rar
33
DEL
S ITIO WEB .
En primer lugar, para ser coherentes con las rutas utilizadas por el creador original del
sitio web, se crearon los siguientes directorios:
# mkdir var
# cd var
# mkdir www
# rar x groupweb.rar
Este sitio web hace uso de unas libreras de libre distribucin denominadas "phphtmllib".
Por ello, hay que realizar un enlace simblico al directorio "phphtmllib-2.4.1" que se encuentra
dentro del directorio creado en la descompresin anterior. Para ello, tecleamos lo siguiente:
# cd groupweb
# ln -s phphtmllib-2.4.1/ phphtmlib
Este paso es un requisito de una instalacin previa de dichas libreras, una especie de
variable de entorno sin la cual no funcionara correctamente la pgina web.
Otro paso a realizar es cambiar el directorio en el que Apache Server busca las pginas
web almacenadas. Por defecto, esta ruta es "/usr/local/apache2/htdocs/", y se debe cambiar a
"/var/www/". Para ello, se debe teclear lo siguiente:
# cd /usr/local/apache2/conf
# gedit httpd.conf
Buscamos
en
este
"/usr/local/apache2/htdocs""
fichero
la
lnea
que
contiene
el
texto
"DocumentRoot
3.2.5.2 R ESTAURACIN
3.2.5.2.1 INTRODUCCIN
DE LA
AL
B ASE
DE
D ATOS .
Para realizar una copia de seguridad de la base de datos existen varios comandos
especficos. Estos comandos son:
34
mysqlimport
mysqlhotcopy
mysqldump
backup table/restore table
flush table
lock table
El comando elegido para la copia de seguridad de la base de datos fue "mysqldump", tanto
por su simplicidad como por su eficacia.
El comando "mysqldump" del sistema gestor de la base de datos MySQL sirve para
hacer copias de seguridad. Este comando permite hacer la copia de seguridad de una o
mltiples bases de datos. Adems, permite que estas copias de seguridad se puedan
restaurar en distintos tipos de gestores de bases de datos, sin la necesidad de que se trate
de un gestor de MySQL. Esto lo consigue creando unos ficheros que contienen todas las
sentencias SQL necesarias para poder restaurar la tabla, que incluyen desde la sentencia
de creacin de la tabla hasta una sentencia "insert" por cada uno de los registros que
forman parte de la misma.
El comando dispone de una amplia variedad de opciones que nos permitir realizar la
copia de la forma ms conveniente para el propsito de la misma. Para poder restaurar la
copia de seguridad, bastar con ejecutar todas las sentencias SQL que se encuentran
dentro del fichero, bien desde la lnea de comandos de MySQL o desde la pantalla de
creacin de sentencias SQL de cualquier entorno grfico como puede ser MySQL Control
Center.
Las limitaciones de la restauracin dependern de las opciones que se hayan
especificado a la hora de hacer la copia de seguridad. Por ejemplo, si se incluye la opcin
"--add-drop-table" al hacer la copia de seguridad, se podrn restaurar tablas que existen
actualmente en el servidor (borrndolas primero). Por lo que es necesario estudiar primero
los procedimientos que se utilizarn tanto en la copia como en la restauracin, para que todo
se haga de la forma correcta.
La sintaxis de este comando es la siguiente:
mysqldump -u [usuario] -p [password] [nombre_base_datos] > [backup.sql]
Hay que tener cuidado al realizar una copia de la base de datos, puesto que alguien
puede estar accediendo a la informacin y estar cambindola. Para ello, se puede "evitar"
un acceso inoportuno que pueda dejar el fichero volcado en un estado inconsistente a travs
de varias opciones, una de las cuales podra ser "--single-transaction", como se indica en el
siguiente ejemplo:
35
--add-locks:
tabla.
-A, --all-databases:
databases
seleccionando todas.
-a,--all:
--allow-keywords:
-c, --complete-insert:
-B, --databases:
tablas. El nombre de los argumentos se refiere a los nombres de las bases de datos.
Se incluir "USE db_name" en la salida antes de cada base de datos.
--delayed:
-e, --extended-insert:
-#, --debug[=option_string]:
--help:
--fields-terminated-by...;
escaped-by=...; --lines-terminated-by=...:
--fields-optionally-enclosed-by=...;
--fields-
-F, --flush-logs:
-f, --force:
-h, --host=...:
defecto es localhost.
36
LOCAL"
"/*!40000
servidor MySQL 4.0 se realice ms rpido debido a que los ndices se crearn
despus de que todos los datos hayan sido restaurados.
-n, --no-create-db:
db_name;".
seleccionada.
-t, --no-create-info:
"CREATE TABLE").
-d, --no-data:
opcin sirve para crear una copia solamente de la estructura de la base de datos.
--opt:
-P, --port=...:
utilizar.
-q, --quick:
'''.
37
-r, --result-file=...:
debera utilizar en MS-DOS, porque previene la conversin de nueva lnea ' \n' en
nueva lnea y retorno de carro '\n\r'.
--single-transaction:
servidor. Es muy til con las tablas InnoDB y el nivel de transaccin "READ_COMMITTED",
porque en este modo realizar la copia de seguridad en un estado consistente sin
necesidad de bloquear las aplicaciones. Consultar el manual para ms detalles.
-S /path/to/socket, --socket=/path/to/socket:
--tables:
-T, --tab=path-to-some-directory:
-u nombre_usuario, --user=nombre_usuario:
-v, --verbose:
(ms lento).
-X, --xml:
-x, --first-slave:
3.2.5.2.2 R ESTAURACIN
DE LA
B ASE
DE
D ATOS
TRAVS
DE
M YSQLDUMP .
Del anlisis de los ficheros del sitio web del grupo de control predictivo se obtuvieron los
datos necesarios para el acceso local a la base de datos. Se procedi a la copia de la base
de datos del sitio con el siguiente comando:
38
Ntese que con esta forma de ejecucin del comando no se tiene en cuenta la
posibilidad de que ya exista una base de datos con ese mismo nombre en el lugar de
destino. Para solucionar este problema en caso de existencia de una base de datos con el
mismo nombre que la que se intenta restaurar existen distintas opciones: 1) borrar
manualmente la base de datos antes de restaurar la copia por medio de una herramienta de
administracin como MySQL Control Center, 2) borrar manualmente la base de datos a
travs de la lnea de comandos de MySQL o mediante un script, 3) tener en cuenta al
ejecutar "mysqldump" que existe esta base de datos y aadir la opcin "--opt" o "--add-droptable"
para que al recuperar la base de datos a partir de la copia se borre en primer lugar la
Una vez abierto MySQL Control Center, pulsar con el botn derecho sobre "User
Administration"
y escoger la opcin "New User". Los datos a insertar en cada uno de los campos
Con esto ya se ha creado el nuevo usuario en la base de datos. Podra pensarse que se
podra recuperar la base de datos empleando a otro usuario. En realidad podra hacerse,
pero entonces habra que modificar los datos almacenados en los ficheros de la pgina para
que se pudiera realizar la conexin con la base de datos, ya que sta se encontrara
orientada para el usuario original de MySQL. Por simplicidad, debido a que despus habr
que restaurarla en el servidor "nyquist.us.es", es preferible dar de alta a este nuevo usuario
con la misma configuracin que tena en el servidor nyquist.us.es en lugar de realizar las
modificaciones oportunas en los ficheros del sitio.
39
3.2.5.3 E STRUCTURA
DEL
S ITIO WEB.
El sitio web est desarrollado haciendo uso de las libreras "phphtmllib". Para la creacin
de cada pgina se ha usado una plantilla de ejemplo que traen dichas libreras, denominada
"MyLayoutPage". Esta plantilla genera una pgina web con 4 zonas de contenido bien
diferenciadas: el encabezado, el pie, el men de la izquierda y el contenido de la pgina.
Modificando el contenido de cada zona a travs de mtodos especficos heredados de la
clase padre se construye cada una de las pginas.
3.2.5.4 R ELACIN
ENTRE LAS
TABLAS
DE LA
B ASE
DE
D ATOS .
Pfcs: contiene los proyectos fin de carrera de alumnos que han sido tutelados por
miembros del grupo.
40
People: almacena los datos de todas las personas pertenecientes al grupo que han
sido dadas de alta en el sistema de la pgina web.
Sent: tabla con un registro por cada publicacin enviada a una direccin de correo
electrnico.
A continuacin se describir con ms detalle cada una de las tablas as como sus
respectivos campos de informacin.
Tabla "Books":
Esta tabla almacena en cada registro una publicacin en formato libro de un miembro del
grupo. Los campos que se han de rellenar son los siguientes:
Id: campo autoincremental, es la clave de la tabla y sirve para indexar los registros.
Year: ao de publicacin.
Code: puede ser 1 2 dependiendo del tipo de publicacin (libro de actas o libro de
texto, respectivamente).
Tabla "Journals":
Esta tabla almacena en cada registro un artculo de revista de un miembro del grupo. Los
campos que se han de rellenar son los siguientes:
Id: campo autoincremental, es la clave de la tabla y sirve para indexar los registros.
41
Journal: revista.
Year: ao de publicacin.
Tabla "Congress":
Esta tabla almacena en cada registro una ponencia de congreso de un miembro del
grupo. Los campos que se han de rellenar son los siguientes:
Id: campo autoincremental, es la clave de la tabla y sirve para indexar los registros.
Pages: pginas del libro de actas del congreso en que se encuentra publicada la
ponencia.
42
Id: campo autoincremental, es la clave de la tabla y sirve para indexar los registros.
Tabla "Phds":
Esta tabla almacena en cada registro una tesis de un miembro del grupo. Los campos
que se han de rellenar son los siguientes:
Id: campo autoincremental, es la clave de la tabla y sirve para indexar los registros.
Tabla "Authors":
Esta tabla almacena tantas entradas por publicacin como autores tenga la misma, sea
del tipo que sea. Los campos que se han de rellenar son los siguientes:
Id: campo autoincremental, es la clave de la tabla y sirve para indexar los registros.
People: campo "id" de la tabla "people" para el autor en cuestin (si ste pertenece al
43
Jobcode: solamente se emplea si se trata de un pfc o un phd, con valor "a" en caso
de ser el autor de la publicacin o "s" en caso de ser un supervisor.
Tabla "People":
Esta tabla almacena en cada registro un miembro del grupo. Los campos que se han de
rellenar son los siguientes:
Id: campo autoincremental, es la clave de la tabla y sirve para indexar los registros.
Password: clave para entrar en el sitio web con el login citado anteriormente.
Tabla "Sent":
Esta tabla almacena en cada registro un artculo de revista de un miembro del grupo. Los
campos que se han de rellenar son los siguientes:
Id: campo autoincremental, es la clave de la tabla y sirve para indexar los registros.
44
DE
P ROCESO S
EN
PARA EL
C ONTROL R EMOTO .
45
46
4 M ETODOLOGA .
4.1 A CTUALIZACIN A UTOMTICA
DE
B ASES
DE
D ATOS .
actualizar los campos de la base de datos, as como la tabla que actualizar cada
fichero. Aqu tambin se introducirn las direcciones de las pginas webs que se
emplearn en la actualizacin, as como los directorios que contienen los
documentos a subir al servidor.
los caracteres que delimitan un campo de otro y los que separan una entrada de
otra. Tambin se mostrarn aqu las rutas especificadas en el paso anterior (tanto las
de pginas webs como los directorios) que sean vlidas y accesibles.
47
Validacin
Seleccin de ficheros de actualizacin
Insercin de rutas adicionales
Seleccin de campos de actualizacin
Complecin de entrada para actualizacin
Proceder con actualizacin
S
$lista_campos_adicionales:
adicionales (campos fictios necesarios para una actualizacin colateral). Por ejemplo,
el campo "autores", que no existe como tal en ninguna tabla, pero que se emplea
para actualizar colateralmente la tabla de autores de las publicaciones. Este array se
utilizar para mostrar los nombres de los campos adicionales en las listas
desplegables.
$tabla_campos_adicionales:
$var_campos_adicionales:
48
$lista_campos_undef:
utilizan para actualizar la base de datos en s, pero que son necesarios por alguna
razn. Por ejemplo, el campo "separador_campos", que es necesario para separar un
campo de otro dentro del fichero de actualizacin. Estos campos se distinguen de los
adicionales, adems, en que se conoce el campo que se va a actualizar, pero lo que
no se conoce es el valor.
$tabla_campos_undef:
utiliza para almacenar los nombres de las tablas en las que se utilizar este
parmetro. Por ejemplo, "separador_campos" se utiliza en todas las tablas, por lo que
se inserta "all" en este array en la posicin correspondiente.
$var_campos_undef:
$valores_campos_undef:
$desc_campos_undef:
lista desplegable del campo no definido. La razn de ser de este array y el anterior
es que normalmente los separadores son caracteres especiales, como nueva lnea
('\n') o tabulador ('\t'), que debido a una caracterstica de PHP se envan de forma
incorrecta al siguiente formulario (duplica las barras invertidas). Por ello, se enva un
entero que se utilizar en un array en el siguiente formulario para obtener el valor
correcto. Como mostrar el entero en la lista desplegable no ofrecera ninguna
informacin al usuario se introduce este array, que contiene una descripcin correcta
de cada uno de los campos no definidos.
49
DE FICHEROS E INSERCIN DE
R UTAS .
ficheros de texto que contienen los datos a partir de los cuales se actualizarn las
tablas de la base de datos y las tablas que stos actualizan.
50
las distintas direcciones web que complementarn a los ficheros indicados en el paso
anterior.
Formulario de insercin de rutas locales: el usuario insertar aqu las rutas que se
51
52
DE
C AMPOS
DE LA
A CTUALIZACIN .
La finalidad de este tercer paso es clara: el sistema necesita saber qu campos del
fichero de actualizacin facilitado se corresponden de forma directa con alguno de los
53
54
DE
E NTRADAS
PARA
A CTUALIZACIN .
El paso 4 se repite cclicamente, mostrando en pantalla las entradas que restan por
actualizar en la base de datos. Inicialmente se muestran todas las entradas procesadas a
partir de los ficheros de actualizaciones, divididas en los campos finales que actualizarn la
tabla correspondiente. En la primera iteracin de este paso, el sistema procede al anlisis de
todos los ficheros facilitados, y durante este largo proceso, se va mostrando en pantalla un
mensaje indicando la entrada del documento que se est analizando, ya que el usuario
podra pensar que el sistema queda colgado en un estado inconsistente (vase ilustracin
6).
Por cada entrada de los ficheros se muestra un cajn de campos editables, entre los que
se encuentran los siguientes elementos:
55
Fichero pdf que se subir al servidor: aqu se mostrarn el fichero pdf que mayor
56
57
58
59
4.1.5 FICHERO
DE INCLUSIN
G ENERAL .
$lista_campos_adicionales:
en las tablas de la base de datos pero que son necesarios porque a partir de ellos se
generarn otros que s se encuentran en stas.
$tabla_campos_adicionales:
$var_campos_adicionales:
$lista_campos_undef:
son necesarios para obtener campos existentes en la tabla, pero que s son
necesarios para procesar stos. A modo de ejemplo, un campo de este array es
separador_campos, el cual indica qu separador se utilizar en los ficheros de texto
para separar los campos contenidos.
$tabla_campos_undef:
$lista_campos_undef.
$var_campos_undef:
similar
$var_campos_adicionales
pero
referido
$lista_campos_undef.
$valores_campos_undef:
60
$desc_campos_undef:
DE
P ROCESO S
EN
TIEMPO R EAL
MEDIANTE
M ATLAB /TCP/IP.
61
62
DEL
S ISTEMA
DE
C ONTROL R EMOTO .
REMOTE PC
Web
Page
SERVIGAR
WWW
Server
NEOXITE
Server
Client
Ilustracin 10: Estructura general del sistema de control remoto
63
Neoxite: es el ordenador que se encarga del control del sistema. Ser el que
implemente la ejecucin del modelo en Simulink para el control del sistema, por lo
que consta de una aplicacin en Matlab para generar una representacin del modelo
y enviar sta junto con el modelo a la aplicacin servidor en Servigar. Esta aplicacin
en Matlab invoca una aplicacin cliente que enva ambos ficheros a la aplicacin
servidor en Servigar. Tambin implementa una aplicacin servidor que recoge los
datos enviados por Servigar cuando se modifiquen los valores de los parmetros.
Esta aplicacin servidora modifica el fichero de intercambio en consecuencia,
permitiendo que en la siguiente lectura del bloque de funcin S Simulink modifique
los valores de sus salidas.
4.2.2 S ERVIGAR .
4.2.2.1 INTERFAZ WEB .
La interfaz web se encuentra programada en ASP y Visual C#, debido a que se tena
pensado implementarla en un principio en el Benchmark 2 de la red de excelencia Hycon,
que se encarga del control remoto de un sistema hbrido (una plataforma solar con 4 placas
solares, un sistema de refrigeracin y una caldera), y se necesitaba implementar ActiveX
para poder realizar el control va OPC.
Como se puede observar en la siguiente imagen, la interfaz web es simple: muestra dos
cuadros de texto por cada parmetro modificable (uno con el valor actual y otro para insertar
el nuevo valor), y debajo de estos cuadros se sita una representacin grfica del
controlador implementado, para que los usuarios sepan si el controlador implementado es el
64
La parte de ASP es bien simple. No ocurre as con la parte de Visual C#. Lo primero que
se hace es comprobar que el usuario posee los permisos necesarios para proceder con la
modificacin de parmetros (para ello tiene que estar dado de alta en el sistema, es decir,
en la web, y tener reservado un periodo de prueba sobre la planta o bien ser el
administrador). Posteriormente, se comprueba la existencia del fichero de modelo de
Simulink as como de su representacin grfica.
El siguiente paso es la lectura del fichero "nombre.mdl" (donde "nombre" indica el
65
al
botn
"Change
Parameters"
se
encuentra
el
mtodo
66
EN
S ERVIGAR .
nombre.log: fichero de texto plano que contiene los valores iniciales de los
parmetros.
nombre.png: fichero de imagen que contiene una captura del modelo con la
67
68
Port Listening
IP Filter
EXIT
Process Received Message
COPY REQ.
MOD REQ.
Exit
ABORT
4.2.3 N EOXITE .
69
Entonces aparecer un bloque de Simulink de nombre tunning, con una entrada y diez
salidas. Ntese que el nombre de la funcin S que se especifica debe ser el de la dll. Si la dll
no se encuentra en el mismo directorio que el modelo de Simulink que la invoca, al intentar
ejecutar el modelo producir un error.
Los parmetros que se definen en las propiedades corresponden a los valores iniciales
de las salidas del bloque. Estos valores son los que posteriormente se modificarn a travs
de la interfaz web (se ha puesto del 1 al 10 por poner algn valor, pero el usuario deber
poner aqu las referencias iniciales que desea a la salida del bloque).
Por otro lado, tambin hay que tener en cuenta las distintas modificaciones de las
propiedades del modelo que hay que realizar previamente. Para que se genere el ejecutable
del modelo es necesario establecer la siguiente configuracin:
En ToolsReal-Time WorkshopOptions:
En la pestaa Solver:
Solver options:
70
En Target interface:
En la pestaa de la ventana de Simulink que muestra una lista desplegable hacia abajo y
que tiene seleccionada la opcin Normal, hay que seleccionar la opcin External.
Una vez creado el modelo de Simulink deseado para implementar el controlador, se ha
de compilar el modelo completo, y para ello se presiona en el botn Build All, que se
encuentra junto a la lista desplegable anterior.
Fin
Ilustracin 13: Flujo del script de Matlab para el sistema
de control remoto
71
ltimo,
el
programa
invoca
la
aplicacin
cliente
de
Neoxite
72
73
74
Port Listening
IP Filter
EXIT
Process Received Message
COPY REQ.
MOD REQ.
Exit
ABORT
4.2.4 U BICACIN
P UESTA
P UNTO
DE LOS
P ROGRAMA S .
Aplicacin
de
Matlab:
esta
aplicacin
es
un
fichero
con
nombre
75
Insercin del nombre del fichero de modelo de Simulink (con o sin extensin
".mdl").
76
mismo directorio en que se est ejecutando el fichero del modelo de Simulink, puesto
que en dicho directorio se crear el fichero .log que se utilizar para alterar los
valores de los parmetros. El funcionamiento de este servidor es, al igual que el
situado en Servigar, bastante sencillo: una vez ejecutado, mostrar por pantalla un
mensaje indicando que si se escribe la palabra "exit" se detendr la ejecucin del
mismo, dando a entender que se ejecutar de forma indefinida si el usuario no
escribe la orden correspondiente. El servidor se quedar a la escucha de peticiones
en el puerto designado y cuando reciba alguna lo mostrar por pantalla.
DE
C ONTROL R EMOTO .
convert.exe
cp_client_neoxite.exe
cp_server_neoxite.exe
tunning.c
tunning.txt
params.mdl
sendtoservigar.m
cp_server_servigar.exe
77
Una
vez
terminada
la
compilacin
se
habr
generado
una
carpeta
params_grt_rtw que contendr todo el cdigo fuente del ejecutable generado, mientras que
el ejecutable se encontrar en la misma carpeta que el modelo de Simulink.
78
Ilustracin 17: Compilacin del model de ejemplo de Simulink para su uso con RTW y el modo externo
79
La opcin -tf establece el tiempo final de la ejecucin en tiempo real. Con inf se
indica que se desea que el tiempo de ejecucin sea infinito. La opcin -w se utiliza para
esperar el mensaje de bienvenida del host, esto es, que no se empieza a ejecutar hasta que
un cliente se conecta con el fichero del modo externo.
80
81
WWW
Server
NEOXITE
Client
Ilustracin 22: Esquema del envo de ficheros de Neoxite a Servigar mediante
el script de Matlab
82
REMOTE PC
Web
Page
SERVIGAR
WWW
83
REMOTE PC
Web
Page
SERVIGAR
WWW
NEOXITE
Server
Ilustracin 27: Esquema del envo de datos de la interfaz web al servidor de Neoxite
84
85
5 R ESULTADOS E XPERIMENTALES .
5.1 S ISTEMA
DE
A CTUALIZACIN
DE
B ASES
DE
D ATOS
Como batera de pruebas del sistema se utilizaron ficheros de texto con publicaciones
contenidas en la base de datos del SICA.
En estos ficheros, los campos se encontraban separados mediante tabuladores, mientras
que las entradas a aadir en la base de datos se encontraban separadas mediante retornos
de carro.
Cada uno de los ficheros se encargaba de actualizar una tabla distinta de la base de
datos, que para las pruebas fue la base de datos groupweb, emplazada en el servidor
Nyquist de los laboratorios de la Universidad de Sevilla, y que albergaba el sitio web del
grupo de control predictivo.
Inicialmente se realizaron pruebas de insercin manual de los datos contenidos en los
ficheros, y posteriormente se procedi a la actualizacin de la base de datos mediante el
sistema diseado en el presente proyecto.
Los tiempos de actualizacin se muestran en la siguiente tabla comparativa:
Nombre del
fichero
journals.txt
75
3h15m
0h31m
0h15m
congress.txt
211
7h32m
1h20m
0h42m
phds.txt
10
0h23m
0h05m
0h02m
books.txt
0h18m
0h03m
0h01m
actas.txt
26
1h03m
0h07m
0h04m
TOTAL:
331
12h31m
2h06m
1h04m
Todos los experimentos se llevaron a cabo en condiciones ptimas, esto es, tomando
como conocida la existencia y localizacin de los documentos pdf complementarios a las
entradas existentes en los ficheros de texto, as como usando un operario con amplia
86
Nombre de
fichero
journals.txt
84.1 %
51.6 %
2.60m
0.41m
congress.txt
82.3 %
47.5 %
2.14m
0.38m
phds.txt
78.3 %
60.0 %
2.30m
0.50m
books.txt
83.3 %
66.6 %
2.00m
0.33m
actas.txt
88.9 %
42.9 %
2.42m
0.27m
TOTAL:
83.2 %
49.2 %
2.27m
0.38m
Como demuestran los resultados, el trabajo se reduce en casi la mitad, y el tiempo que
se tarda en actualizar el sistema disminuye alrededor de un 80 %, por lo que se deduce que
el sistema funciona produciendo los resultados esperados.
DE
U NA P LANTA
TRAVS
DE
Las pruebas llevadas a cabo con la funcin S programada dieron los resultados
esperados. No obstante, si el tiempo de muestreo del sistema es muy bajo, esto implicar
que se realizarn muchos accesos al disco duro para la lectura del fichero de texto que
almacena los valores de las variables. Por tanto, se recomienda programar una pequea
porcin de cdigo para que la lectura del fichero slo se lleve a cabo cada ciertos mltiplos
del tiempo de muestreo o mediante cualquier otro criterio del usuario.
Si no se tiene acceso al tiempo de muestreo, siempre es posible definir una variable
global de valor incremental conforme avanza la ejecucin del modelo. Cuando sta adquiera
un determinado valor, se reiniciara y ste sera el evento mediante el cual se llevara a cabo
la lectura del fichero de texto con los valores.
En lo que respecta a las pruebas, como caba esperar, se modificaron los valores de las
salidas del bloque, aunque el sistema en determinadas ocasiones se ralentizaba, sobretodo
cuando el tiempo de muestreo era bajo.
87
6 C ONCORDANCIA
R ESULTADOS Y O BJETIVOS .
6.1 S ISTEMA
DE
A CTUALIZACIN
DE
B ASES
DE
E NTRE
D ATOS .
Como se desprende del apartado anterior, los resultados obtenidos con el sistema son
bastante buenos. Se consigue reducir drsticamente el tiempo de actualizacin de un
sistema en torno al 80 %.
Por otra parte, tambin se alivia el trabajo realizado por el usuario encargado de la
actualizacin, pues ste realiza hasta un 50 % menos de trabajo empleando el sistema
diseado que si lo actualizase directamente.
En consecuencia, los objetivos son satisfechos completamente, puesto que permiten que
con un mnimo esfuerzo y una mnima dedicacin de tiempo se lleve a cabo la actualizacin
exitosa de la base de datos.
DE
Los resultados cumplen con los objetivos en tanto que permiten la manipulacin de datos
en Matlab a travs de una interfaz web. El mayor problema reside en la correcta
configuracin de las lecturas promiscuas del fichero de datos que almacena los valores
que se han de cambiar, pues puede llegar colapsar el sistema o actualizar con demasiada
lentitud el mismo.
No obstante, los objetivos fijados se cumplen.
88
7 C ONCLUSIONES .
7.1 A CTUALIZACIN A UTOMTICA
DE
B ASE
DE
D ATOS .
El sistema cumple de forma esperada todos los objetivos establecidos al comienzo del
mismo. No obstante, aqu se podran remarcar las ventajas e inconvenientes del sistema,
derivadas de la experimentacin con el mismo.
Ventajas:
comprobacin anterior.
muestra una lnea de informacin que indica la lnea que se est analizando en el
momento con la finalidad de que el usuario vea que el sistema est funcionando y no
est colgado.
89
La lentitud del sistema aumenta con el volumen de datos a actualizar, pero esto
DE
S ISTEMAS
MEDIANTE
M ATLAB /S IMULINK .
Desventajas:
realmente.
90
DE
Situar los campos de texto justo en las salidas del bloque de la funcin S, para
que sea todava ms directa la asociacin entre los campos de texto y las salidas del
bloque.
imagen y enva los ficheros a Servigar, para que compile directamente el modelo de
Simulink (en caso de que se vaya a usar el modo externo), lo ponga a ejecutar y se
quede a la espera de rdenes.
91
porque las funciones creadas por MathWorks con esta finalidad implementan el
fichero de cabecera "mex.h", mientras que si la aplicacin se ha de controlar en
tiempo real requiere de Real Time Workshop, y las libreras de este toolbox son
incompatibles con "mex.h".
92
9 B IBLIOGRAFA .
En la parte de control remoto se han utilizado los documentos publicados por The
MathWorks, empresa responsable de la creacin del programa Matlab y la ingente ayuda del
paquete de programacin Microsoft Visual .NET.
En la parte relativa al sistema de actualizacin de bases de datos, la documentacin
utilizada fue:
CONVERSE, TIM; PARK, JOYCE; MORGAN, CLARK. PHP5 and MySQL Bible. Wiley
Publishing Inc., 2004. ISBN: 0-7645-5746-7.
DUBOIS, PAUL. MySQL The definitive guide to using, programming, and
administering MySQL 4.1 and 5.0 3rd Edition. Sams, March 08, 2005. ISBN: 0-672-326736.
GOURLEY, DAVID; TOTTY, BRIAN; SAYER, MARJORIE; REDDY, SAILU; AGGARWAL,
ANSHU. HTTP: The Definitive Guide. O'Reilly, September 2002. ISBN: 1-56592-509-2.
GREENSPAN, JAY; BULGER, BRAD. MySQL/PHP Database Applications. M&T
Books, 2001. ISBN: 0-7645-3537-4.
HUNGER, STEVE. Debian GNU/Linux Bible. Hungry Minds Inc., 2001. ISBN: 0-76454710-0.
LAURI, BEN; LAURI, PETER. Apache The Definitive Guide, 3rd Edition. O'Reilly,
December 2002. ISBN: 0-596-00203-3.
NEGUS, CHRISTOPHER. Linux Bible 2005 Edition. Wiley Publishing Inc., 2005. ISBN:
0-7645-7949-5.
WONG, CLINTON. HTTP Pocket Reference, 1st Edition. O'Reilly, May 2000. ISBN: 156592-862-8.
Tambin se emple el sitio web de la World Wide Web Consortium Schools, que legisla
todo lo referente a la web (HTML, XHTML, etc) para documentacin:
http://www.w3schools.com/
93
10 A NEXOS
10.1 C ONTENIDOS
DEL
CD-R OM .
bases de datos.
actualizados.
94
parmetros.
Articulos.Nyquist: ficheros originales del sitio web utilizado para obtener los
Windows.
MySQL.
MySQL.
95
de bases de datos.
10.2 M ANUAL
DE
U SO : S ISTEMA
DE
A CTUALIZACIN
DE
B ASES
DE
D ATOS .
10.2.1 INSTALACIN .
Los archivos situados en el directorio Final/SQL.Update/Final.Site constituyen la
nueva versin del sitio web del grupo de control predictivo. Basta con sobreescribir la
carpeta que contiene el antiguo sitio mediante una transferencia ftp/telnet o similar.
Si se desea copiar nicamente los ficheros correspondientes al sistema, entonces
simplemente se han de copiar en el directorio del sitio web del grupo de control predictivo los
ficheros de la carpeta Final/SQL.Update/New.Files.
El directorio en que se encuentra el antiguo sitio web del grupo de control predictivo es
/var/www/groupweb/, en el servidor Nyquist.
10.2.2 U SANDO
EL
S ISTEMA
DE
A CTUALIZACIN
DE
B ASES
DE
D ATOS .
96
DE
D ATOS .
En el segundo paso el usuario debe indicar al sistema los campos de que constan las
entradas de los ficheros que indic en el paso anterior, as como los separadores que se
utilizan para distinguir campos y entradas (tabuladores, retornos de carro, etc). Mencin
especial tiene el campo authors o supervisors, que representan a los autores o
supervisores de una publicacin. Para ellos tambin es necesario indicar al sistema el tipo
de separadores usados. Los ms comunes para este caso son ; o ,.
Al final del documento se indica adems si las direcciones y directorios facilitados en el
paso anterior son lebles correctamente y se tiene acceso a ellos.
Hay que remarcar que los campos se han de indicar en el mismo orden con que
aparecen en los ficheros de texto, y de forma consecutiva. Caso aparte son los separadores,
que se muestran nicamente al final, ya que, al no existir como tales campos, entonces no
tienen necesidad de ir a continuacin de los campos de los ficheros.
97
DE
D EFINICIN
DE
P UBLICACIONES .
98
DE
S EGURIDAD
DE LA
B ASE
DE
D ATOS .
DE
S EGURIDAD
DE LA
B ASE
DE
D ATOS .
Aqu se presenta una tabla por pantalla que permite al usuario restaurar una copia de
seguridad creada previamente, as como borrarla. Para cada una de las copias de seguridad
se muestran la hora y la fecha de creacin, a fin de que el usuario proceda con la que ms
convenga.
La opcin Actualizar directorio de pdfs hace que el sistema, al actualizar la base de
datos, borre todos los documentos pdf que no se correspondan con entradas existentes en
la base de datos. Esto se incluye para prevenir futuros errores en que se actualicen entradas
que no tengan ficheros pdf y al no haber borrado los de una copia anterior se muestre un
fichero errneo.
En consecuencia, se recomienda restaurar una copia, y comprobar en el sitio web que se
ha restaurado la deseada. Si esto es as, entonces ya se puede proceder a restaurar esa
misma marcando la opcin de actualizacin del directorio de pdfs. Adems, tambin es
recomendable borrar las copias de seguridad con fecha y hora posterior a la restaurada, con
99
10.3 M ANUAL
DE
U SO : S ISTEMA
DE
C ONTROL R EMOTO .
10.3.1 INSTALACIN .
La ubicacin de cada uno de los programas es importante. Si no se tiene cuidado al
colocar los ejecutables se obtendrn errores adicionales. A continuacin se especifica la
correcta ubicacin de cada uno de ellos (NOTA: todos los ficheros aqu especificados se
encuentran en el directorio Final del CD-Rom que acompaa esta memoria):
Aplicacin
de
Matlab:
esta
aplicacin
es
un
fichero
con
nombre
Insercin del nombre del fichero de modelo de Simulink (con o sin extensin
".mdl").
100
mismo directorio en que se est ejecutando el fichero del modelo de Simulink, puesto
que en dicho directorio se crear el fichero .log que se utilizar para alterar los
valores de los parmetros. El funcionamiento de este servidor es, al igual que el
situado en Servigar, bastante sencillo: una vez ejecutado, mostrar por pantalla un
mensaje indicando que si se escribe la palabra "exit" se detendr la ejecucin del
mismo, dando a entender que se ejecutar de forma indefinida si el usuario no
escribe la orden correspondiente. El servidor se quedar a la escucha de peticiones
en el puerto designado y cuando reciba alguna lo mostrar por pantalla.
10.3.2 U SANDO
EL
C ONTROL R EMOTO .
101
convert.exe
cp_client_neoxite.exe
cp_server_neoxite.exe
tunning.c
tunning.txt
params.mdl
sendtoservigar.m
cp_server_servigar.exe
Una
vez
terminada
la
compilacin
se
habr
generado
una
carpeta
params_grt_rtw que contendr todo el cdigo fuente del ejecutable generado, mientras que
el ejecutable se encontrar en la misma carpeta que el modelo de Simulink.
3) Antes de proceder a la ejecucin del modelo, se han de arrancar los distintos
servidores que deben quedarse a la espera de peticiones en los puertos. Por tanto, en este
paso se ejecutan los ejecutables cp_server_neoxite.exe y cp_server_servigar.exe en los
ordenadores que implementan el control con Matlab (en adelante, servidor matlab) y la
interfaz web (en adelante, servidor web) respectivamente.
4) El operario encargado de ejecutar el controlador pondr en marcha el sistema,
invocando "sendtoservigar.m" desde la lnea de comandos de Matlab. Esta aplicacin se
comunicar con el servidor web y llevar a cabo la puesta a punto del sistema. Una vez
configurado el sistema, el operario ejecutar el controlador del usuario, no sin antes haber
arrancado el ejecutable servidor del modo externo generado en el paso 2. Para ello, el
operario abrir una ventana de comandos de Windows (una consola) en el servidor Matlab,
se desplazar al directorio donde se encuentra dicho ejecutable para el modo externo y una
vez ubicado en dicha carpeta ejecutar el siguiente comando:
102
La opcin -tf establece el tiempo final de la ejecucin en tiempo real. Con inf se
indica que se desea que el tiempo de ejecucin sea infinito. La opcin -w se utiliza para
esperar el mensaje de bienvenida del host, esto es, que no se empieza a ejecutar hasta que
un cliente se conecta con el fichero del modo externo.
Lo siguiente ser, como ya se dijo anteriormente, ejecutar el controlador del usuario.
Para ello, se abre el modelo del controlador en Simulink, se escoge el modo externo en la
lista desplegable superior y se presiona sobre el botn que hay justamente a la izquierda de
la lista, que muestra como ayuda emergente al posar el ratn sobre l Connect to target.
Esto conectar el modelo con el ejecutable que se ha arrancado antes. Una vez conectado,
ya solamente resta pulsar en el botn Start real-time code, situado a la izquierda del
anterior.
En caso de que el usuario desee modificar algn valor en el bloque de modificacin de
parmetros, debe validarse en la interfaz web, tras lo cual tendr acceso a la interfaz y ver
los valores actuales de los parmetros de su controlador, modifcando aquellos que no le
plazcan. En este momento, tras pulsar el botn de actualizar dichos valores, la interfaz web
se comunicar con el servidor Matlab para modificar el fichero de intercambio de datos, de
forma que el bloque de modificacin de parmetros pueda actualizar los nuevos valores.
10.4.1 S ISTEMA
DE
A CTUALIZACIN
DE
B ASE S
DE
D ATOS .
103
104
if (valida_usuario($_POST["user"], $_POST["password"])) {
// Inicio de sesin y envo de los datos del usuario para validar en los
// subsiguientes pasos
session_start();
$_SESSION["user"] = $_POST["user"];
$_SESSION["password"] = $_POST["password"];
// Mensaje de bienvenida
print "\t<h2>Actualizacin automtica de la Base de Datos</h2><br />" .
"Hola, usuario \"" . $_POST["user"] . "\".<br />" .
"Bienvenido al script de actualizacin automtica de la base de datos " .
"del sitio web del Grupo de Control Predictivo.<br /><br />\n\t<h3>" .
"Paso 1: Introduccin de los ficheros de actualizacin y seleccin " .
"de las bases de datos a actualizar:</h3><br />";
$tablas_db = lista_tablas();
info_campos($tablas_db, $tipo_campos_tablas, $nombre_campos_tablas);
// Impresin del formulario de alta de ficheros y seleccin de tablas en el
// navegador
echo "\t<form name='upload' id='upload' action='paso2.php' " .
"ENCTYPE='multipart/form-data' method='POST'>\n";
echo "\t\t<table border='0'>\n";
$max_campos = 0;
for ($i=0;$i<count($tablas_db);$i++)
if ($max_campos < count($nombre_campos_tablas[$i]))
$max_campos = count($nombre_campos_tablas[$i]);
// Se imprime una fila de la tabla por cada tabla existente en la base de
// datos.
echo "\t\t\t<tr>\n";
echo "\t\t\t\t<td width='620px' align=center>Seleccione aqu los ficheros " .
"que contengan las actualizaciones:</td>\n";
echo "\t\t\t\t<td width='100px'>Tabla a actualizar:</td>\n";
echo "\t\t\t</tr>\n";
for ($i=0;$i<count($tablas_db);$i++) {
// Nueva fila
echo "\t\t\t<tr>\n";
// 1 columna => Campo de texto para escribir el nombre del fichero con las
// actualizaciones.
echo "\t\t\t\t<td width='620px'>\n";
echo "\t\t\t\t\t<input type='file' id='fichero" . $i .
"' name='fichero" . $i . "' size=80 />\n";
echo "\t\t\t\t</td>\n";
// 2 columna => Lista desplegable para seleccionar la base de datos que se
// actualizar.
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
"a",
"e",
"i",
"o",
"u",
"n",
$cadena);
$cadena);
$cadena);
$cadena);
$cadena);
$cadena);
}
//*******************************************************************************
// BUSCA_APELLIDO_AUTOR: busca el primer apellido del autor pasado en la cadena
//
$autor. Primero comprueba los autores registrados, que se encuentran en la
//
tabla $apellidos_reg.
// Entrada:
- Nombre del autor => $autor
//
- Array con los apellidos de los autores registrados =>
//
$apellidos_reg
// Salida: - Primer apellido del autor pasado => $reference
//*******************************************************************************
function busca_apellido_autor ($autor, $apellidos_reg) {
// La primera bsqueda es para los autores del grupo, que tienen
// su nombre bibliogrfico en la base de datos
$pos = -1;
$nombre_completo = quita_tildes(strtolower($autor));
for ($k=0;$k<count($apellidos_reg);$k++) {
$back = stripos(" " . $nombre_completo ,$apellidos_reg[$k]);
if ($back != FALSE)
$pos = $k;
}
if ($pos != - 1)
$reference = strtolower($apellidos_reg[$pos]);
// Si la bsqueda no ha tenido xito, es que el autor no
// pertenece al grupo. Se obtiene entonces el apellido.
else {
$palabra = strtok($nombre_completo, " ");
$k = -1;
// Insertamos en un array los nombres y apellidos
$nombre_completo = $nombre_completo . " ";
while ($palabra != FALSE) {
$k++;
$nombre[$k] = $palabra;
$palabra = strtok(" ");
}
// Buscamos una coma. Si sta existe en alguno de
// los campos, quiere decir que lo primero son los apellidos.
$coma = FALSE;
for ($k=0;$k<count($nombre);$k++) {
if (stripos($nombre[$k], ","))
$coma = TRUE;
}
if ($coma == TRUE) {
// Si existe coma, buscamos el primer
// apelllido que no se encuentre abreviado
$k = 0;
$encontrado = FALSE;
while (!$encontrado) {
if (stripos(" ".$nombre[$k], ".")) {
$k++;
} elseif (strlen($nombre[$k]) < 4) {
// Aqu se tienen en cuenta los artculos
// y preposiciones de los apellidos
switch (strtolower($nombre[$k])) {
case "de":
$k++;
break;
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
<table cellspacing=10>
<caption><h3>Tabla BOOKS</h3></caption>
<thead>
<tr>
<th>Nombre del campo</th>
<th>Descripcin</th>
</tr>
</thead>
</tbody>
<tr>
<td width="30%" align=right> TITLE
<td> Ttulo del libro
</tr>
<tr>
<td width="30%" align=right> ABSTRACT
<td> Resumen del libro
</tr>
<tr>
<td width="30%" align=right> REFERENCE
<td> Referencia de la publicacin
</tr>
<tr>
<td width="30%" align=right> PUBLISHER
<td> Editorial
</tr>
<tr>
<td width="30%" align=right> YEAR
<td> Ao de publicacin del libro
</tr>
168
<table cellspacing=10>
<caption><h3>Tabla PFCS</h3></caption>
<thead>
<tr>
<th>Nombre del campo</th>
<th>Descripcin</th>
</tr>
</thead>
</tbody>
<tr>
<td width="30%" align=right> TITLE
<td> Ttulo del libro
</tr>
<tr>
<td width="30%" align=right> AUTHOR
<td> Autor del proyecto fin de carrera
</tr>
<tr>
<td width="30%" align=right> ABSTRACT
<td> Resumen del libro
</tr>
<tr>
<td width="30%" align=right> REFERENCE
<td> Referencia de la publicacin
</tr>
</tbody>
</table>
<table cellspacing=10>
<caption><h3>Tabla PHDS</h3></caption>
<thead>
<tr>
<th>Nombre del campo</th>
<th>Descripcin</th>
</tr>
</thead>
</tbody>
<tr>
<td width="30%" align=right> TITLE
<td> Ttulo del libro
</tr>
<tr>
<td width="30%" align=right> ABSTRACT
<td> Resumen del libro
</tr>
<tr>
<td width="30%" align=right> DATEPHD
<td> Fecha de finalizacion del doctorado
</tr>
<tr>
169
NOTAS:
<ul>
<li>
No se facilita el campo de insercin de documentos. Se ha de hacer mediante
modificacin manual desde el sitio web del grupo de control predictivo.
</li>
<li>
Existe en la pgina de actualizacin un campo no existente en ninguna de las
tablas, "authors", ya que se suele almacenar el conjunto de autores al
completo, y no de forma separada. El script de actualizacin se encarga de
separarlos posteriormente.
</li>
<li>
En condiciones normales no es necesario modificar la tabla "authors", ya que
los cambios los realiza automticamente el programa de actualizacin.
</li>
</ul>
</body>
</html>
DE
P ROCESO S
MEDIANTE
M ATLAB /TCP/IP.
System;
System.Collections;
System.ComponentModel;
System.Data;
System.Data.Odbc;
System.Drawing;
System.Globalization;
System.IO;
System.Net;
System.Net.Sockets;
System.Text;
System.Web;
System.Web.SessionState;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
Solar.Classes;
namespace Solar.RemoteTunning
{
/// <summary>
/// Esta clase define los mtodos necesarios para proporcionar el control remoto
///
de la planta a un usuario logeado en el sistema
/// </summary>
public class RemoteTunning : System.Web.UI.Page
{
170
171
172
173
174
175
10.4.2.2
using
using
using
using
using
using
CP _SERVER _SERVIGAR
System;
System.IO;
System.Net;
System.Net.Sockets;
System.Text;
System.Threading;
namespace cp_server_servigar
{
176
177
178
179
180
181
182
183
184
10.4.2.3 TUNNING .C
/*
* sfuntmpl_basic.c: Basic 'C' template for a level 2 S-function.
*
* ------------------------------------------------------------------------* | See matlabroot/simulink/src/sfuntmpl_doc.c for a more detailed template |
* ------------------------------------------------------------------------*
* Copyright 1990-2002 The MathWorks, Inc.
* $Revision: 1.27 $
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NUM_VARS 10
FILE *pfile;
//Exchange file descriptor
char s[255];
//Global variable to store the read lines from the exchange file
char var_name[255];
//Global variable to store the name of a variable
char var_value[255]; //Global variable to store the value of a variable
int changed_var;
//Temporal index for selecting the changed variable
int allowed;
//Flag indicating if a variable value is an allowed value
int valid;
//Flag indicating if a variable name is a valid name
int i;
//Loops counter
int count_orig;
//Counter for the originating string
int count_dest;
//Counter for the destiny string
int prueba = 0;
185
186
#define MDL_INITIALIZE_CONDITIONS
/* Change to #undef to remove function */
#if defined(MDL_INITIALIZE_CONDITIONS)
/* Function: mdlInitializeConditions ========================================
* Abstract:
*
In this function, you should initialize the continuous and discrete
*
states for your S-function block. The initial states are placed
*
in the state vector, ssGetContStates(S) or ssGetRealDiscStates(S).
*
You can also perform any other initialization activities that your
*
S-function may require. Note, this routine will be called at the
*
start of simulation and if it is present in an enabled subsystem
*
configured to reset states, it will be call when the enabled subsystem
187
188
189
190
10.4.2.4 S ENDTOSERVIGAR .M
ip_address = '193.147.161.89';
%193.147.161.89 == servigar2.us.es
%172.16.1.231 == neoxite
clear nombre ok str_name pos filename file_contents descriptor caracter coords;
clear tokens new_contents x1 x2 y1 y2 nombre_mod orden s w comando fichero ans;
nombre = input('Introduzca el nombre del fichero que contiene el modelo de
Simulink:\n>>>>>
','s');
% Se comprueba el formato del nombre y si existe el fichero
ok = 0;
% Si existe un fichero mdl con ese nombre (es irrelevante si incluye extension o
% no)
if (exist(nombre) == 4)
str_name = java.lang.String(nombre);
pos = str_name.lastIndexOf('.');
if (pos > 0)
% Caso en que se especifica '.mdl'
if ((nombre(pos+2) == 'm') && (nombre(pos+3) == 'd') && (nombre(pos+4) == 'l'))
disp('Fichero de modelo de Simulink encontrado...')
str_name = str_name.substring(0, pos);
nombre = char(str_name.toString);
pos = str_name.indexOf('.');
if (pos > 0)
disp('Error: El nombre del modelo de simulink no debe contener el carcter
"."')
ok = 1;
end
% Caso en que el nombre contiene '.' pero no se trata de la extension '.mdl'
else
disp('Error: El nombre del modelo de simulink no debe contener el carcter
"."')
ok = 1;
end
else
disp('Fichero de modelo de Simulink encontrado...')
end
else
disp('Error: No se encuentra el fichero especificado')
ok = 1;
end
if (ok == 0)
% Posicionado de la ventana de modelo en la esquina superior izquierda
% Por que? Porque si se tapa parte del controlador, no se ve en la imagen
filename = java.lang.StringBuffer(nombre);
filename = filename.append('.mdl');
descriptor = java.io.FileReader(filename.toString);
file_contents = java.lang.StringBuffer('');
caracter = descriptor.read;
while (caracter ~= -1)
file_contents.append(char(caracter));
caracter = descriptor.read;
end
descriptor.close;
pos = file_contents.toString.indexOf('System {');
pos = file_contents.toString.indexOf('Location', pos + 1);
pos = file_contents.toString.indexOf('[', pos + 1);
coords = file_contents.substring(pos +
191
192
10.4.2.5
using
using
using
using
using
CP _CLIENT _NEOXITE
System;
System.IO;
System.Net;
System.Net.Sockets;
System.Text;
namespace cp_client_neoxite
{
193
194
195
196
197
10.4.2.6
using
using
using
using
using
using
CP _SERVER _NEOXITE
System;
System.IO;
System.Net;
System.Net.Sockets;
System.Text;
System.Threading;
namespace cp_server_neoxite
{
/// <summary>
/// Class Servidor_Neoxite: This class implements a server which can copy remote
///
files and modify files with remote parameters
/// </summary>
class Servidor_Neoxite
{
/// <summary>
/// The main entry point for the application.
/// The server receive first a message containing the operation it has to do:
///
*) COPY_REQUEST: remote copy of a file, transfer over IP and create
///
new
///
*) MOD_REQUEST: remote modification of a file on the server, do not
///
create a new file
///
*) ABORT: self message for exiting the program and stop listening
/// The server has two threads: the main thread listen at a specific port for
/// incoming requests, and the secondary thread is only for terminating
/// purposes (it reads the command line and when user enters "exit" it
/// finishes the program.
/// </summary>
[STAThread]
static void Main(string[] args)
{
string server_address = "servigar2.us.es"; // NEOXITE: 172.16.1.231
int server_port = 32000;
try
{
// Welcome message
Console.WriteLine("Server running at
NEOXITE:\n===========================");
// Just after that message, we start the secondary thread for aborting
Reader lector = new Reader();
Thread hilo_lector = new Thread(new ThreadStart(lector.KeyboardRead));
hilo_lector.Start();
// Allowed IPs for requesting
string[] allowed_ips = {"193.147.161.89", "193.147.160.155",
"172.16.1.4", "127.0.0.1", "172.16.1.231"};
bool salir = false;
// Flag for exiting the main loop
string data = null;
// Incoming data from the client.
byte[] bytes = new Byte[1024];
// Data buffer for incoming data.
// Create the local endpoint
IPHostEntry ipHostInfo = Dns.Resolve(server_address);
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, server_port);
// Create a TCP/IP socket.
Socket listener = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp );
// Bind the socket to the local endpoint and listen for incoming
// connections.
198
199
200
201
202
203
// Line entered
// Socket descriptor
// Flag for exiting the loop
204
205