Trabajo Fin de Grado -...

94
Equation Chapter 1 Section 1 Trabajo Fin de Grado Grado en Ingeniería de las Tecnologías de Telecomunicación Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos Autor: Mónica Pérez Hernández Tutor: Juan Manuel Vozmediano Torres Dep. Ingeniería Telemática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2017

Transcript of Trabajo Fin de Grado -...

Page 1: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Equation Chapter 1 Section 1

Trabajo Fin de Grado

Grado en Ingeniería de las Tecnologías de

Telecomunicación

Sistema de ayuda al análisis de datos distribuido para

el mantenimiento predictivo de flotas de vehículos

Autor: Mónica Pérez Hernández

Tutor: Juan Manuel Vozmediano Torres

Dep. Ingeniería Telemática

Escuela Técnica Superior de Ingeniería

Universidad de Sevilla

Sevilla, 2017

Page 2: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que
Page 3: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

iii

Trabajo Fin de Grado

Grado en Ingeniería de las Tecnologías de Telecomunicación

Sistema de ayuda al análisis de datos distribuido

para el mantenimiento predictivo de flotas de

vehículos

Autor:

Mónica Pérez Hernández

Tutor:

Juan Manuel Vozmediano Torres

Profesor titular

Dep. de Ingeniería Telemática

Escuela Técnica Superior de Ingeniería

Universidad de Sevilla

Sevilla, 2017

Page 4: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que
Page 5: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

v

Trabajo Fin de Grado: Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de

flotas de vehículos

Autor: Mónica Pérez Hernández

Tutor: Juan Manuel Vozmediano Torres

El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:

Presidente:

Vocales:

Secretario:

Acuerdan otorgarle la calificación de:

Sevilla, 2017

El Secretario del Tribunal

Page 6: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que
Page 7: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

vii

A mi familia

A mis amigos

A mis profesores

Page 8: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que
Page 9: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

ix

Agradecimientos

En primer lugar, agradecer a mis padres el haberme dado la posibilidad de estudiar y su apoyo incondicional.

En segundo lugar, a mis amigos, tanto a los anteriores a esta etapa que cierro como a los que he hecho en su

transcurso; en especial a Fran y Álvaro, compañeros de risas y agobios desde segundo, y a Ana y Auxi,

compañeras de vida en este último año. También a Tito, Curro, Andrés, Ferrera , Flor, y el resto de amigos y

compañeros con los que he tenido la suerte de compartir estos años, ya que sin ellos no habría sido lo mismo.

Además, me gustaría darle las gracias a mis profesores por todo lo que he aprendido (o al menos, intentado

aprender) de ellos, especialmente al Departamento de Telemática y, evidentemente, a mi tutor del proyecto.

Por último, a Agustín Walabonso, por haber compartido conmigo innumerables momentos de risas, llantos y

estudio, por conocerme mejor que yo misma y por saber estar, escucharme y aconsejarme incluso cuando ni

yo misma sabía que lo necesitaba. ¡Gracias!

Mónica Pérez Hernández

Sevilla, 2017

Page 10: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que
Page 11: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

xi

Resumen

En este proyecto se desarrollará un sistema que permita llevar a cabo el mantenimiento predictivo de

una flota de vehículos. Esto será posible gracias a una serie de sensores situados en los vehículos, que

registrarán continuamente los valores que van tomando los parámetros influyentes.

A medida que se vayan consiguiendo datos, la herramienta debe enviarlos a un sistema de mensajería

distribuido, en cuyo otro extremo se recibirán y se analizarán para buscar tendencias en su evolución

(ya sea de forma individual o dependiendo del valor de otro parámetro), correlaciones entre pares de

parámetros, etc. que faciliten el estudio del comportamiento de los vehículos y el descubrimiento de

patrones.

La información resultante se almacenará en una base de datos, y podrá ser consultada desde una web

que se desarrollará para ese propósito.

Page 12: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que
Page 13: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

xiii

Abstract

The present project aims to develop a system that allows to carry out the predictive maintenance of

vehicles. This will be possible thanks to a series of sensors located in the vehicles, which will be

continuously recording the values that take the influencing parameters.

As data is obtained, the tool must send it to a distributed messaging system. The data will be received

at the side of the syste, where it will be analyzed in order to look for trends in its evolution (either

individually or depending on the value of another parameter), correlations between pairs of parameters,

etc. that may help to study the behavior of the vehicles and to discovery patterns of behavior.

The resulting information will be stored in a database, and it can be consulted from a web that will be

developed for that purpose.

Page 14: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que
Page 15: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

xv

Índice

Agradecimientos ix

Resumen xi

Abstract xiii

Índice xv

Índice de Tablas xvii

Índice de Figuras xix

1 Introducción 1 1.1 Motivación 1 1.2 Objetivos 2 1.3 Alcance 2

2 Estado del arte 3 2.1 Antecedentes 3 2.2 Situación actual 3

3 Descripción del problema 5

4 Diseño de la solución 7 4.1 Sistema de mensajería distribuido 7

4.1.1 Patrón publicador-suscriptor 7 4.1.2 Apache Kafka 8 4.1.3 Zookeeper 9 4.1.4 Análisis de alternativas 10

4.2 Diseño de los componentes 11 4.2.1 Diseño del productor 12 4.2.2 Diseño del Consumidor 17

4.3 Diseño de la Base de Datos 29 4.4 Diseño de la web de consulta de los resultados 31

5 Implementación 33 5.1 Implementación del Productor 33

5.1.1 Fichero de configuración Producer.config 33 5.1.2 MainProducer 34 5.1.3 Producer 35

5.2 Implementación del consumidor 35 5.2.1 Fichero de configuración Consumer.config 35 5.2.2 MainConsumer 37 5.2.3 Ficheros de configuración [Topic].cfg 37 5.2.4 Consumer 39 5.2.5 Database 39

5.3 Base de datos 39 5.3.1 Estructura general 40 5.3.2 Tabla de correlación 40 5.3.3 Tabla de derivada 41

Page 16: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

5.3.4 Tabla evolucion 41 5.3.5 Tabla evolucion_cond 41 5.3.6 Tabla alarma 42 5.3.7 Tabla logs 42

5.4 Implementación de la web de consulta de los resultados 43 5.4.1 Formulario 43 5.4.2 Tabla de resultados 46

6 Pruebas y validación 49 6.1 Puesta en marcha del escenario 49 6.2 Prueba 01: Modificación del fichero de configuración Producer.config 50 6.3 Prueba 02: Archivo csv inválido 52 6.4 Prueba 03: Modificación del fichero de configuración Consumer.config 52 6.5 Prueba 04: Modificación fichero de configuración de topic 54 6.6 Prueba 05: Procesamiento de datos correctos que no cumplen las condiciones 55 6.7 Prueba 06: Procesamiento de datos incorrectos 55 6.8 Resultados 56

6.8.1 Alarma 56 6.8.2 Correlación 56 6.8.3 Derivada 58 6.8.4 Evolución temporal 59 6.8.5 Evolución temporal condicionada 59

7 Conclusiones y posibles líneas de futuro 61 7.1 Conclusiones 61 7.2 Posibles líneas futuras 62

Referencias 63

Anexo A: Instalación y configuración del escenario 65

Anexo B: Manual de Usuario 71

Page 17: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

xvii

ÍNDICE DE TABLAS

Tabla 1: Comparativa plataformas de mensajería distribuida 11

Tabla 2: Modelo tabla de requisitos 11

Tabla 3: Requisito general productor 01 "Fichero de configuración" 12

Tabla 4: Requisito general productor 02 "Número de topics activos" 12

Tabla 5: Requisito general productor 03 "Número de Productores activos" 12

Tabla 6: Requisito general productor 04 "Escalabilidad" 13

Tabla 7: Requisito general productor 05 "Paralelismo" 13

Tabla 8: Requisito general productor 06 "Lectura y envío de datos" 13

Tabla 9: Requisito general productor 07 "Identificador de mensaje" 13

Tabla 10: Requisito general productor 08 "Comprobación de fecha y hora" 13

Tabla 11: Requisito general productor 09 "Ficheros leídos" 14

Tabla 12: Caso de uso productor 01 "Recarga del fichero de configuración" 14

Tabla 13 : Requisito general consumidor 01 "Fichero de configuración Global" 18

Tabla 14 : Requisito general consumidor 02 "Número de consumidores activos" 18

Tabla 15 : Requisito general consumidor 03 "Paralelismo" 18

Tabla 16 : Requisito general consumidor 04 "Fichero de configuración del topic" 19

Tabla 17 : Requisito general consumidor 05 "Procesamiento de datos" 19

Tabla 18: Requisito general consumidor 06 "Intervalos de estudio variables" 19

Tabla 19 : Requisito general consumidor 07 "Recarga de la configuración de cada topic" 19

Tabla 20 : Requisito general consumidor 08 "Operación Derivada" 20

Tabla 21 : Requisito general consumidor 09 "Operación Correlación" 20

Tabla 22 : Requisito general consumidor 10 "Operación Evolución temporal" 21

Tabla 23 : Requisito general consumidor 10 "Operación Evolución temporal condicionada" 21

Tabla 24: Requisito general consumidor 11 "Operación Alarma" 22

Tabla 25 : Requisito general consumidor 12 "Logs" 22

Tabla 26: Caso de Uso consumidor 01 "Modificación de la configuración global” 22

Tabla 27: Caso de Uso consumidor 02 "Modificación de la configuración de un topic” 23

Tabla 28: Diagrama de flujo "Alarma" 28

Tabla 29: Contenido del fichero de configuración Producer.config 34

Tabla 30: Contenido del fichero de configuración "Consumer.config" 36

Tabla 31: Fichero de configuración asociado a un topic 38

Tabla 32: Estructura de la base de datos 40

Tabla 33: Estructura tabla "Correlacion" 40

Tabla 34: Estructura tabla "Derivada" 41

Page 18: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Tabla 35: Estructura tabla "Evolucion" 41

Tabla 36: Estructura tabla "Evolucion_cond” 42

Tabla 37: Estructura de la tabla de logs 42

Tabla 38: Prueba 04 "Modificación parámetros del análisis de evolución" 54

Tabla 39: Prueba 04 "Modificación parámetros del análisis de correlación" 54

Tabla 40: Prueba 05 "Procesamiento de datos correctos" 55

Tabla 41: Prueba 06 "Procesamiento de datos incorrectos" 56

Page 19: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

xix

ÍNDICE DE FIGURAS

Ilustración 1: Componentes básicos de Apache Kafka 8

Ilustración 2: Funcionamiento de Kafka 9

Ilustración 3: Arquitectura completa de Kafka 10

Ilustración 4: Diagrama de flujo "Coordinación productores" 15

Ilustración 5: Diagrama de flujo “Ejecución proceso productor simple” 16

Ilustración 6: Diagrama de secuencia "Ejecución productor" 17

Ilustración 7: Diagrama d flujo "Coordinación de consumidores" 24

Ilustración 8: Diagrama de flujo "Ejecución consumidor simple" 25

Ilustración 9: Diagrama de flujo "Derivada" 26

Ilustración 10: Diagrama de flujo "Correlación" 26

Ilustración 11: Diagrama de flujo "Evolución temporal" 27

Ilustración 12: Diagrama de flujo "Evolución temporal condicionada” 27

Ilustración 13: Diagrama de secuencia "Ejecución consumidor" 29

Ilustración 14: Estructura tabla "Alarma" 42

Ilustración 15: Formulario Alarma / Derivada 43

Ilustración 16: Formulario correlación 44

Ilustración 17: Formulario evolución 44

Ilustración 18: Formulario evolución condicionada 45

Ilustración 19: Formulario logs 45

Ilustración 20: Consulta evolución I 46

Ilustración 21: Consulta evolución II 46

Ilustración 22: Consulta tabla de logs 47

Ilustración 23: Prueba 01 "Procesos iniciales I" 50

Ilustración 24: Prueba 01 "Procesos iniciales II" 50

Ilustración 25: Prueba 01 "Topics iniciales" 50

Ilustración 26: Pueba 01 "Procesos tras primera recarga de configuración I" 51

Ilustración 27: Prueba 01 "Procesos tras primera recarga de configuración II" 51

Ilustración 28: Prueba 01 "topics tras primera recarga de configuración" 51

Ilustración 29: Prueba 01 "Procesos tras la segunda recarga de configuración I" 51

Ilustración 30: Prueba 01 "Procesos tras la segunda recarga de configuración II" 52

Ilustración 31: Prueba 01 "Topics tras la segunda recarga de configuración" 52

Ilustración 32: Prueba 02 "Archivo csv inválido" 52

Ilustración 33: Prueba 03 "Procesos iniciales I" 53

Ilustración 34: Prueba 03 "Procesos iniciales II" 53

Page 20: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Ilustración 35: Prueba 03 "Procesos tras primer cambio de configuración I" 53

Ilustración 36: Prueba 03 "Procesos tras primer cambio de configuración II" 53

Ilustración 37: Prueba 03 "Procesos tras segundo cambio de configuración" 53

Ilustración 38: Prueba 04 "Modificación parámetros del análisis de derivada" 55

Ilustración 39: Resultados Alarma 01 56

Ilustración 40: Resultados Correlación 01 57

Ilustración 41: Resultados Correlación 02 57

Ilustración 42: Resultado Derivada 01 58

Ilustración 43: Resultado Derivada 02 58

Ilustración 44: Resultado Evolución temporal 01 59

Ilustración 45: Resultado evolución temporal condicionada 01 59

Page 21: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

1

1 INTRODUCCIÓN

a EFNMS [1] define el término mantenimiento como “el conjunto de actividades técnicas y

administrativas cuya finalidad es conservar o restituir un sistema, subsistema, instalación,

planta, máquina, equipo, estructura, edificio, conjunto, componente o pieza a la condición que

le permita desarrollar su función”.

Distinguimos entre tres tipos básicos de mantenimiento: el correctivo, el preventivo y el predictivo. El

presente proyecto se centrará en el tercero de ellos.

1.1 Motivación

Entendemos por mantenimiento predictivo [2] el conjunto de técnicas instrumentadas de medida y

análisis de variables que se realiza para caracterizar, en términos de fallos potenciales, la condición

operativa de los equipos productivos. Su misión principal es optimizar la fiabilidad y disponibilidad

de los equipos con el mínimo coste posible.

Dicha práctica comporta una serie de ventajas entre las que destacan:

Permite preveer o detectar los posibles fallos en sus etapas inicales, con lo cual se dispone de

tiempo suficiente para planificar y programar las acciones correctivas necesarias, permitiendo

llevarlas a cabo bajo condiciones controladas, buscando minimizar los tiempos muertos y

garantizando reparaciones de mayor calidad.

Proporciona un aumento de la fiabilidad, en términos globales.

Reduce el índice de intervenciones al año en los equipos hasta a la quinta parte, lo que conlleva

asimismo una reducción del gasto en repuestos y en mano de obra.

Todo esto se consigue estudiando la tendencia de los valores, que es la que permitirá calcular o prever,

con cierto margen de error, cuando un equipo fallará; he ahí el motivo por el que se denominan técnicas

de mantenimiento predictivo.

El concepto de mantenimiento predictivo está ampliamente relacionado con el campo de las soluciones

IoT (Internet of Things), que se encuentra en auge en una amplia gama de sectores: salud, hogar,

ciudades inteligentes, procesos de fabricación e industria del automóvil, entre otros.

La motivación de este proyecto es, por tanto, la actualidad de los conceptos arriba descritos y su

creciente demanda.

L

“Engineers like to solve problems. If there are no

problems handily available, they will create their

own problems.”

- Scott Adams -

Page 22: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Introducción

2

1.2 Objetivos

El objetivo principal de este proyecto será el desarrollo de un sistema que permita realizar o facilitar

el mantenimiento predictivo de una flota de vehículos.

Se estudiarán y analizarán una serie de parámetros gracias a unos dispositivos con sensores que irán

registrando los valores que van tomando en el tiempo. A partir de ahora nos referiremos a estos

dispositivos con el nombre de unidades de a bordo.

Se colocará una unidad de a bordo en cada uno de los vehículos de la flota. Se debe tener en cuenta

que las unidades son intercambiables, es decir, la toma de medidas en un vehículo en intervalos de

tiempo sucesivos puede ser realizada por unidades de a bordo diferentes.

Los análisis a realizar buscarán encontrar tanto tendencias en la evolución de ciertos parámetros como

correlaciones entre pares de parámetros que indiquen aumento de la probabilidad de fallo o de avería

del vehículo.

El software resultante debe tener en cuenta todas estas consideraciones y debe permitir estudiar cada

vehículo por separado.

1.3 Alcance

Este proyecto se divide en varias partes.

Se comenzará detallando la situación actual, aportando una pequeña introducción sobre los

antecedentes.

Después se describirá en profundidad el problema que se aborda.

A continuación, se hará un planteamiento del diseño del software, introduciendo las herramientas

utilizadas y comparándolas con otras similares.

Seguidamente, se detallará la implementación desarrollada para materializar el diseño planteado en

el punto anterior.

En el siguiente punto se comentarán las pruebas de ejecución y validación realizadas para corroborar

el buen funcionamiento de la aplicación y su comportamiento en diferentes situaciones de

funcionamiento.

Por último, se expondrán las conclusiones y se describirán posibles líneas de futuro y algunas vías

para la continuación del proyecto.

Además, al final del documento se incluirán anexos que ilustren la configuración del software

desarrollado y las herramientas asociadas así como manuales de usuario.

Page 23: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

3

2 ESTADO DEL ARTE

n este apartado se realiza una introducción al tema desarrollado en el proyecto, describiendo la

situación actual y los últimos avances pero añadiendo, además, algunas pinceladas sobre su

historia y cómo se ha llegado al punto en que se encuentra actualmente.

2.1 Antecedentes

El mantenimiento predictivo [3] se describe como una técnica para pronosticar cada posible punto de

fallo de los componentes de una máquina con la suficiente antelación como para que pueda evitarse,

minimizando los tiempos muertos y maximizando el tiempo de vida útil del equipo.

Las primeras labores de ingeniería de mantenimiento surgieron de la mano de la revolución industrial,

ya que comenzó a ser necesaria la realización de tareas de mantenimiento correctivo (para reaprar

averías) y, años más tarde, preventivo (siguiendo lo más fielmente posible las recomendaciones de los

fabricantes con el objetivo de alargar la vida útil de la maquinaria); pero no fue hasta mediados-finales

del siglo XX cuando nació el concepto de mantenimiento predictivo como tal, dando lugar a la

formación de entidades reguladoras como la EFNMS [1] en 1970.

Aunque comenzó siendo aplicable únicamente a la maquinaria industrial, con el vertiginoso ritmo de

los avances de las nuevas tecnologías apoyado por la creciente popularidad del IOT [4] y, más

recientemente, del IOE [4], su uso se ha ido extendiendo a otros campos como la aeronáutica, la

automoción, el transporte, la gestión de las ciudades y el soporte energético, entre otros.

2.2 Situación actual

Actualmente, existen numerosas técnicas aplicables a la realización del mantenimiento predictivo.

Puesto que este proyecto está enfocado en el mantenimiento predictivo de vehículos, en lo que resta

de apartado nos centraremos en ese punto.

Los análisis realizados en las labores de mantenimiento predictivo de vehículos son muy variados,

E

Your first projects aren’t the greatest things in the

world and they may have no money value, they

may go nowhere, but that is how you learn – you

put so much effort into making something right if it

is for yourself.

- Steve Wozniak -

Read more at:

http://www.scotsman.com/news/interview-steve-

wozniak-co-founder-of-apple-computers-1-2479194 -

Page 24: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Estado del arte

4

4

pues en los posibles riesgos influyen numerosos parámetros, ya sean de forma directa o indirecta.

Algunos de estos análisis incluyen la monitorización de la cantidad de combustible, la temperatura del

aceite o del líquido refrigerante, la carga del alternador, la presión del sistema de aire comprimido,

entre otros.

Cada vez son más las empresas dedicadas al sector que se unen a este tipo de proyectos desarrollando

sus propias soluciones: Dynafleet de Volvo Truks [6], la solución OnCommandTM Connection [7] de

Navistar, Proactive Solutions de Goodyear [8], y muchas otras más.

Así, en vista de las tendencias actuales en el análisis de parámetros para el fin que nos ocupa,

seguiremos en esa línea a la hora de desarrollar el software objeto de este proyecto.

Page 25: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

5

3 DESCRIPCIÓN DEL PROBLEMA

ste proyecto pretende proporcionar una herramienta que permita estudiar el comportamiento de

una flota de vehículos basándose en el análisis de los valores que van tomando en el tiempo

una serie de parámetros.

Cada uno de los vehículos de la flota se encuentra equipado con una unidad de a bordo, que será la

encargada de recopilar los datos objeto de nuestro estudio. Estas unidades de a bordo no están

asignadas a un vehículo en particular; son extraíbles e intercambiables, por lo que se deberá indicar a

qué vehículo corresponde cada toma de datos.

Con respecto a la recopilación de datos, esta se lleva a cabo en intervalos de tres minutos separados

por pausas de veinte segundos. La información recabada se almacena en ficheros de extensión “csv”

con una nomenclatura que permite identificar tanto a la unidad de a bordo que ha recogido el conjunto

de datos como la fecha y hora de inicio de la recogida.

La nomenclatura empleada para identificar los archivos de datos que se generan es la siguiente:

UUUU- ANDDHHMM.csv

Donde:

UUUU son cuatro dígitos que identifican a la unidad de a bordo que ha tomado las medidas.

A es un dígito que identifica el año, contando a partir de 2010.

N es una letra entre la “A” y la “L” que representa el mes del año, sabiendo que la A

corresponde a enero, la B a febrero, etc.

DD son dos dígitos que identifican el día del mes.

HH, dos dígitos que representan la hora.

MM, dos dígitos que corresponden a los minutos.

E

Be less curious about people and more curious

about ideas.

- Marie Curie -

Page 26: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Descripción del problema

6

6

Así, por ejemplo, para una medición de datos tomada por la unidad de a bordo con identificador 1495

el día 1 de marzo de 2017 a las 20:42, el nombre del fichero sería 1495-7C012042.csv .

En el interior de cada uno de estos ficheros, los datos se estructuran siguiendo siempre el formato

“Time”; “SPN”; “ECU”; “Value”. La columna “Time” representa, con una precisión de 10 -4

segundos, el instante de tiempo en que se ha tomado la medida (relativo a la hora dada en la

nomenclatura descrita anteriormente), “SPN” corresponde al identificador del parámetro en cuestión

y “Value” al valor que toma dicho parámetro en el instante indicado. Por último, el valor del campo

“ECU” muestra la dirección de enlance de la ECU 1 origen del mensaje. No puede haber dos ECU con

la misma dirección en el bus CAN.

Dado el gran volumen de información que se genera, no es conveniente guardar los datos al completo;

resulta más eficiente almacenar únicamente los resultados de su análisis.

Las operaciones a realizar sobre los datos recogidos tendrán como finalidad principal hallar patrones

de comportamiento que permitan, entre otras cosas, la detección de averías o la realización de un

mantenimiento predictivo de los vehículos.

1 La ECU (Electronic Control Unit) es el dispositivo que controla uno o más sistemas eléctricos en un vehículo.

Page 27: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

7

4 DISEÑO DE LA SOLUCIÓN

n este capítulo se va a describir el diseño del software encargado de dar solución al problema

planteado en el punto anterior.

Se decidió desarrollar el sistema sobre una plataforma de mensajería distribuida, de forma que ésta

hiciera de nexo entre las entidades que envían la información y las que deben procesarla.

A continuación se detallarán las características de la herramienta escogida para ese fin y se mostrará un estudio

comparativo con otras herramientas similares. Posteriormente, se describirán los demás componentes

involucrados en la herramienta diseñada.

4.1 Sistema de mensajería distribuido

Un sistema de mensajería es responsable de la transferencia de datos entre dos aplicaciones, de forma

que éstas sólo tengan que preocuparse de los datos pero no de cómo compartirlos.

Un sistema de mensajería distribuido se basa en el concepto de gestión de colas de mensajes fiable.

Los mensajes se encolan de forma asíncrona entre las aplicaciones cliente y sistema de mensajería:

una vez que el mensaje ha sido publicado por el emisor, los suscriptores pueden recibir el mensaje

seleccionado.

Los dos patrones más seguidos son el punto a punto y el de publicación-suscripción.La diferencia es

que con el primero cada mensaje llega a un solo consumidor y posteriormente desaparece, mientras

que con el segundo un mismo mensaje puede llegar a distintos consumidores.

4.1.1 Patrón publicador-suscriptor

El patrón publicador-suscriptor [9], también conocido como patrón observador, define una

dependencia de uno a muchos entre objetos, de modo que cuando un objeto cambie de estado se

notifique y se actualicen automáticamente todos los que dependen de él.

Este patrón modela pasos de mensajes donde:

El emisor no envía directamente a los suscriptores y no tiene por qué conocerlos.

Los mensajes se clasifican, permitiendo a los suscriptores recibir únicamente mensajes de su interés.

E

Experiments are intended to teach, and not to

mystify.

- William Sturgeon -

Page 28: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Diseño de la solución

8

8

4.1.2 Apache Kafka

La herramienta diseñada se sustenta sobre Apache Kafka [10], un sistema distribuido de mensajería

que sigue el modelo publicador-suscriptor. Kafka, que fue desarrollado por LinkedIn y posteriormente

adoptado por Apache Software Foundation, es una herramienta ampliamente usada como sistema de

almacenamiento en proyectos relacionados con Big Data. Las características que han hecho de ella la

mejor opción para este proyecto son:

Elevado nivel de disponibilidad y persistencia: al ofrecer replicación a través del clúster,

previene la pérdida de datos

Escalabilidad: el número de topics, publicadores y suscriptores puede modificar sin que el

rendimiento de la herramienta se vea afectado.

Gran rendimiento tanto para los publicadores como para los suscriptores, siendo capaz de

manejar hasta terabytes de datos sin presentar caídas en el sistema.

Tolerancia a fallos: gracias al balanceo de carga, a la existencia de particiones y a la replicación.

Aunque no es objeto de este proyecto el estudio en profundidad de este sistema, se van a detallar

algunos conceptos relacionados con su estructura y su funcionamiento en pro de comprender más

fácilmente otros elementos que se presentarán en los puntos sucesivos.

Los principales elementos que conforman la estructura de Kafka son:

Kafka Cluster: Almacena los flujos de datos en sus nodos o brokers, clasificándolos en

categorías llamadas topics.

Producers: Son las entidades que envían el flujo de mensajes al clúster de Kafka.

Consumers: Son los elementos que se suscriben a los topics de Kafka para extraer los

mensajes.

La siguiente imagen presenta a grandes rasgos la organización de los elementos anteriores:

Ilustración 1: Componentes básicos de Apache Kafka

Page 29: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

9

9 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

Como se ha mencionado anteriormente, los productores (Producers) asocian a un topic cada mensaje

que envían al clúster y los consumidores deben suscribirse a un topic determinado en función del flujo

de mensajes que desee recibir. Cada mensaje es enviado como un array de bytes y puede asociarse a

él una clave que permitiría identificar y diferenciar ciertos mensajes o grupos de mensajes.

A continuación se presentan gráficamente los conceptos presentados en el párrafo anterior, mostrando

cómo los productores envían mensajes a distintos topics, cómo estos mensajes se replican a lo largo

de las distintas particiones y cómo los consumidores se suscriben a los topics para recibir determinados

flujos de mensajes:

Ilustración 2: Funcionamiento de Kafka

Cabe destacar que es posible crear grupos de consumidores para conseguir balanceo de carga, de forma

que el flujo de mensajes de un determinado topic se distribuye entre los consumidores que formen

parte del grupo suscrito sin que dos de ellos reciban el mismo mensaje.

4.1.3 Zookeeper

Zookeeper [11] es quien hace posible el funcionamiento del clúster de Kafka, ya que es un servicio

que permite la coordinación de procesos en grandes sistemas distribuidos e implementa gestión de

grupos y protocolos de elección de líder. Zookeeper gestiona los brokers y guarda los topics

pertenecientes a cada bróker y el offset de cada combinación “Consumer/topic/partición” en un espacio

jerárquico de nombres.

Page 30: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Diseño de la solución

10

10

El funcionamiento conjunto de Zookeeper y Kafka sería el siguiente:

Ilustración 3: Arquitectura completa de Kafka

Como se puede observar, Zookeeper es quien coordina los brokers: cuando se añade o se

produce la caída de algún bróker, tanto productores reciben una notificación del evento y

Zookeeper reestructura el sistema de forma transparente al resto de componentes sin que el

servicio se vea afectado lo más mínimo.

4.1.4 Análisis de alternativas

La elección de una herramienta frente a las demás se basa en el objetivo principal del proyecto. En este

caso, buscamos una herramienta flexible, rápida y capaz de soportar grandes flujos de datos

simultáneos sin pérdida de información. En la siguiente tabla se muestra una comparativa entre Apache

Kafka, RabbitMq y Redis.

Page 31: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

11

11 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

Apache Kafka RabbitMQ Redis

Utilidad Bus de mensajes

optimizado para

flujos de datos de

alto ingreso y

reproducción

Plataforma de mensajería

sólida y de propósito

general que soporta

varios protocolos

estandarizados como

AMQP

Almacén de

estructuras de datos

en memoria,

utilizado como base

de datos, caché y

agente de mensajes.

Licencia Open Source:

Apache License 2.0

Open Source: Mozilla

Public License

Open Source:

three clause BSD

license

Paralelismo Si No No

Persistencia Si Si No

Escrito en Scala (JVM) Erlang ANSI C

APIs para

cliente

Ruby, Python,

Node.js y Java

Ruby, Python, Node.js,

Clojure, Go, Java y C

Bash, C, C++,

Erlang, Java, Pascal,

Perl, PHP, Python,

Ruby, Scala, y

muchos más

Tabla 1: Comparativa plataformas de mensajería distribuida

4.2 Diseño de los componentes

Una vez explicado el funcionamiento de la plataforma de mensajería, en este apartado se

describirán los requisitos de diseño que corresponden a los componentes que interactuarán con

dicha plataforma: el productor y el consumidor.

Para empezar, se plantearán los requisitos generales asociados al componente. Dichos requisitos

irán encapsulados en tablas con el siguiente formato:

IDENTIFICADOR Nombre del requisito

Dependencias Identificadores de otros requisitos de los que depende o con los que

está directamente relacionado.

Descripción Explicación de en qué consiste el requisito

Tabla 2: Modelo tabla de requisitos

Posteriormente se detallarán las distintas acciones asociadas a dicho componente mediante

diagramas de flujo.

Para finalizar, se ilustrará el funcionamiento global del segmento de software en cuestión gracias

a un diagrama de secuencia.

Page 32: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Diseño de la solución

12

12

4.2.1 Diseño del productor

Como se ha explicado anteriormente, los productores de Apache Kafka son los componentes

encargados de enviar información a los topics.

A continuación se detallarán los requisitos o condiciones que debe respetar la implementación de

este componente del software.

4.2.1.1 Requisitos generales

RGEN_PROD_01 Fichero de configuración

Dependencias RGEN_PROD_02

Descripción Debe haber un fichero de configuración, Producer.config, que

proporcione los siguientes parámetros a la aplicación encargada de

coordinar a los productores:

Apache Kafka

o IP del servidor

o Puerto asociado

Zookeeper

o IP del servidor

o Puerto asociado

Topics

o Un par “topic = ruta_ficheros_de_Datos” por cada

unidad de a bordo operativa.

Tabla 3: Requisito general productor 01 "Fichero de configuración"

RGEN_PROD_02 Número de Topics activos

Dependencias RGEN_PROD_01, RGEN_PROD_03

Descripción Debe haber un topic por cada unidad de a bordo operativa, siendo el

nombre del topic el identificador de dicha unidad.

Tabla 4: Requisito general productor 02 "Número de topics activos"

RGEN_PROD_03 Número de Productores activos

Dependencias RGEN_PROD_02

Descripción Debe existir una relación uno-uno entre el número de productores

activos y el número topics existentes.

Tabla 5: Requisito general productor 03 "Número de Productores activos"

RGEN_PROD_04 Escalabilidad

Page 33: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

13

13 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

Dependencias RGEN_PROD_01

Descripción El aumento o disminución de la necesidad de productores activos no

afectará al rendimiento de la aplicación.

Tabla 6: Requisito general productor 04 "Escalabilidad"

RGEN_PROD_05 Paralelismo

Dependencias RGEN_PROD_03

Descripción Debe crearse un proceso para cada productor, de forma que se ejecuten

en paralelo.

Tabla 7: Requisito general productor 05 "Paralelismo"

RGEN_PROD_06 Lectura y envío de datos

Dependencias RGEN_PROD_03

Descripción La lectura de datos de los ficheros csv debe realizarse en bloques de 1Mb

para su posterior envío al topic correspondiente

Tabla 8: Requisito general productor 06 "Lectura y envío de datos"

RGEN_PROD_07 Identificador de mensaje

Dependencias RGEN_PROD_06

Descripción El identificador de cada mensaje enviado al topic (campo ‘key’) debe

corresponderse con la fecha de toma de datos del fichero leído, de

forma que el consumidor pueda identificar el set de datos al que

corresponden los valores recibidos.

Tabla 9: Requisito general productor 07 "Identificador de mensaje"

RGEN_PROD_08 Comprobación de fecha y hora

Dependencias RGEN_PROD_09

Descripción Antes de proceder a la lectura y envío de los datos de un fichero se

debe comprobar que la marca de tiempo correspondiente a su toma de

datos no presenta valores incoherentes.

Tabla 10: Requisito general productor 08 "Comprobación de fecha y hora"

RGEN_PROD_09 Ficheros leídos

Dependencias RGEN_PROD_08

Descripción Los ficheros leídos, tanto los válidos como los no válidos, se moverán

a un subdirectorio “Sent_Files” para evitar que sean procesados de

nuevo.

Page 34: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Diseño de la solución

14

14

Tabla 11: Requisito general productor 09 "Ficheros leídos"

4.2.1.2 Casos de uso

CU_PROD_01 Recarga del fichero de configuración

Dependencias RGEN_PROD_01

Descripción Cuando se modifique el fichero de configuración se debe enviar una

señal de aviso al proceso principal para que regargue la configuración

y actúe en consecuencia.

Tabla 12: Caso de uso productor 01 "Recarga del fichero de configuración"

4.2.1.3 Detalle del comportamiento

Este subapartado contiene una serie de diagramas de flujo que que describirán en detalle los

componentes del diseño elegido para el productor, finalizando con un diagrama de secuencia que

aúne la interacción global entre dichos componentes.

Para empezar, el siguiente diagrama ilustra el funcionamiento del módulo encargado de coordinar

a los productores del escenario:

Page 35: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

15

15 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

Ilustración 4: Diagrama de flujo "Coordinación productores"

Page 36: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Diseño de la solución

16

16

A continuación se ilustrará el funcionamiento de los procesos “productor” a los que hace alusión

el diagrama de flujo anterior:

Ilustración 5: Diagrama de flujo “Ejecución proceso productor simple”

Page 37: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

17

17 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

Por último, el siguiente diagrama de secuencia describe el funcionamiento conjunto del componente:

Ilustración 6: Diagrama de secuencia "Ejecución productor"

4.2.2 Diseño del Consumidor

En cuanto al consumidor, que será el componente encargado de extraer la información del topic y

de procesarla posteriormente, se pueden especificar una serie de requisitos o restricciones que debe

cumplir el software.

Page 38: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Diseño de la solución

18

18

4.2.2.1 Requisitos generales

RGEN_CONS_01 Fichero de configuración global

Dependencias RGEN_CONS_02, RGEN_CONS_10,

Descripción La herramienta debe poseer un fichero de configuración que

proporcione los siguientes datos:

Apache Kafka

o IP del servidor

o Puerto asociado

Base de datos

o IP del servidor

o Nombre de la base de datos

o Nombre de usuario

o Contraseña

Topics

o Tantos pares “topic = ruta_fichero_config_topic”

como sean necesarios.

Tabla 13 : Requisito general consumidor 01 "Fichero de configuración Global"

RGEN_CONS_02 Número de consumidores activos

Dependencias RGEN_CONS_01, RGEN_CONS_03, RGEN_CONS_05

Descripción El número de consumidores en ejecución, que deberá coincidir con

el número de topics activos, vendrá determinado por el fichero de

configuración Consumer.config

Tabla 14 : Requisito general consumidor 02 "Número de consumidores activos"

RGEN_CONS_03 Paralelismo

Dependencias RGEN_CONS_02

Descripción Debe crearse un proceso para cada consumidor, de forma que se

permita su ejecución en paralelo.

Tabla 15 : Requisito general consumidor 03 "Paralelismo"

Page 39: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

19

19 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

RGEN_CONS_04 Fichero de configuración del topic

Dependencias RGEN_CONS_05, RGEN_CONS_07, RGEN_CONS_08,

RGEN_CONS_09, RGEN_CONS_10, RGEN_CONS_11

Descripción Cada topic tendrá asociado su propio fichero de configuración, que

contendrá las distintas operaciones a realizar sobre los datos leídos

así como los parámetros que caractericen estas operaciones. Si se

produce algún error en una operación, se guardará la descripción de

la incidencia en una tabla de logs

Tabla 16 : Requisito general consumidor 04 "Fichero de configuración del topic"

RGEN_CONS_05 Procesamiento de datos

Dependencias RGEN_CONS_06, RGEN_CONS_07, RGEN_CONS_08,

RGEN_CONS_09, RGEN_CONS_10, RGEN_CONS_11

Descripción Se añadirá una columna a cada set de datos con el objetivo de

identificar la fecha en que fueron tomados. Dicho valor se obtendrá

del identificador (campo key) de los mensajes recibidos.

Tabla 17 : Requisito general consumidor 05 "Procesamiento de datos"

RGEN_CONS_06 Intervalos de estudio variables

Dependencias RGEN_CONS_05, RGEN_CONS_07, RGEN_CONS_08,

RGEN_CONS_09, RGEN_CONS_10, RGEN_CONS_11

Descripción Los intervalos de tiempo de estudios no estarán limitados a la duración de

cada set de datos sino que se podrá establacer su amplitud en minutos,

indicándolo en el fichero de configuración del topic.

Tabla 18: Requisito general consumidor 06 "Intervalos de estudio variables"

RGEN_CONS_07 Recarga de la configuración de cada topic

Dependencias RGEN_CONS_04, RGEN_CONS_05

Descripción Las operaciones asociadas a cada topic, además de sus parámetros

correspondientes, se recargarán al recibir la señal SIGHUP una vez

se completen las operaciones en ejecución en ese instante, antes de

proceder a la siguiente lectura de datos.

Tabla 19 : Requisito general consumidor 07 "Recarga de la configuración de cada topic"

Page 40: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Diseño de la solución

20

20

RGEN_CONS_08 Operación Derivada

Dependencias RGEN_CONS_05

Descripción El resultado será la derivada respecto al tiempo de un parámetro. Esta

operación estará caracterizada por los siguientes parámetros:

ID del vehículo del que se han tomado los datos

ID de la unidad de a bordo que ha recogido los datos

ID del parámetro sobre el que se va a realizar la operación

Fecha de inicio de la toma de datos

Duración del intervalo de análisis (en minutos)

Umbral de referencia para el estudio del parámetro

Criterio (exceso o defecto) de superación del umbral

Tabla 20 : Requisito general consumidor 08 "Operación Derivada"

RGEN_CONS_09 Operación Correlación

Dependencias RGEN_CONS_05

Descripción La operación de correlación, que dará como resultado el coeficiente de

correlación de dos parámetros y su diagrama de dispersión, vendrá

caracterizada por los siguientes parámetros:

ID del vehículo del que se han tomado los datos

ID de la unidad de a bordo que ha recogido los datos

ID de los dos parámetros sobre los que se va a realizar la operación

Fecha de inicio de la toma de datos

Duración del intervalo de análisis (en minutos)

Umbral mínimo de aceptación para el coeficiente de correlación

Coeficiente para el descarte de valores

Tabla 21 : Requisito general consumidor 09 "Operación Correlación"

Page 41: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

21

21 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

RGEN_CONS_10 Operación Evolución temporal

Dependencias RGEN_CONS_05

Descripción La operación de evolución temporal consistirá en representar los valores que

toma el parámetro frente a la escala de tiempo cuando cumpla la condición

establacida por el umbral y el criterio, es decir, cuando supere por exceso o

por defecto el umbral mencionado. Esta operación tomará los siguientes

parámetros:

ID del vehículo del que se han tomado los datos

ID de la unidad de a bordo que ha recogido los datos

ID del parámetro a estudiar

Fecha de inicio de la toma de datos

Duración del intervalo de análisis (en minutos)

Normalización o no del resultado

Tabla 22 : Requisito general consumidor 10 "Operación Evolución temporal"

RGEN_CONS_10 Operación Evolución temporal condicionada

Dependencias RGEN_CONS_05

Descripción El resultado de esta operación será el diagrama de evolución temporal de un

parámetro condicionado a que otro parámetro supere o no un cierto umbral.

Tomará los siguientes parámetros:

ID del vehículo del que se han tomado los datos

ID de la unidad de a bordo que ha recogido los datos

ID de los dos parámetros involucrados

Fecha de inicio de la toma de datos

Duración del intervalo de análisis (en minutos)

Normalización o no del resultado

Umbral de referencia para el segundo parámetro

Criterio (exceso o defecto) de superación del umbral

Tabla 23 : Requisito general consumidor 10 "Operación Evolución temporal condicionada"

Page 42: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Diseño de la solución

22

22

RGEN_CONS_11 Operación Alarma

Dependencias RGEN_CONS_05

Descripción El resultado de esta operación será un registro en la tabla de alarmas si el

parámetro cumple una cierta condición.

Toma los siguientes parámetros:

ID de la unidad de a bordo que ha recogido los datos.

ID del vehículo del que se han tomado los datos

Fecha de inicio de la toma de datos

Duración del intervalo de análisis (en minutos)

ID del parámetro estudiado

Descripción del suceso

Tabla 24: Requisito general consumidor 11 "Operación Alarma"

RGEN_CONS_12 Logs

Dependencias RGEN_CONS_01, RGEN_CONS_05

Descripción Debe llevarse un registro en una tabla de logs que documente las operaciones

fallidas, ya sea por incumplimiento de las condiciones o por valores inválidos

en los datos.

Estos logs deberán incluir:

Marca de tiempo en la que se ha registrado el log.

ID del vehículo del que se han tomado los datos

ID de la unidad de a bordo que ha recogido los datos.

Marca de tiempo del inicio de la toma de datos.

Identificadores de los parámetros involucrados

Descripción del suceso.

Tabla 25 : Requisito general consumidor 12 "Logs"

4.2.2.2 Casos de uso

CU_CONS_01 Modificación de la configuración global

Dependencias RGEN_CONS_01, RGEN_CONS_02

Descripción Cuando se modifique el fichero de configuración global, se debe enviar al

proceso principal la señal de aviso para que recargue los parámetros y actúe

en consecuencia.

Tabla 26: Caso de Uso consumidor 01 "Modificación de la configuración global”

Page 43: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

23

23 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

CU_CONS_02 Modificación de la configuración de un topic

Dependencias RGEN_CONS_02

Descripción Cuando se modifique el fichero de configuración asociado a un

determinado topic se deberá enviar al proceso correspondiente a ese

topic una señal de aviso para que actualice los parámetros de

análisis.

Tabla 27: Caso de Uso consumidor 02 "Modificación de la configuración de un topic”

4.2.2.3 Detalle del comportamiento

En este subapartado se incluirán varios diagramas de flujo que ayuden a terminar de presentar cada

componente que forma parte diseño elegido para el consumidor, además de un diagrama de

secuencia que aúne la interacción global entre dichos componentes.

Para empezar, el siguiente diagrama ilustra el funcionamiento del módulo encargado de coordinar

a los consumidores del escenario:

Page 44: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Diseño de la solución

24

24

Ilustración 7: Diagrama d flujo "Coordinación de consumidores"

Page 45: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

25

25 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

El diagrama que sigue refleja el funcionamiento de los procesos “consumidor” a los que se hace

referencia en la figura anterior:

Ilustración 8: Diagrama de flujo "Ejecución consumidor simple"

Page 46: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Diseño de la solución

26

26

Para finalizar este punto, se incluirán diagramas explicativos de las cinco operaciones de análisis

que se realizan sobre los datos:

Operación Derivada:

Ilustración 9: Diagrama de flujo "Derivada"

Operación Correlación

Ilustración 10: Diagrama de flujo "Correlación"

Page 47: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

27

27 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

Operación Evolución temporal

Ilustración 11: Diagrama de flujo "Evolución temporal"

Operación Evolución temporal

condicionada

Ilustración 12: Diagrama de flujo "Evolución temporal

condicionada”

Page 48: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Diseño de la solución

28

28

Operación Alarma:

Tabla 28: Diagrama de flujo "Alarma"

Page 49: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

29

Con todo esto, el funcionamiento completo del software correspondiente al consumidor

queda reflejado en el siguiente diagrama de secuencia:

Ilustración 13: Diagrama de secuencia "Ejecución consumidor"

4.3 Diseño de la Base de Datos

En puntos anteriores se ha mencionado la necesidad de disponer de una base de datos donde

almacenar los resultados de las operaciones que se van realizando. La herramienta escogida para

desempeñar esta función es MySQL [9], una de las bases de datos relacionales de código abierto

más populares del mundo.

Las entidades que deberá almacenar esta base de datos serán los resultados de las operaciones

realizadas sobre los sets de datos recibidos por los consumidores, así como un registro de logs que

recoja los fallos que se produzcan.

Las tablas necesarias serán:

Page 50: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Diseño de la solución

30

30

Derivada:

o Sus atributos serán el identificador del vehículo, el identificador de la unidad de a

bordo, la marca de tiempo (fecha y hora) de inicio de la toma de datos, la longitud

del intervalo de tiempo analizado (en minutos), el identificador del parámetro a

derivar, el umbral y el criterio aplicados (exceso o defecto) como condición para

realizar la operación, y una imagen que represente gráficamente la derivada.

o La clave primaria estará formada por el id del vehículo, la marca de tiempo, el

intervalo, y el identificador del parámetro.

Correlación:

o Los atributos de esta tabla serán el identificador del vehículo, el identificador de la

unidad de a bordo, la marca de tiempo (fecha y hora) de inicio de la toma de datos,

la longitud del intervalo de tiempo analizado (en minutos), el identificador de cada

uno de los dos parámetros involucrados, el coeficiente de correlación de Pearson y

la imagen que represente su diagrama de dispersión.

o La clave primaria estará formada por el id del vehículo, la marca de tiempo, el

intervalo y los identificadores de ambos parámetros.

Evolución:

o Sus atributos serán el identificador del vehículo, el identificador de la unidad de a

bordo, la marca de tiempo (fecha y hora) de inicio de la toma de datos, la longitud

del intervalo de tiempo analizado (en minutos), el identificador del parámetro, y la

imagen que represente gráficamente la evolución temporal.

o La clave primaria de esta tabla la formarán el id del vehículo, la marca de tiempo,

el intervalo y el identificador del parámetro.

Evolución_cond:

o Los atributos de esta tabla van a ser el identificador del vehículo, el identificador

de la unidad de a bordo, la marca de tiempo (fecha y hora) de inicio de la toma de

datos, la longitud del intervalo de tiempo analizado (en minutos), el identificador

del parámetro condicionado y el del condicionante, un indicador de si los valores

representados están normalizad os o no, el umbral y el criterio aplicados (exceso o

defecto), además de la imagen que represente gráficamente la evolución temporal.

o La clave primaria de esta tabla la formarán el id del vehículo, la marca de tiempo,

el intervalo, y los identificadores de ambos parámetro.

Alarma:

o Esta tabla estará compuesta pro los siguientes atributos: el identificador del

vehículo, el identificador de la unidad de a bordo, la marca de tiempo (fecha y hora)

de inicio de la toma de datos, la longitud del intervalo de tiempo analizado (en

minutos), el identificador del parámetro analizado y, por último, la descripción del

suceso.

o La clave primaria estará compuesta por el id del vehículo, la marca de tiempo, la

duración del intervalo y el identificador del parámetro en cuestión.

Logs:

o Los atributos de esta tabla serán un identificador autoincrementabla, la marca de

tiempo (fecha y hora) en la que se ha registrado el evento, el id de la unidad de a

Page 51: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

31

31 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

bordo, la fecha de la toma de datos y un campo de texto que contenga la descripción

de dicho evento.

o La clave primaria estará compuesta únicamente por el identificador

autoincrementabla.

4.4 Diseño de la web de consulta de los resultados

Para facilitar y simplificar el filtrado y la visualización de los resultados obtenidos se ha optado por

una página web. Esta decision ha estado motivada por la versatilidad, facilidad de diseño y de

implementación de este tipo de herramientas.

La necesidad de una herramienta que permita la consulta de los datos se debe a que en la base de datos

las imágenes se guardan como arrays de bits, con lo cual no es possible su correcta visualización

directamente, sino que es necesario procesar estos arrays para volver a construir las imágenes.

La web presentará inicialmente un formulario donde se podrán seleccionar las opciones de filtrado,

como por ejemplo la operación cuyos datos deseamos consultar o las fechas de las tomas de datos.

Una vez se rellenen los campos deseados y se proceda al envío del formulario, se mostrará una tabla

con los resultados obtenidos, incluyendo las imágenes (si procede).

Page 52: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que
Page 53: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

33

5 IMPLEMENTACIÓN

l objetivo de este capítulo será analizar la implementación del software. Se detallarán la

organización y funcionalidad de cada una de las distintas partes del código y se describirán

las tablas de la base de datos.

Python [13] es el lenguaje de programación escogido para llevar a cabo la implementación de

todos y cada uno de los componentes.

Como se mencionó en el punto de diseño, para el sistema de mensajería distribuido se utilizará la

API en Python de Apache Kafka, Kafka-python [13].

Al igual que en capítulos anteriores, dividiremos el contenido en varios apartados donde cada uno

de ellos corresponderá a un componente del software. Comenzaremos por el módulo del productor,

luego se detallará el código del consumidor y, por último, la implementación de la base de datos

y sus correspondientes tablas.

5.1 Implementación del Productor

Este apartado se dividirá en varios subapartados, donde cada uno de ellos detallará la

implementación de uno de los componentes pertenecientes al módulo que desempeña la función

de productor de Apache Kafka. La implementación del código se estructura de la siguiente forma:

Producer.config: Archivo de configuración.

MainProducer.py: Orquesta el escenario.

Producer.py: Contiene las funciones necesarias para implementar un productor simple.

5.1.1 Fichero de configuración Producer.config

El módulo encargado de coordinar el escenario a este lado de Apache Kafka necesita conocer

ciertos parámetros para asociar correctamente los procesos productores a la plataforma distribuida.

Estos datos los conseguirá a partir del fichero de configuración Producer.config, dividido en tres

secciones (entre corchetes), cuyo contenido será, a modo de ejemplo:

E

The science of today is the technology of tomorrow.

- Edward Teller -

Page 54: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Implementación

34

34

Como se puede observar, hay tres secciones claramente diferenciadas: Kafka-Server, Zookeeper y

Topics.

En cuanto a las propiedades de la sección Kakfa-Server:

Host: dirección del host que aloja el servidor de Kafka

Port: puerto asociado

La sección Zookeeper tiene las mismas propiedades que la anterior:

Host: dirección del host que aloja el servidor de Zookeeper

Port: puerto asociado

La última sección, Topics, contiene tantos pares “identificador=ruta” como unidades de a bordo haya

en funcionamiento donde el primer campo corresponde al identificador de la unidad de a bordo y el

sgundo a la ruta hacia el directorio donde se encuentran los ficheros de datos recogidos por esa unidad.

5.1.2 MainProducer

Es el motor del módulo productor. Su misión es coordinar y controlar todos los procesos encargados

de enviar información a los topics de Kafka, además de gestionar los topics activos, gracias a la

información obtenida del fichero de configuración detallado en la sección anterior. Debe encargarse

también de capturar la señal “SIGHUP” y, cuando esto suceda, cargar de nuevo la configuración

releyendo el fichero Producer.config.

Una vez ha recargado la configuración, debe:

Gestionar los topics existentes cerrando los que correspondan a unidades de a bordo inactivas

y creando uno por cada nueva unidad de a bordo en activo.

Ocuparse de los productores simples. Esta tarea consiste en mantener vivos los procesos

asociados a los productores vinculados a topics activos, matar los procesos asociados a topics

que han sido eliminados y crear un nuevo proceso de productor por cada topic que haya sido

creado tras la última recarga de configuración.

[Kafka-Server] host = localhost port = 9092 [Zookeeper] host = localhost port = 2181 [Topics] id_unidad_de_a_bordo_1 = ruta_ficheros_1 id_unidad_de_a_bordo_2 = ruta_ficheros_2 id…

Tabla 29: Contenido del fichero de configuración Producer.config

Page 55: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

35

35 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

5.1.3 Producer

Este componente es el encargado de:

Crear y asociar un productor simple al servidor de Kafka especificado en el fichero de

configuración.

Comprobar validez de los ficheros de datos.

Leer datos de los ficheros y enviarlos al topic correspondiente utilizando la fecha de la toma

de datos, seguida del número de mensaje asociado a ese fichero entre paréntesis) como

identificador o key del mensaje. Por ejemplo, para envíos sucesivos de fragmentos del fichero

con fecha 7C011245, los identificadores serían 7C011245(0), 7C011245(1), etc.

Mover los ficheros leídos a la carpeta “Sent_Files”.

Además, cuenta con un manejador para la recepción de la señal de terminación de proceso (SIGTERM)

de forma que cuando esta sea recibida no termine de forma abrupta sino que lo haga cuando concluya

la lectura del fichero en curso, consiguiendo que no se trunque ni se pierda información.

5.2 Implementación del consumidor

Siguiendo en la línea del apartado anterior, a continuación se describirá la implementación del

consumidor diseñado. El contenido se dividirá en diversos subapartados según los módulos en los que

está dividido el código, los cuales son:

Consumer.config: Fichero de configuración principal

MainConsumer.py: Gestiona y coordina todos los módulos involucrados tanto en el proceso

de consumición de datos del servidor de Kafka como los encargados de procesar dichos datos.

[Topic].cfg: Fichero de configuración asociado al topic [Topic].

Consumer.py: Contiene las funciones necesarias para implementar un consumidor de Kafka,

suscribirlo a un topic y recibir datos de él.

Funciones.py: En este fichero se encuentran las funciones que se encargan de analizar los

datos.

Utiles.py: Este fichero incluye las funciones utilizadas por el software del consumidor que no

están orientadas al estudio de los datos.

Database.py: Facilita el acceso a la base de datos.

5.2.1 Fichero de configuración Consumer.config

Al igual que en el caso del módulo de gestión de los productores, el módulo encargado de coordinar

el escenario en el lado de los consumidores necesita conocer ciertos parámetros para poder hacerlo.

Estos datos los los consigue gracias al fichero de configuración Consumer.config, dividido en tres

secciones (entre corchetes).

A continuación se enuentra el contenido de este fichero, relleno con valores ficticios a modo de

ejemplo:

Page 56: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Implementación

36

36

Se distinguen tres secciones: Kafka-Server. Database y Topic.

Los atributos de la primera sección son:

Host: dirección del host que aloja el servidor de Kafka

Port: puerto asociado

En la sección Database los atributos corresponden a:

Host: dirección del host donde se encuentra la base de datos

Database: nombre de la base de datos

User: usuario propietario de la base de datos

Pass: contraseña del usuario

Por último, en las secciones TopicX, los parámetros serán:

Vehículo: matrícula del vehículo del que se han tomado los datos.

Path: ruta hacia el fichero de configuración asociado al topic.

[Kafka-Server]

host = localhost

port = 9092

[Database]

host = localhost

database = tfg

user = dit

pass = dit

[Topic1]

vehiculo = JVT2017

path = Topic1.cfg

[Topic2]

vehiculo = MPH1995

path = Topic2.cfg

[Topic..]

Tabla 30: Contenido del fichero de configuración "Consumer.config"

Page 57: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

37

37 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

5.2.2 MainConsumer

Es núcleo del módulo del consumidor. Su misión es gestionar tanto los procesos encargados de extraer

y analizar la información de los topics de Kafka como el objeto encargado del acceso y manipulación

de la base de datos, ayudándose de los datos extraídos del fichero de configuración que se ha descrito

en la sección anterior. Debe encargarse también de recargar la configuración releyendo el fichero

Consumer.config cuando se reciba la señal “SIGHUP”.

Una vez se haya cargado la configuración, se ocupará de:

Actualizar la configuración relativa al acceso a la base de datos.

Cerrar aquellos procesos activos en los que el consumidor esté suscrito a un topic en desuso.

Mantener vivos los procesos vinculados a los topics que continúan activos.

Crear un proceso de consumidor por cada nuevo topic creado.

5.2.3 Ficheros de configuración [Topic].cfg

Estos ficheros contienen se dividen en tantas secciones, identificadas por un id independiente de la

implementacion, como operaciones distintas se desean realizar sobre los datos. Cada sección tendrá

un set de atributos personalizado en función de la operación a la que esté dedicada.

A continuación se presenta un fichero de ejemplo que muestra los distintos parámetros de las secciones

según el tipo de operación que se realiza. Los valores que rellenan los campos se han escogido a modo

de ejemplo:

Page 58: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Implementación

38

38

[ID_Operacion_1]

function = Derivada

SPNs = [92]

intervalo = 3

umbral = 60

criterio = False

[ID_Operacion_2]

function = Evolucion

SPNs = [1099,1100,1102]

normalizada = True

intervalo = 9

[ID_Operacion_3]

function = Correlacion

SPNs = [[90, 190],[183, 513],[190, 1717],[91, 512],[91, 513],[92, 183],[92, 512],[92, 513]]

umbral = 0.90

limite = 0.1

intervalo = 3

[ID_Operacion_4]

function = Evolucion_cond

SPNs = [[100, 190]]

umbral = 1000

criterio = True

normalizada = False

intervalo = 9

[ID_Operacion_5]

function = Alarma

SPNs = [168]

umbral = 27

criterio = False

intervalo = 3

Tabla 31: Fichero de configuración asociado a un topic

Page 59: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

39

39 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

5.2.4 Consumer

Esta parte de la implementación es la encargada de interactuar con los topics de Kafka.

Comienza creando un consumidor y suscribiéndolo al topic cuyo identificador ha recibido como

parámetro.

Seguidamente, toma del fichero de configuración las operaciones que debe realizar sobre os datos que

reciba del topic al que se ha suscrito.

Por último, comienza un bucle infinito que consiste en:

1. Recibir mensajes de datos del topic hasta recomponer un set completo (mismo valor del campo

‘key’)

2. Comprobar que se ha recibido un set de datos completo, incluyendo las cabeceras.

3. Comprobar que se cumple alguno de los intervalos de estudio.

4. Operar sobre los datos, si el intervalo es válido.

5. Guardar los resultados en la base de datos haciendo uso de la clase Database, si el intervalo es

válido.

Este bucle se repite infinitamente a no ser que el topic de desactive, en cuyo caso se cerrará el

consumidor finalizando el proceso.

Debe encargarse también de recargar las condiciones de análisis releyendo su fichero de configuración

asociado cuando se reciba la señal “SIGHUP”.

Como la mayor parte de las operaciones tienen un resultado gráfico, se deben almacenar imágenes en

la base de datos. Para ello, ante la imposibilidad de almacenar las imágenes construidas, el resultado

de cada scatter plot (en el caso de la operación de derivada) o del plot (en el resto de operaciones) se

almacenará en un archivo png temporal que se destruirá automáticamente una vez se haya convertido

esa imagen png a un array de bits, que si es un formato apto. Para reconstruir la imagen a partir de una

consulta a la base de datos únicamente habría que invertir el proceso.

5.2.5 Database

La clase Database permite implementar objetos que se comuniquen con una base de datos, proporcionando

métodos capaces de interactuar con ella para:

Crear y borrar todas las tablas utilizadas por nuestro software para almacenar los resultados de los

análisis realizados sobre los datos, cuyos nombres son Logs, Derivada, Correlacion, Evolucion y

Evolucion_cond.

Insertar y guardar información en dichas tablas.

5.3 Base de datos

La base de datos, tal como se especificó anteriormente, contendrá las cuatro tablas necesarias para el

almacenamiento de los resultados del análisis de los datos: Alarma, Derivada, Correlación, Evolución

y Evolución_cond. Por otro lado, existirá también una tabla llamada Logs destinada al almacenamiento

de los avisos del programa, tales como sets de datos incompletos o incumplimiento de las condiciones

de alguna operación.

A continuación se describe la estructura de la base de datos, comenzando a grandes rasgos para luego

profundizar en cada uno de sus elementos.

Page 60: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Implementación

40

40

5.3.1 Estructura general

En cuanto a la estructura general de la base de datos, las relaciones de las que se hace usoen el

software desarrollado serán “alarma”, “correlación”, “derivada”, “evolución”, “evolución_cond” y

“logs”. Cada una de ellas almacena la información resultante de la operación de análisis de datos con

el mismo nombre.

Las relaciones mencionadas se presentan en la siguiente imagen:

Tabla 32: Estructura de la base de datos

Todas ellas comparten una serie de atributos: vehiculo, u_a_bordo,fecha_i, intervalo e imagen, los

cuales se corresponden, respectivamente, con el vehículo del que se han extraído los datos, la unidad

de abordo encagada de hacerlo, la fecha de inicio de la toma de datos, la duración del intervalo de

estudio, y la imagen que representa el resultado del análisis.

5.3.2 Tabla de correlación

La tabla de nombre “correlación” es, como su propio nombre indica, la encargada de almacenar los

datos resultants del análisis de correlación.

Sus atributos son vehículo, u_a_bordo, fecha_i, intervalo, SPN_1, SPN_2, umbral, corr_coef e imagen,

donde SPN_1, SPN_2, umbral y corr_coef corresponden respectivamente al identificador del primer

parámetro involucrado, el identificador del Segundo parámetro, el umbral mínimo que debe supercar

el coeficiente de correlación y el coeficiente de correlación.

Tabla 33: Estructura tabla "Correlacion"

Page 61: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

41

41 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

5.3.3 Tabla de derivada

Esta tabla, que contiene los resultados del análisis de derivada, está compuesta por los siguientes

atributos: vehículo, u_a_bordo, fecha_i, intervalo, SPN, umbral, criterio e imagen. Los atributos SPN,

umbral y criterio representan el identificador del parámetro estudiado, el valor crítico para su estudio

y el criterio de superación a aplicar a ese valor (exceso o defecto) para la realización del análisis,

respectivamente.

Tabla 34: Estructura tabla "Derivada"

5.3.4 Tabla evolucion

La tabla evolucion contiene los atributos SPN y normalizado, que son el identificador del parámetro

estudiado y un indicador de si el resultado gráfico está normalizado o no.

Tabla 35: Estructura tabla "Evolucion"

5.3.5 Tabla evolucion_cond

Esta tabla corresponde al análisis de evolución condicionada.

Los atributos SPN_1 y SPN_2 hacen referencia, respectivamente, al parámetro a estudiar y al

parámetro que condiciona la realización o no de ese estudio. Por otro lado, los atributos normalizado,

criterio y umbral corresponden a si el resultado está normalizado o no, el criterio (exceso o defecto)

aplicado a la superación del umbral, y, por ultimo, el umbral crítico aplicado al parámetro

condicionante.

Page 62: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Implementación

42

42

Tabla 36: Estructura tabla "Evolucion_cond”

5.3.6 Tabla alarma

La siguiente relación se encarga de almacenar las alertas generadas por la operación de alarma. El

atributo SPN identifica al parámetro estudiado y descripción contiene la incidencia registrada.

Ilustración 14: Estructura tabla "Alarma"

5.3.7 Tabla logs

La última de las tablas, logs, almacena las incidencias registradas a lo largo de la realización de las operaciones

de análisis mencionadas anteriormente.

Sus atributos difieren de los que poseían las relaciones anteriores. El atributo id comienza en 0 y se va

autoincrementando con cada nuevo log registrado, fecha_log es la marca de tiempo en la que se registra el log,

funcion identifica a la operación con la que se relaciona la incidencia y descripcion contiene una breve

explicación del suceso.

Tabla 37: Estructura de la tabla de logs

Page 63: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

43

43 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

5.4 Implementación de la web de consulta de los resultados

Como se mencionó en el apartado de diseño, se ha optado por una web para la visualización y filtrado

de los resultados.

Esta web tendrá dos componentes principales:

Formulario (Index.jsp): será la página inicial. Presentará una serie de opciones para filtrar los

contenidos.

Tabla de resultados (Consulta.py): esta página mostrará los resultados de la búsqueda.

Además, habrá un tercer fichero involucrado llamado spnslist.txt, que contiene todos los pares {id :

nombre} correspondientes a los parámetros que se estudian.

5.4.1 Formulario

El formulario será la página inicial de la web. Presenta una serie de campos que permitirán al usuario filtrar los

resultados. Dichos campos varían dinámicamente en función de la tabla elegida en la lista desplegable; por

ejemplo:

Tanto si la tabla elegida es “alarma” como si es “derivada”, se mostrarán como opciones de filtrado la

fecha, la hora, el nombre del vehículo, la unidad de a bordo, el intervalo, el umbral y el criterio aplicados,

y el identificador del parámetro estudiado.

Ilustración 15: Formulario Alarma / Derivada

Page 64: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Implementación

44

44

Si se escoge “correlación”, los campos que se mostrarán son la fecha, la hora, el nombre del vehículo,

la unidad de a bordo, el intervalo, el umbral aplicado, y los identificadores de los parámetros estudiados.

Ilustración 16: Formulario correlación

Para la opción de “evolución”, las opciones disponibles son la fecha, la hora, el nombre del vehículo, la

unidad de a bordo, el intervalo, si el resultado está normalizado o no, y el identificador del parámetro

estudiado.

Ilustración 17: Formulario evolución

Page 65: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

45

45 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

En “evolución condicionada”, aparecen las opciones de filtrado de la fecha, la hora, el nombre del

vehículo, la unidad de a bordo, el intervalo, el criterio y el umbral aplicados, si está normalizado o no

el resultado, y los identificadores de los parámetros estudiados.

Ilustración 18: Formulario evolución condicionada

Por ultimo, si la opción elegida es “logs”, los campos que aparecen son: la fecha, la hora, el nombre del

vehículo, la unidad de a bordo, la función, y el identificador del parámetro estudiado.

Ilustración 19: Formulario logs

Page 66: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Implementación

46

46

5.4.2 Tabla de resultados

El formulario anterior redirige hacia esta segunda página, que se encarga de conectar con la base de

datos para realizar la consulta, teniendo en cuenta las condiciones seleccionadas, y de presentar los

resultados.

Como se comentó en puntos anteriores, las imágenes se guardan en la base de datos en formato de

arrays de bits, lo cual añade otra tarea a esta web, que consiste en restaurar dichas imágenes a su forma

original.

Los resultados se presentan en formato de tabla, incluyendo las imágenes, que aparecerán en miniatura

y se ampliarán al pulsar sobre ellas. Para devolverlas al tamaño en miniature habrá que pulsar sobre

ellas de nuevo.

Por ejemplo, si se realiza una consulta sobre la tabla de correlación, los resultados se muestran en una

tabla como la siguiente:

Ilustración 20: Consulta evolución I

Como se ha comentado, si se pulsa sobre la imagen, esta se amplía:

Ilustración 21: Consulta evolución II

Page 67: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

47

47 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

Para finalizer, otro ejemplo sería realizar una consulta sobre la tabla de logs:

Ilustración 22: Consulta tabla de logs

Page 68: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que
Page 69: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

49

6 PRUEBAS Y VALIDACIÓN

ste capítulo se centra en la descripción de las pruebas realizadas para simular escenarios reales,

cuyo objetivo es verificar la validez del diseño y la implementación realizadas. Estas pruebas se

realizarán en una máquina virtual Linux con Ubuntu instalado.

La versión de MySQL utilizada será la 14.14 Distrib 5.7.18.

Para Apache Kafka se usará la versión 2.10.

La instalación y configuración detallada de los componentes involucrados aparece documentada en el

Anexo A.

6.1 Puesta en marcha del escenario

Para poner en marcha el software, lo primero que se debe hacer es arrancar el servidor de Zookeeper

y el servidor de Apache Kafka, en este orden. Ambos se ejecutarán en la propia máquina.

Para arrancar Zookeeper se debe ejecutar el siguiente commando en una terminal, donde “/opt/kafka/”

es la ruta en la que se encuentra instalado Apache Kafka:

/opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties

Para arrancar el servidor de Kafka, el commando a ejecutar es:

/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties

El segundo paso es cumplimentar los ficheros de configuración, tanto Producer.config como

Consumer.config y los propios de cada topic ( [Topic].cfg). Además, debemos crear un usuario en

MySQL y una base de datos, que serán los utilizados por el software. Para las pruebas usaremos un

usuario dit con contraseña dit, y una base de datos cuyo nombre será tfg.

El siguiente paso a seguir será iniciar el productor principal:

python MainProducer.py

Por último, ejecugaremos el consumidor principal, MainConsumer.py:

python MainConsumer.py

E

Science is about knowing;

engineering is about doing.

- Henry Petroski -

Page 70: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Pruebas y validación

50

50

Una vez seguidos estos pasos, se tiene el escenario completo en funcionamiento por lo que se puede

proceder a la realización de pruebas. Estas pruebas consistirán en:

Modificación del fichero de configuración Producer.config

Detección de archivo inválido

Modificación del fichero de configuración Consumer.config

Modificación del fichero de configuración de un topic.

Procesamiento de datos correctos

Procesamiento de datos erróneos

Consulta de los resultados

6.2 Prueba 01: Modificación del fichero de configuración Producer.config

Esta prueba tiene el objetivo de comprobar el correcto funcionamiento de la recarga de configuración

en el productor principal, MainProducer.

Se comenzará arrancando MainProducer para que inicie tres procesos paralelos, uno para cada

productor, asociados a los topics 1495, 1496 y 1497. Como se puede observar en la siguiente imagen,

existe un proceso principal de MainProducer y de él nacen 3 subprocesos, que corresponderían a los

antes mencionados.

Ilustración 23: Prueba 01 "Procesos iniciales I"

El propio MainProducer imprime también la información relativa a estos subprocesos, incluyendo

además la del propio proceso principal:

Ilustración 24: Prueba 01 "Procesos iniciales II"

Cada uno de estos subprocesos está asociado a uno de los topics mencionados anteriormente. La existencia de

dichos topics se comprueba fácilmente:

Ilustración 25: Prueba 01 "Topics iniciales"

Una vez que se encuentra el escenario en funcionamiento, se modificará el número de topics añadiendo

uno nuevo con identificador 1498, y a continuación se enviará al proceso la señal SIGHUP para que

recargue la configuración.

Page 71: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

51

51 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

En las siguientes imágenes se presenta el resultado: al recibir la señal, MainProducer crea un nuevo

proceso de Producer asociado al topic 1498.

Ilustración 26: Pueba 01 "Procesos tras primera recarga de configuración I"

Este evento también se notifica en la salida del proceso principal:

Ilustración 27: Prueba 01 "Procesos tras primera recarga de configuración II"

Se puede comprobar, además, la existencia del nuevo topic:

Ilustración 28: Prueba 01 "topics tras primera recarga de configuración"

Por último, se realizará el proceso inverso: se eliminarán del fichero de configuración los topics 1495

y 1497 y se enviará de nuevo una señal SIGHUP al proceso principal. Se comprobará que los procesos

asociados a los topics eliminados de la configuración desaparecen, al igual que los topics

correspondientes de Apache Kafka se destruyen.

. Ilustración 29: Prueba 01 "Procesos tras la segunda recarga de configuración I"

El proceso principal también realiza notificaciones sobre los procesos terminados y los topics que han sido

eliminados:

Page 72: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Pruebas y validación

52

52

Ilustración 30: Prueba 01 "Procesos tras la segunda recarga de configuración II"

Por último se comprueba que los topics asociados a los productores finalizados han sido eliminados:

Ilustración 31: Prueba 01 "Topics tras la segunda recarga de configuración"

6.3 Prueba 02: Archivo csv inválido

Esta prueba es simple: entre los archivos a procesar por el productor asociado al topic 1496,

incluiremos uno con un título inválido. El productor deberá detectar la anomalía y notificar la

incidencia por pantalla. Como se puede observar, el fichero no pasa la comprobación de fecha, con lo

cual es movido a la carpeta Sent_Files sin ser procesado:

Ilustración 32: Prueba 02 "Archivo csv inválido"

6.4 Prueba 03: Modificación del fichero de configuración Consumer.config

La prueba que se va a realizar a continuación es muy similar a la primera prueba: se va a comprobar

el buen funcionamiento de la recarga del fichero de configuración de MainConsumer,

Consumer.config.

Inicialmente se arrancará el programa principal para que despliegue tres consumidores asociados a los

topics 1495, 1496 y 1497, respectivamente.

Page 73: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

53

53 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

Ilustración 33: Prueba 03 "Procesos iniciales I"

Al igual que como ocurría con MainProducer, el proceso principal del Consumidor también informa

sobre la creación y destrucción de procesos:

Ilustración 34: Prueba 03 "Procesos iniciales II"

A continuación, se va a eliminar el consumidor asociado al topic 1495 del fichero de configuración

Consumer.config, y se va a enviar la señal de recarga al programa principal.

Ilustración 35: Prueba 03 "Procesos tras primer cambio de configuración I"

Ilustración 36: Prueba 03 "Procesos tras primer cambio de configuración II"

Por último, se van a añadir dos consumidores más al fichero de configuración, recuperando el

eliminado en el punto anterior y añadiendo uno nuevo suscrito al topic 1498.

Ilustración 37: Prueba 03 "Procesos tras segundo cambio de configuración"

Page 74: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Pruebas y validación

54

54

6.5 Prueba 04: Modificación fichero de configuración de topic

En esta prueba se van a introducir cambios en el fichero de configuración de un topic durante el

funcionamiento del consumidor para verificar que en la primera iteración tras la recepción de la señal

de recarga se aplican automáticamente los cambios.

El resultado se comprobará mostrando el contenido de las tablas, listando todas las columnas excepto

la encargada de almacenar la imagen en forma de array de bits.

En la operación de evolución temporal se van a realizar modificaciones en dos parámetros: el intervalo

y la normalización; en cuanto al primero, se modificará pasando de valer 6 minutos a 3 minutos, y en

cuanto al segundo, pasará de no pedir la normalización de los resultados a hacerlo.

Tabla 38: Prueba 04 "Modificación parámetros del análisis de evolución"

En la operación de correlación se va a modificar el umbral mínimo de aceptación para el coeficiente,

pasando de 0.70 a 0.90. Como se puede observar el cambio se aplica inmediatamente en el análisis del

segundo set de datos:

Tabla 39: Prueba 04 "Modificación parámetros del análisis de correlación"

Page 75: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

55

55 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

Por último, en la operación derivada se modificará el umbral crítico para la realización del análisis, que pasará

de 40 a 60:

Ilustración 38: Prueba 04 "Modificación parámetros del análisis de derivada"

6.6 Prueba 05: Procesamiento de datos correctos que no cumplen las condiciones

En este apartado de pruebas se van a procesar normalmente datos de diversos topics. Serán datos

correctos pero habrá casos en los que el par escogido para la operación de correlación no cumpla con

el umbral mínimo establacido. En ese caso, deberá añadirse una tupla a la tabla de logs describiendo

la incidencia.

Tabla 40: Prueba 05 "Procesamiento de datos correctos"

6.7 Prueba 06: Procesamiento de datos incorrectos

Esta última prueba consistirá en procesar un set de datos incompleto, donde alguno de los parámetros

que se quieren procesar no tiene datos asociados. En caso de que esto ocurra, debe insertarse una tupla

en la tabla de logs describiendo la irregularidad encontrada.

Para esta prueba se ha escogido un set de datos donde no existen valores para el parámetro 190.

Page 76: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Pruebas y validación

56

56

Tabla 41: Prueba 06 "Procesamiento de datos incorrectos"

6.8 Resultados

Para finalizar este apartado de pruebas y validación, se van a mostrar algunos de los resultados y

gráficos obtenidos de los análisis y pruebas descritos anteriormente.

Estos resultados se visualizarán con la ayuda de la web desarrollada para este propósito.

6.8.1 Alarma

Un ejemplo de análisis de este tipo sería guardar un aviso cuando el valor del parámetro 168 desciende de 30.

Ilustración 39: Resultados Alarma 01

6.8.2 Correlación

A continuación se van a presentar algunos de los gráficos resultantes del análisis de correlación

efectuado sobre los parámetros.

En primer lugar, se muestra el diagrama de dispersión [15] entre los parámetros 191 y 904, quen tiene

un coeficiente de correlación de 0.999718, lo que indica que están altamente relacionados entre sí. Este

grado de relación se manifiesta gráficamente en que es directamente proporcional a la cercanía entre

los puntos y a la rectitud de de la línea que dibujan.

Page 77: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

57

57 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

Ilustración 40: Resultados Correlación 01

Para contrastar, se incluye ahora el resultado de una correlación de coeficiente 0.705569, realizada

entre los parámetros 92 y 513.

Ilustración 41: Resultados Correlación 02

Page 78: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Pruebas y validación

58

58

6.8.3 Derivada

La representación gráfica de la derivada o pendiente del parámetro es otro de los resultados que se

obtienen.

Por ejemplo, la gráfica de la derivada del parámetro 92 respecto al tiempo en un intervalo de tres

minutos cuando supera el valor 60:

Ilustración 42: Resultado Derivada 01

Para el mismo parámetro y con el análisis sujeto a las mismas condiciones, en el intervalo siguiente la

gráfica quedaría de la siguiente forma:

Ilustración 43: Resultado Derivada 02

Page 79: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

59

59 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

6.8.4 Evolución temporal

A continuación se presenta la evolución temporal normalizada del parámetro 1099 durante 6 minutos

sería.

Ilustración 44: Resultado Evolución temporal 01

6.8.5 Evolución temporal condicionada

Para finalizar, la siguiente imagen representa la evolución temporal del parámetro 100 en los instantes

en que el 190 supera el valor 1000.

Ilustración 45: Resultado evolución temporal condicionada 01

Page 80: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Pruebas y validación

60

60

Page 81: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

61

7 CONCLUSIONES Y POSIBLES LÍNEAS DE

FUTURO

ras haber investigado y recabado información acerca del objeto de nuestro estudio para poder

llevar a cabo el desarrollo del presente proyecto software, el siguiente paso es estudiar el

resultado y expresar las conclusiones obtenidas, aportando además ideas o propuestas de mejora

así como posibles líneas futuras de investigación.

7.1 Conclusiones

Una vez se han realizado la exposición y el análisis de los resultados obtenidos, comenzaremos por

fijarnos en los objetivos iniciales para sacar unas primeras conclusiones. Por tanto, podemos afirmar

que se han cumplido los principales objetivos del proyecto:

Se ha desarrollado un sistema ágil, capaz de procesar grandes volúmenes de datos en paralelo

a muy alta velocidad.

El software es configurable y reconfigurable a lo largo de todo su ciclo de vida, de manera al

modificar sus parámetros se adapta y actualiza su comportamiento para satisfacer las nuevas

restricciones.

A partir de los resultados del estudio de los datos se pueden obtener patrones de

comportamiento, dependencias entre parámetros, tendencias, etc. que permitan, tras estudios

posteriores, parametrizar el comportamiento de un vehículo y utilizarlo para realizar un

mantenimiento predictivo.

La satisfacción de estos objetivos nos lleva a plantear nuevas conclusiones. Gracias a este proyecto

deja de ser imprescindible almacenar en la base de datos todos los valores de las tomas de medidas,

ya que únicamente se almacenan los parámetros del análisis y sus resultados. Esto supone un gran

ahorro tanto en tiempo como en recursos, reduciendo notablamente la carga de la base de datos.

T

Sometimes when you innovate, you make mistakes.

It is best to admit them quickly, and get on with

improving your other innovations.

- Steve Jobs -

Page 82: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Conclusiones y posibles líneas de futuro

62

62

7.2 Posibles líneas futuras

Es evidente que, al igual que cualquier otro software, este proyecto irá sufriendo modificaciones a lo

largo del tiempo en pro de optimizarlo y de mejorarlo, añadiendo nuevos métodos de análisis, por

ejemplo.

En cuanto a posibles líneas de futuro, existen diversas posibilidades.

Una posible alternativa consiste en que, aunque este proyecto ha sido desarrollado y enfocado al

estudio de una flota de autobuses, con mínimas modificaciones podría ser aplicable a otros conjuntos

de vehículos o máquinas.

Otro camino de continuación sería continuar con el procesamiento de los datos. Los resultados

obtenidos a partir de los análisis realizados por este software podrían ser estudiados para hallar

patrones de comportamiento que permitan realizar el mantenimiento predictivo sobre los elementos

en cuestión.

Por último, otra posible vía de mejora sería el uso de versiones más actualizadas de Apache Kafka o

la adaptación del software a otros motores de bases de datos.

Page 83: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

63

REFERENCIAS

[1] «European Federation of National Maintenance Societies,» [En línea]. Available:

http://www.efnms.eu/about-us/what-does-efnms-stand-for/.

[2] «Preditec - conceptos Mantenimiento predictivo,» [En línea]. Available:

http://www.preditec.com/mantenimiento-predictivo/.

[3] K. H. Adjallah, Advances in Degradations Monitoring and Predictive Maintenance, 2007.

[4] «IOT,» [En línea]. Available: https://www.t-systemsblog.es/revolucion-iot-empresas/.

[5] «IOE,» [En línea]. Available: https://www.t-systemsblog.es/iot-ioe/.

[6] «Volvo Truks,» [En línea]. Available: http://www.volvotrucks.es/es-es/services/fleet-management.html.

[7] « Navistar IOT,» [En línea]. Available: http://www.ciospain.es/industria-y-utilities/navistar-acelera-sus-

proyectos-de-iot-y-vehiculos-conectados.

[8] «Proactive Solutions,» [En línea]. Available: http://www.ciospain.es/industria-y-utilities/goodyear-

disena-una-solucion-para-gestionar-flotas-basada-en-el-analisis-de-big-data.

[9] «Patrón publicador-suscriptor,» [En línea]. Available:

https://es.wikipedia.org/wiki/Observer_(patr%C3%B3n_de_dise%C3%B1o).

[10] «Apache Kafka Distributed Streaming Platform,» [En línea]. Available:

https://kafka.apache.org/documentation/.

[11] «Apache Zookeeper,» [En línea]. Available: https://zookeeper.apache.org/.

[12] «MySQL,» [En línea]. Available: https://www.mysql.com/.

[13] «Python doc,» [En línea]. Available: http://docs.python.org.ar/tutorial/3/real-index.html.

[14] «Kafka-python,» [En línea]. Available: https://github.com/dpkp/kafka-python.

[15] «Diagrama de dispersión,» [En línea]. Available: https://prezi.com/5eypa4mnrlz7/diagrama-de-

dispersion-scatter-plot/.

Page 84: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Referencias

64

64

Page 85: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

65

ANEXO A: INSTALACIÓN Y CONFIGURACIÓN DEL

ESCENARIO

En este anexo se detallan los pasos a seguir para la instalación y configuración de los distintos

elementos que participan en el escenario escogido para desarrollar y probar el software.

PYTHON

Lo primero será instalar Python. Para el desarrollo de esta herramienta se ha usado la versión 2.7.

Una vez hecho esto, deberán instalarse las librerías necesarias:

APACHE KAFKA Y ZOOKEEPER

Para seguir, se debe instalar el software de Apache Kafka. Para ello se ejecutarán los siguientes

comandos:

# Se descarga la versión de Apache Kafka a instalar

wget http://apache.uvigo.es/kafka/0.10.2.0/kafka_2.10-0.10.2.0.tgz

# Se descomprime, se renombra el directorio resultante y se mueve a /opt

tar -xvf kafka_2.10-0.10.2.0.tgz

mv kafka_2.10-0.10.2.0 kafka

mv kafka /opt

sudo apt-get install Python

sudo pip install mysql-connector==2.1.4

sudo pip install matplotlib

sudo pip install protobuf

sudo pip install MySQL-python

sudo apt-get install –y python-tk

Page 86: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Anexo A: Instalación y configuración del escenario

66

66

A continuación, para permitir la eliminación de topics y para aumentar el tamaño máximo de los

mensajes que puede recibir Kafka, se añadirán las siguientes líneas al fichero

config/server.properties:

Para arrancar el servidor, suponiendo que Kafka está instalado en /opt, los comandos a utilizar

serán (situándonos en el directorio /opt/kafka ):

bin/zookeeper-server-start.sh config/zookeeper.properties

bin/kafka-server-start.sh config/server.properties

Para parar el servidor, suponiendo que Kafka está instalado en /opt, los comandos a utilizar

serán (situándonos en el directorio /opt/kafka ):

bin/kafka-server-stop.sh

bin/zookeeper-server-stop.sh

MYSQL

En este apartado se detallará la instalación del motor de base de datos utilizado, MySQL.

Para comenzar, se instala el servidor de mysql:

A continuación se crearán un usuario y una base de datos, que serán los que utilizará el software.

sudo apt-get update

sudo apt-get install mysql-server –y

delete.topic.enable=true

message.max.bytes=104857600

replica.fetch.max.bytes=107374182

max.message.bytes=104857600

git clone https://github.com/mumrah/kafka-python

pip install ./kafka-python

Page 87: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

67

67 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

SERVIDOR WEB

Para poder desplegar la web será necesario un servidor. En este caso se ha utilizado Tomcat en su

versión 7.0.

Para la instalación del servidor, debe ejecutarse:

En cuanto a la configuración del servidor, por un lado debe modificarse el archivo server.xml,

añadiendo un contexto (dentro de la etiqueta Host) para la aplicación a desplegar. En este caso, el

nombre del directorio que contiene la aplicación web a servir es TFG_Monica, que se encuentra

dentro del directorio /tmp/, y se accederá a ella con el alias “/Appweb”:

mysql

# Se crea el usuario ‘dit’ con contraseña ‘dit’

CREATE USER 'dit'@'localhost' IDENTIFIED BY 'dit';

# Se crea la base de datos ‘tfg’

CREATE DATABASE tfg;

# Se conceden permisos al usuario sobre la base de datos

GRANT ALL ON tfg.* TO 'dit'@'localhost';

# Para acceder con el usuario creado

mysql –u dit –p

# Para acceder a la base de datos creada

USE tfg;

sudo apt-get install tomcat7

<Host name="localhost" appBase="webapps"

unpackWARs="true" autoDeploy="true">

...

<Context path="/AppWeb"

docBase="/tmp/TFG_Monica/"

debug="0"

reloadable="true"

privileged="true"/>

</Host>

Page 88: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Anexo A: Instalación y configuración del escenario

68

68

Por otro lado debe modificarse el archivo web.xml permitiendo el uso de CGI y especificando un

alias para acceder a la ruta “/WEB-INF/cgi”, que en este caso ha sido “cgi-bin”. Las líneas a

añadir a dicho archivo son:

:

Los archivos que componen la web estarán situados en la jerarquía del directorio web de la

siguiente forma:

Una vez realizadas todas estas configuraciones, se incia el servidor:

sudo service tomcat7 start

/TFG_Monica

\_ index.jsp

\_ spnlist.txt

\_ /META-INF

\_ /WEB-INF

\_ /cgi

\_ consulta.py

<servlet>

<servlet-name>cgi</servlet-name>

<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>

<init-param>

<param-name>cgiPathPrefix</param-name>

<param-value>WEB-INF/cgi</param-value>

</init-param>

<init-param>

<param-name>executable</param-name>

<param-value></param-value>

</init-param>

<load-on-startup>5</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>cgi</servlet-name>

<url-pattern>/cgi-bin/*</url-pattern>

</servlet-mapping>

Page 89: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

69

69 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

Para acceder a la aplicación web, debe introducirse la siguiente url en el navegador, suponiendo

que la app se despliega en la propia máquina, localhost:

http://localhost:8080/AppWeb/index.jsp

En caso de que se desplegara en otra máquina, habría que sustituir ‘localhost’ por la dirección IP

de la máquina en cuestión.

Page 90: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que
Page 91: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

71

ANEXO B: MANUAL DE USUARIO

Este anexo pretende explicar cómo utilizar la herramienta desarrollada.

Se divide en dos categorías principales: el Productor y el Consumidor.

PRODUCTOR

En este apartado se detalla la configuración y uso del componente asociado al productor de Kafka.

o Fichero de configuración

Este componente de la herramienta posee un único fichero de configuración:

Producer.config. El esquema de este fichero es el siguiente, donde los valores entre

paréntesis deben sustituirse por los valores deseados:

o Ejecución

Para arrancar el Productor se debe usar el siguiente comando:

python MainProducer.py

[Kafka-Server]

host = (DireccionServidorDeKafka)

port = (PuertoAsociadoAlServidorDeKafka)

[Zookeeper]

host = (DireccionServidorDeZookeeper)

port = (PuertoAsociadoAlServidorDeZookeeper)

[Topics]

(IdTopic1) = (RutaHaciaFicherosTopic1)

(IdTopic2) = (RutaHaciaFicherosTopic2)

(…) = (…)

Page 92: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Anexo B: Manual de Usuario

72

72

o Recargar configuración

Para que se recargue la configuración asociada al Productor se debe usar el siguiente

comando, donde PID es el identificador del proceso principal asociado a

MainProducer.py:

kill –s HUP PID

CONSUMIDOR

En este apartado se detalla la configuración y uso del componente asociado al consumidor de

Kafka.

o Fichero de configuración general

A continuación se presenta la estructura del fichero de configuración general,

Consumer.config. Los valores entre paréntesis deben sustituirse por los valores que

desee el usuario.

[Kafka-Server]

host = (DireccionServidorDeKafka)

port = (PuertoAsociadoAlServidorDeKafka)

[Database]

host = (DireccionServidorBaseDeDatos)

database = (NombreBaseDeDatos)

user = (NombreUsuario)

pass = (Contraseña)

[(IdTopic1)]

vehiculo = (MatrículaVehículo1)

path = (RutaFicheroConfiguracionTopic1)

[(IdTopic2)]

vehiculo = (MatrículaVehículo2)

path = (RutaFicheroConfiguracionTopic2)

Page 93: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

73

73 Sistema de ayuda al análisis de datos distribuido para el mantenimiento predictivo de flotas de vehículos

o Fichero de configuración de topic

El fichero de configuración asociado a cada topic está formado por tantas secciones

como se quiera, cuyo nombre es indiferente a la ejecución del programa, donde cada

una de ellas representa un análisis a realizar sobre los parámetros.

A continuación se presentan los distintos tipos de análisis que se pueden realizar, y las

opciones asociadas a ellos:

[id1]

function = Derivada

SPNs = [(spn1), (spn2), ...]

intervalo = (Periodo de tiempo de duracion del analisis (minutos))

umbral = (Valor limite para el estudio del parámetro)

criterio = (El umbral se debe superar por exceso/defecto (True/False))

[id2]

function = Evolucion

SPNs = [(spn1), (spn2),...]

intervalo = (Periodo de tiempo de duracion del analisis (minutos))

normalizada = (Devolver resultado con valores normalizados o no (True/False))

[id3]

function = Evolucion_cond

SPNs = [[(spn1),(spn_condicion)],[(otro par)], ..]

intervalo = (Periodo de tiempo de duracion del analisis (minutos))

umbral = (Valor limite del segundo parametro utilizado como condición)

criterio = (Superar umbral por exceso/defecto (True/False))

normalizada = (Devolver resultado con valores normalizados o no (True/False))

[id4]

function = Correlacion

SPNs = [[(spn1),(spn2)],[(otro par)], ..]

intervalo = (Periodo de tiempo de duracion del analisis (minutos))

umbral = (Valor minimo de aceptacion par el coeficiente de correlación)

limite = (valor entre 0 y 1 que marca el porcentaje de valores a descartar en relacion al valor máximo)

[id5]

function = Alarma

SPNs = [(spn1), (spn2), ...]

intervalo = (Periodo de tiempo de duracion del analisis (minutos))

umbral = (Valor critico para el estudio del parámetro)

criterio = (El umbral se debe superar por exceso/defecto (True/False))

Page 94: Trabajo Fin de Grado - bibing.us.esbibing.us.es/proyectos/abreproy/91377/fichero/MemoriaTFG_MonicaPH.pdf · Además, me gustaría darle las gracias a mis profesores por todo lo que

Anexo B: Manual de Usuario

74

74

o Ejecución

Antes de arrancar el Consumidor, se debe preparar el entorno de ejecución:

export MPLBACKEND="Agg"

Para arrancar el Consumidor principal se debe usar el siguiente comando:

python MainConsumer.py

o Recargar configuración

Tanto para recargar la configuración asociada al Consumidor principal como la

configuración asociada a un topic se debe usar el siguiente comando, donde PID es el

identificador del proceso principal asociado a MainConsumer.py o del proceso

encargado de recibir mensajes de ese topic, respectivamente:

kill –s HUP PID