Fórmulas de tags calculados
Un tag calculado almacena el resultado de una fórmula evaluada en tiempo real a partir de los valores en vivo de otros tags dentro de la misma planta. Esta referencia documenta la sintaxis de referencias, reglas de validación, operadores y funciones permitidas, y ejemplos aplicados.
1. Cómo referenciar otros tags
Referencia otro tag envolviendo su Source Tag entre llaves ({SourceTag}). Las llaves son obligatorias porque los identificadores industriales reales (como BM-201 o Mill/Feed) no son nombres válidos sin delimitadores.
text
{Outlet_Temp} - {Inlet_Temp}Reglas de validación y evaluación en vivo
- Cada fórmula debe referenciar al menos un tag de tipo Interfaz o Calculado de la misma planta. No se admiten tags Manuales ni fórmulas con solo constantes.
- Una fórmula sintácticamente válida puede guardarse aunque todavía no exista una muestra actual. El panel Edit and Test Formula reporta por separado entradas faltantes o errores en tiempo de ejecución.
- Entradas faltantes, inválidas o expiradas no generan valor numérico y propagan calidad
Bad, incluso hacia cálculos dependientes. - Configura el stale timeout de la entrada para expirar lecturas viejas (
0desactiva la expiración). Cuando llegan muestras válidas frescas, el cálculo se recupera automáticamente. - Las importaciones desde Excel validan referencias en todo el lote: se rechazan ciclos, fórmulas inválidas y filas que dependan de filas rechazadas. Actualiza fórmulas dependientes antes de renombrar, eliminar o convertir una entrada a Manual.
2. Operadores
| Operador | Significado | Ejemplo |
|---|---|---|
+ | Suma | {Power_A} + {Power_B} |
- | Resta | {Outlet_Temp} - {Inlet_Temp} |
* | Multiplicación | {Belt_Speed} * {Belt_Load} |
/ | División | {Mill_Power} / {Feed_Rate} |
// | División entera | {Total_Count} // 60 |
% | Módulo (residuo) | {Cycle_Count} % 12 |
** | Potencia (exponente) | {Radius} ** 2 |
< <= > >= | Comparaciones — devuelven 1 (verdadero) o 0 | {Temp} > 80 |
== != | Igual / distinto | {Mode} == 2 |
and / or | Y / O lógico para combinar condiciones | {Temp} > 80 and {Vibration} > 5 |
Operadores no soportados
^— Usa**para potenciación, no^.&— Usa la palabra claveand, no&.|— Usa la palabra claveor, no|.
3. Funciones permitidas
| Función | Descripción | Ejemplo |
|---|---|---|
abs(x) | Valor absoluto | abs({Setpoint} - {Actual}) |
sqrt(x) | Raíz cuadrada | sqrt({Diff_Pressure}) * 4.5 |
min(a, b, …) | Mínimo de los valores indicados | min({Temp_1}, {Temp_2}) |
max(a, b, …) | Máximo de los valores indicados | max({Temp_1}, {Temp_2}) |
avg(a, b, …) | Promedio aritmético de los valores | avg({Bearing_1}, {Bearing_2}, {Bearing_3}) |
mean(a, b, …) | Alias de avg() | mean({Flow_A}, {Flow_B}) |
round(x, n=0) | Redondea a n decimales (por defecto 0) | round({Flow_Rate} / 1000, 2) |
pow(x, y) | x elevado a la potencia y | pow({Radius}, 2) |
ln(x) | Logaritmo natural (base e) | ln({Pressure_Ratio}) |
log(x, base=e) | Logaritmo con base opcional | log({Value}, 2) |
log10(x) | Logaritmo base 10 | log10({Concentration}) |
exp(x) | e elevado a la potencia x | exp({Rate} * {Time}) |
floor(x) | Redondeo hacia abajo al entero más cercano | floor({Hours}) |
ceil(x) | Redondeo hacia arriba al entero más cercano | ceil({Batches}) |
clamp(x, lo, hi) | Acota x dentro de [lo, hi] | clamp({Pressure}, 0, 100) |
IF(condition, then, else) | Devuelve then cuando la condición es distinta de cero; si no else | IF({Mill_Power} > 50, 1, 0) |
4. Ejemplos aplicados
| Caso de uso | Fórmula |
|---|---|
| Diferencial de temperatura en equipo | {Outlet_Temp} - {Inlet_Temp} |
| Flujo másico por velocidad y carga | {Belt_Speed} * {Belt_Load} * 3.6 |
| Eficiencia en porcentaje | {Power_Out} / {Power_In} * 100 |
| Consumo específico de energía (kWh/t) | {Mill_Power} / {Feed_Rate} |
| Temperatura promedio de chumaceras | avg({Bearing_Temp_1}, {Bearing_Temp_2}, {Bearing_Temp_3}) |
| Flujo por presión diferencial | sqrt({Diff_Pressure}) * 4.5 |
| Acotar señal a rango seguro | clamp({Pressure}, 0, 100) |
Indicador de equipo en marcha (0/1) | IF({Mill_Power} > 50, 1, 0) |
| Condición combinada de alarma | IF({Temp} > 80 and {Vibration} > 5, 1, 0) |
| Lectura escalada y redondeada | round({Flow_Rate} / 1000, 2) |