Volver a BLOX ESL
Demo 2 de 3

Demo industrial

BLOX ESL como motor de reglas para una planta. C genera lecturas de sensores (temperatura, presión, vibración, tanque) y BLOX decide actuadores, alarmas, mantenimiento y paradas de emergencia.

Contexto

En sistemas industriales las políticas y umbrales cambian con más frecuencia que la infraestructura de adquisición. BLOX ESL permite mover esas reglas fuera del código C y editarlas sin recompilar el host.

Sensores en C

El host maneja adquisición, timestamps, buffers y comunicación con PLCs, drivers o sockets. BLOX no toca hardware.

Reglas en BLOX

Umbrales, condiciones y decisiones viven en industrial.blox.

Actuadores en C

BLOX devuelve una tabla de acciones y el host aplica ventilador, bomba, válvula, mantenimiento y seguridad.

Ubicación y ejecución

rutatext
integrations/demo-industrial-C
run.ps1powershell
.\integrations\demo-industrial-C\run.ps1

Compila con libblox_core.a y ejecuta el host C que carga industrial.blox.

¿Qué hace main.c?

Define la estructura Sample con las lecturas industriales, las convierte a JSON, las inyecta a BLOX como TABLA y aplica el resultado.

main.cc
typedef struct Sample {
    const char *name;
    double temperature;
    double pressure;
    double vibration;
    double tank;
    int    emergency_stop;
} Sample;

El host registra su callback nativo:

main.cc
blox_vm_register_native(
    vm,
    "HOST_EVENTO",
    2,
    BLOX_VALUE_EMPTY,
    host_evento,
    &planta
);

Cada muestra se serializa a JSON y se convierte a tabla:

input.jsonjson
[{
  "temperatura": 97.5,
  "presion": 9.1,
  "vibracion": 1.8,
  "tanque": 48.0,
  "paro_emergencia": false
}]
main.cc
blox_vm_table_from_json(vm, json_view, &input);
blox_vm_call(vm, "evaluar_planta", &input, 1, &result);

El host lee la tabla devuelta y aplica cada fila como acción sobre sus actuadores:

ventiladorbomba_tanquevalvula_aliviomantenimientoseguridad

¿Qué hace industrial.blox?

Expone la función evaluar_planta(lectura). Lee los sensores, aplica umbrales, dispara alarmas al host y devuelve la tabla de acciones.

Lee sensores desde la tabla de entrada:

industrial.bloxblox
FUNCION evaluar_planta(lectura)
INICIO
    NUMERICO temp, presion, vibracion, tanque

    temp      = lectura[1].temperatura
    presion   = lectura[1].presion
    vibracion = lectura[1].vibracion
    tanque    = lectura[1].tanque

Aplica reglas configurables:

industrial.bloxblox
SI (temp > 95) ENTONCES
    ventilador = 100
    estado     = "critico"
    mensaje    = "temperatura critica"
    HOST_EVENTO("alarma", "temperatura critica")
FIN_SI

SI (presion > 8.5) ENTONCES
    valvula_alivio = VERDADERO
    HOST_EVENTO("alarma", "presion elevada")
FIN_SI

Devuelve la tabla de acciones para el host:

industrial.bloxblox
AGREGAR(acciones, {
    id      = "seguridad",
    tipo    = "estado",
    valor   = 0,
    activo  = parada,
    estado  = estado,
    mensaje = mensaje
})

RETORNAR acciones
FINAL_FUNCION
Resultado esperado
Resumen industrial: eventos=7 paradas=2

El operador puede ajustar los umbrales (95 °C, 8.5 bar…) editando industrial.blox sin tocar el binario C.

Explora las otras integraciones