Servidor UDP concurrente y no bloqueante para la recepción y gestión de los parámtros de configuración de sensores en el marco del proyecto SMART-BRIDGES.
- Información del proyecto
- Financiación
- Licencia
- Dependencias
- Compilación
- Ejecución
- Funcionamiento e información
- Formato de las tramas UDP
- Base de datos
- 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).
Consulta el archivo LICENSE para más detalles.
- CMake >= 3.10
- GCC o Clang (soporte C99)
- SQLite3 y su desarrollo (
libsqlite3-deven Debian/Ubuntu) - Python 3 (opcional, solo para el script de gestión
db/databaseManager.py)
Desde la raíz del proyecto ejecuta:
cmake -B build
cmake --build buildEsto generará el ejecutable en build/UDPServer.
Ejecuta el servidor UDP con:
./build/UDPServerEl servidor escuchará por defecto en el puerto 24243 (puedes modificarlo en config/udp_config.c).
Ubicación del archivo de la base de datos:
El archivodevices.dbdebe encontrarse en la ruta especificada enconfig/udp_config.c(por defecto,~/database-sensors/devices.db).
- Si usas
~, asegúrate de que corresponde al directorio home del usuario que ejecuta el servidor.- Si la ruta es absoluta, verifica que el archivo exista en esa ubicación y que el usuario del servidor tenga permisos de lectura y escritura.
El servidor espera recibir paquetes UDP de sensores, procesa la petición y responde con la configuración correspondiente.
- El formato de los paquetes y la estructura de la respuesta están definidos en el código fuente (
include/udp_handler.h,src/udp_handler.c). - Puedes consultar y modificar la lógica de gestión de sensores en
src/db.cy la configuración global enconfig/udp_config.c. - La documentación técnica se genera automáticamente con Doxygen en la carpeta
docs/htmltras compilar.
Para más detalles sobre el protocolo o ejemplos de uso, consulta el código fuente y la documentación generada.
| Offset | Tamaño | Campo | Descripción |
|---|---|---|---|
| 0 | 31 | version | Versión de firmware (string, null-terminated) |
| 32 | 2 | sensorId | ID del sensor (uint16_t) |
| 34 | 1 | statusCode | Código de estado (uint8_t) |
| Offset | Tamaño | Campo | Descripción |
|---|---|---|---|
| 0 | 31 | firmwareVersion | Versión de firmware (string, null-terminated) |
| 32 | 1 | frequency | Frecuencia (uint8_t) |
| 33 | 1 | scale | Escala (uint8_t) |
| 34 | 1 | enable | Habilitado (uint8_t) |
| 35 | 4 | thresholdStdv | Umbral (float) |
| 39 | 8 | secs | Timestamp (segundos, uint64_t) |
| 47 | 8 | usecs | Timestamp (microsegundos, uint64_t) |
A continuación se muestra el diagrama de la tabla sensors:
+-------------------+-------------------+----------+-------------------------------+
| Campo | Tipo | Clave | Descripción |
+-------------------+-------------------+----------+-------------------------------+
| id | INTEGER | PK | Identificador único |
| name | TEXT | | Nombre del sensor |
| firmware_version | TEXT | | Versión del firmware |
| scale | INTEGER | | Escala configurada |
| frequency | INTEGER | | Frecuencia de muestreo |
| threshold_stdv | REAL | | Umbral de desviación estándar |
| enable | BOOLEAN (0 o 1) | | Habilitado (1) o no (0) |
+-------------------+-------------------+----------+-------------------------------+
Si necesitas crear la base de datos devices.db desde cero, puedes hacerlo fácilmente usando SQLite3 junto a db/scheme-database.sql
cd db
sqlite3 devices.db < scheme-database.sqlEsto generará el archivo devices.db con la tabla sensors lista para ser utilizada por el servidor y las utilidades de gestión.
- id: Identificador único del sensor.
- name: Nombre del sensor.
- firmware_version: Versión del firmware del sensor.
- scale: Escala configurada para el sensor.
- frequency: Frecuencia de muestreo/configuración.
- threshold_stdv: Umbral de desviación estándar.
- enable: Indica si el sensor está habilitado (1) o no (0).
En la carpeta db/ se proporciona el script databaseManager.py para la gestión directa de la base de datos:
- Insertar, borrar, listar y modificar sensores.
- Habilitar/deshabilitar todos los sensores.
- Cambiar la versión de firmware de todos los sensores.
Para usar el gestor desde terminal:
cd db
python3 databaseManager.pyEste repositorio corresponde a un módulo/parte del proyecto principal SMART-BRIDGES.