Skip to content

Multithreaded TCP server designed to receive, process, and store vibration data from distributed sensors using a custom data-transfer protocol in the SMART-BRIDGES project

License

Notifications You must be signed in to change notification settings

Shrondi/train-transfer-protocol

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

99 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Train Transfer Protocol - SMART-BRIDGES

Monitorización inteligente del estado estructural de puentes ferroviarios de alta velocidad

Introducción

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.

Índice

Información del proyecto

Financiación

“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).

Características del sistema

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:

  1. 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.

  2. 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.
  3. 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.

  1. 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.

  2. Gestión multi-hilo: El servidor utiliza hilos para manejar múltiples sensores simultáneamente.

  3. Estructura de los archivos CSV: Cada archivo se nombra según la hora de creación, con el formato:

    acceleration_HH-MM-SS.csv
    
    • HH: 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
  4. Estructura de carpetas: Los datos se organizan siguiendo la estructura:

    raiz/YYYY/month_name/DD/sensor_XX
    
    • raiz: 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, donde XX es el número del sensor (por ejemplo, 05).
  5. 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.

Estructura del proyecto

.
├── 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

Estructura de los paquetes

Paquete START (v1)

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

Paquete START (v2)

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

Paquete DATA

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

Paquete END

Campo Tamaño Descripción
opcode 1 byte Código de operación

TODO / Mejoras pendientes

  • 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.

Licencia

Consulta el archivo LICENSE para más detalles.

About

Multithreaded TCP server designed to receive, process, and store vibration data from distributed sensors using a custom data-transfer protocol in the SMART-BRIDGES project

Resources

License

Stars

Watchers

Forks