Comando EVAL - Evaluador de Expresiones
Motor de evaluación de expresiones matemáticas, lógicas y de estado del sistema.
V, AIN, IN, GPS, ECU...
→Aritméticos, lógicos, bitwise
→printf style: %d, %f, %X
→Casos de uso prácticos
→📋 Sintaxis
EVAL expresión[:formato[:valor_error]]| Parámetro | Descripción | Default |
|---|---|---|
expresión | Operación o consulta a evaluar | (obligatorio) |
formato | Formato de salida estilo printf | %.2f |
valor_error | Valor si falla la evaluación | ERR |
Los paréntesis después de EVAL son opcionales. La expresión termina con < o el primer ; encontrado.
Ejemplos Básicos
>EVAL 10 + 5<Resultado: 15.00
>EVAL 10 + 5.5 * 2:%.1f:NA<Resultado: 21.0 (si falla, devuelve NA)
📊 Variables del Sistema
Sin Parámetros
| Variable | Descripción | Unidad | Link |
|---|---|---|---|
V | Tensión principal | dV (28.0V = 280) | |
VBU | Tensión batería respaldo | dV | |
OT | Odómetro total | metros | |
OP | Odómetro parcial | metros | |
CREG | Estado registro red | - | |
CSQ | Calidad señal celular | 0-31 | |
HO | Horómetro | segundos | |
VEL | Velocidad GPS filtrada | km/h | |
AGE | Edad dato GPS | segundos | |
LAT | Latitud | grados×10⁵ | |
LON | Longitud | grados×10⁵ | |
IGN | Estado ignición | 0/1 | |
CEL | Conexión celular | 0/1 | |
GPS | GPS activo | 0/1 | |
PWR | Alimentación | 0/1 | |
JMD | Jamming detectado | 0/1 | |
PK | Parking | 0/1 | |
AC | Acelerómetro | 0/1 | |
WIF | WiFi | 0/1 | |
CAN | Bus CAN | 0/1 |
Con Un Parámetro
| Variable | Descripción | Rango | Link |
|---|---|---|---|
AIN(n) | Entrada analógica | 0-3 | |
IN(n) | Entrada digital | 0-3 | |
XP(n) | Salida digital | 0-n | |
UV(n) | Variable de usuario | 0-n | |
U(n) | Variable auxiliar | 0-n | |
MXB(n) | Buffer XB | 0-n | |
DC(n) | Ángulo (ANG) | 0-n | |
DV(n) | Frecuencia (FRE) | 0-n | |
OW(n) | Sensor 1-Wire | 0-n |
Con Dos Parámetros
| Variable | Descripción | Param 1 | Param 2 |
|---|---|---|---|
ECU(i;t) | Datos ECU | Índice | 0=valor, 2=edad |
MBS(i;t) | Sensores BLE | Índice | 0=temp, 1=humedad |
MTD(i;t) | Timers TD | Índice | 0=estado, 1=timer, 2=dist, 3=timeout |
MTR(i;t) | Trips | Índice | 0=trigger, 1=habilitado, 2=hora |
MNT(i;t) | Contadores | Índice | 0=actual, 1=máximo |
MDL(i;t) | Datos LOG | Índice | 0=cantidad, 1=pendientes |
MPC(i;t) | Contador pulsos | Índice | 0=valor, 1=factor K |
MFC(i;t) | Frecuencímetro | Índice | 0=freq, 1=factor Q |
🧮 Operadores
Aritméticos
| Operador | Descripción | Ejemplo | Resultado |
|---|---|---|---|
+ | Suma | EVAL 10 + 5 | 15.00 |
- | Resta | EVAL 20 - 8 | 12.00 |
* | Multiplicación | EVAL 3 * 4 | 12.00 |
/ | División | EVAL 10 / 2 | 5.00 |
Comparadores
| Operador | Descripción | Ejemplo | Resultado |
|---|---|---|---|
gt | Mayor que | EVAL 5 gt 3 | 1.00 |
lt | Menor que | EVAL 5 lt 7 | 1.00 |
ge | Mayor o igual | EVAL 5 ge 5 | 1.00 |
le | Menor o igual | EVAL 4 le 5 | 1.00 |
eq | Igual | EVAL 5 eq 5 | 1.00 |
ne | No igual | EVAL 5 ne 6 | 1.00 |
Lógicos
| Operador | Descripción | Ejemplo | Resultado |
|---|---|---|---|
&& | AND lógico | EVAL (5 gt 3) && (2 lt 4) | 1.00 |
|| | OR lógico | EVAL (5 gt 6) || (2 lt 4) | 1.00 |
Bitwise
| Operador | Descripción | Ejemplo | Resultado |
|---|---|---|---|
& | AND bit a bit | EVAL 5 & 3 | 1.00 |
| | OR bit a bit | EVAL 5 | 2 | 7.00 |
sl | Shift left | EVAL 2 sl 1 | 4.00 |
sr | Shift right | EVAL 4 sr 1 | 2.00 |
📝 Formato de Salida
Personaliza la presentación del resultado usando sintaxis printf de C:
| Formato | Descripción | Ejemplo | Resultado |
|---|---|---|---|
%.2f | Flotante 2 decimales | EVAL 3.14159:%.2f | 3.14 |
%.3f | Flotante 3 decimales | EVAL 3.14159:%.3f | 3.142 |
%d | Entero | EVAL 5.7:%d | 5 |
%x | Hexadecimal minúsculas | EVAL 15:%x | f |
%X | Hexadecimal mayúsculas | EVAL 15:%X | F |
%b | Binario | EVAL 5:%b | 101 |
%05.2f | Con ceros izquierda | EVAL 3.14:%05.2f | 03.14 |
%08.2f | Más ceros izquierda | EVAL 3.14:%08.2f | 00003.14 |
⚠️ Manejo de Errores
Valor personalizado por error
>EVAL toker + 5:%0.2f:NA<Resultado: NA (variable no definida)
Error por defecto
>EVAL toker + 5<Resultado: ERR
División por cero
>EVAL 10 / 0<Resultado: Inf
💬 Ejemplos Prácticos
Suma de parámetros ECU
>EVAL ECU(0;0) + ECU(1;0) + ECU(2;0):%0.2f<Suma valores ECU de los índices 0, 1 y 2.
Comparación AIN
>EVAL AIN(0) gt 500<Retorna 1.00 si AIN(0) > 500, sino 0.00.
Lógica compuesta
>EVAL (V gt 150) && (AIN(0) lt 100)<Verifica condición compuesta sobre voltaje y entrada analógica.
Cálculo con formato
>EVAL (10 * 5) + 3:%0.3f<Resultado: 53.000
Expresión compleja
>EVAL ((AIN(0) * 10) + (AIN(1) * 5)) / 2:%0.2f:NA<Calcula promedio ponderado con formato personalizado y error NA.
Máscara bitwise
>EVAL IN(0) & 0x0F:%X<Aplica máscara a entrada digital y muestra en hexadecimal.
Shift bits
>EVAL 8 sr 2<Resultado: 2.00 (8 >> 2)
División con formato entero
>EVAL 25 / 4:%d<Resultado: 6 (división entera)
Conversión de temperatura
>EVAL (AIN(0) * 0.1) - 40:%0.1f:ERR<Convierte lectura ADC a temperatura con error ERR.
🔧 Resolución de Errores
| Error | Causa | Solución |
|---|---|---|
ERR | Variable no definida o sintaxis incorrecta | Verifica ortografía, usa valor_error |
Inf | División por cero | Valida divisor o usa valor_error |
| Sintaxis | Paréntesis desbalanceados | Revisa estructura de expresión |
| Índice | Fuera de rango (ej: AIN(9)) | Consulta rangos válidos del modelo |
Compatibilidad
Ver también
- Lista de Disparadores - Señales disponibles
- Motor de Eventos - Uso en reglas
- Reportes de Usuario Ux - Integración con EVAL