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.
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.
industrial.blox.integrations/demo-industrial-C.\integrations\demo-industrial-C\run.ps1Compila con libblox_core.a y ejecuta el host C que carga industrial.blox.
main.c?Define la estructura Sample con las lecturas industriales, las convierte a JSON, las inyecta a BLOX como TABLA y aplica el resultado.
typedef struct Sample {
const char *name;
double temperature;
double pressure;
double vibration;
double tank;
int emergency_stop;
} Sample;El host registra su callback nativo:
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:
[{
"temperatura": 97.5,
"presion": 9.1,
"vibracion": 1.8,
"tanque": 48.0,
"paro_emergencia": false
}]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_aliviomantenimientoseguridadindustrial.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:
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].tanqueAplica reglas configurables:
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_SIDevuelve la tabla de acciones para el host:
AGREGAR(acciones, {
id = "seguridad",
tipo = "estado",
valor = 0,
activo = parada,
estado = estado,
mensaje = mensaje
})
RETORNAR acciones
FINAL_FUNCIONResumen industrial: eventos=7 paradas=2El operador puede ajustar los umbrales (95 °C, 8.5 bar…) editando industrial.blox sin tocar el binario C.