Monitorización inteligente del estado estructural de puentes ferroviarios de alta velocidad
El proyecto SMART-BRIDGES tiene como objetivo desarrollar un sistema avanzado para la monitorización del estado estructural de puentes ferroviarios de alta velocidad. Utilizando sensores distribuidos, un protocolo de transferencia de datos eficiente y almacenamiento estructurado, el sistema permite analizar y garantizar la seguridad de estas infraestructuras críticas.
- Introducción
- Información del proyecto
- Financiación
- Características del sistema
- Estructura de los paquetes
- TODO / Mejoras pendientes
- Licencia
- Título:
SMART-BRIDGES
Monitorización inteligente del estado estructural de puentes ferroviarios de alta velocidad - Acrónimo:
SMART-BRIDGES - Referencia:
PLEC2021-007798 - Entidades participantes:
“SMART-BRIDGES – Monitorización inteligente del estado estructural de puentes ferroviarios de alta velocidad”
(Ref. PLEC2021-007798)
Proyecto financiado por:
- Ministerio de Ciencia e Innovación (MCIN)
- Agencia Estatal de Investigación (AEI)
- Unión Europea a través de NextGenerationEU / Plan de Recuperación, Transformación y Resiliencia (PRTR)
Convocatoria de proyectos de I+D+I en Líneas Estratégicas 2021 (PLEC2021), procedimiento de concesión de ayudas a proyectos de I+D+i en colaboración público-privada, del Programa Estatal de I+D+i Orientada a los Retos de la Sociedad, en el marco del Plan Estatal de Investigación Científica y Técnica y de Innovación 2017-2020.
(BOE Núm. 98, de 24 de abril de 2021).
Se ha desarrollado un servidor TCP multihilo diseñado para recibir, procesar y almacenar los datos de vibración enviados por sensores distribuidos, utilizando un protocolo de transferencia de datos propio:
-
Recepción y gestión de paquetes: El servidor implementa una máquina de estados para procesar los paquetes recibidos de los sensores. Según el estado actual, espera y valida el tipo de paquete (START, DATA o END), gestionando las transiciones y el procesamiento adecuado de cada uno. Se realiza control de errores ante paquetes inesperados o secuencias incorrectas, garantizando la integridad de la transferencia de datos.
-
Procesamiento de paquetes: Los paquetes se procesan según su tipo:
- START: Indica el inicio de una secuencia de datos.
- DATA: Contiene datos de aceleración y tiempo.
- END: Marca el final de la secuencia.
-
Almacenamiento en buffer: Los datos se almacenan temporalmente en un buffer circular siguiendo el modelo productor-consumidor. Los hilos productores insertan los datos recibidos en el buffer, mientras que los hilos consumidores extraen los datos para volcarlos a un fichero CSV.
Cada hilo cliente actúa como productor, almacenando la información en su propio buffer que posteriormente es consumido por un hilo consumidor propio.
-
Volcado a CSV: Cuando el buffer alcanza un umbral definido o la transferencia ha terminado, los datos se escriben en un archivo CSV para su almacenamiento persistente dentro de una jerarquía de directorios establecida.
-
Gestión multi-hilo: El servidor utiliza hilos para manejar múltiples sensores simultáneamente.
-
Estructura de los archivos CSV: Cada archivo se nombra según la hora de creación, con el formato:
acceleration_HH-MM-SS.csvHH: Hora (00-23)MM: Minutos (00-59)SS: Segundos (00-59)
Las columnas del archivo son:
- Timestamp: Marca de tiempo en milisegundos.
- X, Y, Z: Valores de aceleración en los ejes correspondientes.
Timestamp,X,Y,Z 1633024800000,0.12,-0.34,0.56 1633024800100,0.15,-0.30,0.60 1633024800200,0.10,-0.32,0.58
-
Estructura de carpetas: Los datos se organizan siguiendo la estructura:
raiz/YYYY/month_name/DD/sensor_XXraiz: Directorio raíz definido por el usuario.YYYY: Año actual (por ejemplo,2025).month_name: Nombre del mes en inglés (por ejemplo,october).DD: Día del mes (por ejemplo,15).sensor_XX: Identificador del sensor, dondeXXes el número del sensor (por ejemplo,05).
-
Gestión de concurrencia: Se utiliza un archivo de bloqueo (
lock file) asociado a cada archivo CSV durante la escritura que después es eliminado automáticamente indicando que se ha terminado de escribir.
.
├── CMakeLists.txt
├── include
│ ├── packet.h
│ ├── packetOptions.c
│ └── packetOptions.h
├── LICENSE
├── README.md
└── server
├── buffer.c
├── buffer.h
├── fileManager.c
├── fileManager.h
├── packetHandlers.c
├── packetHandlers.h
└── serverMain.c
| Campo | Tamaño | Descripción |
|---|---|---|
opcode |
1 byte | Código de operación |
version |
4 bytes | Versión del protocolo |
deviceId |
4 bytes | Identificador único del dispositivo |
| Campo | Tamaño | Descripción |
|---|---|---|
opcode |
1 byte | Código de operación |
version |
4 bytes | Versión del protocolo |
deviceId |
4 bytes | Identificador único del dispositivo |
date |
8 bytes | Marca de tiempo (segundos desde epoch) |
micros |
8 bytes | Microsegundos para mayor precisión |
| Campo | Tamaño | Descripción |
|---|---|---|
opcode |
1 byte | Código de operación |
numero tripletas |
1 byte | Número de registros en el payload |
milliseconds |
4 bytes | Marca de tiempo en milisegundos |
X, Y, Z |
4 bytes cada uno | Valores de aceleración en los ejes |
| Campo | Tamaño | Descripción |
|---|---|---|
opcode |
1 byte | Código de operación |
- Reducir el consumo de memoria en la gestión de buffers.
- Reutilizar los bufffers. Evitar crearlos y elimnarlos consecutivamente.
- Sistema de hilo maestro para la gestión de paquetes y solo hilos consumidores.
- Pools de buffers, hilos, etc....
- Servidor concurrente. Escalar el sistema a un entorno de múltiples clientes.
- Refactorización y organización de código.
- Migración a C++
- Procesamiento por batches
- Operaciones atómicas, no uso de mutexes...
- Implementar un sistema de logs más detallado para depuración.
Consulta el archivo LICENSE para más detalles.