¿Qué son NaN e infinito en los tags calculados?
No todo número que una computadora produce es un número real. El estándar de punto flotante que los sistemas SCADA usan para almacenar mediciones incluye un puñado de valores especiales, y dos de ellos, NaN e infinito, representan los resultados de cálculos que no tienen respuesta numérica con sentido. Cuando un tag calculado produce uno de estos, no es sólo una lectura grande o pequeña, es un valor con un comportamiento venenoso que puede corromper todo lo que toca. Esta guía explica de dónde vienen NaN e infinito, por qué deben atraparse y marcarse de mala calidad en lugar de almacenarse como números, y cómo protegerse contra ellos.
Manejo de NaN / infinito en una línea: NaN, que significa no es un número, e infinito son valores especiales definidos por el estándar de punto flotante IEEE-754 para cálculos que no tienen resultado numérico válido, como dividir cero entre cero, tomar el logaritmo de un número negativo o desbordar el rango del formato. En un tag calculado de SCADA se comportan como veneno, propagándose a través de sumas, promedios y despliegues y corrompiéndolos, así que deben detectarse y marcarse de mala calidad en lugar de archivarse como si fueran lecturas ordinarias.
De dónde vienen NaN e infinito
Las mediciones y los puntos calculados en un sistema SCADA casi siempre se almacenan como números de punto flotante siguiendo el estándar IEEE-754, y ese estándar reserva de forma deliberada ciertos patrones de bits para resultados que no son números ordinarios. El infinito aparece cuando un cálculo desborda el rango representable o divide un valor distinto de cero entre cero, dando un infinito positivo o negativo para señalar que la respuesta verdadera es ilimitadamente grande. NaN, abreviatura de no es un número, aparece cuando una operación no tiene respuesta numérica definida en absoluto, como cero entre cero, infinito menos infinito, o la raíz cuadrada o el logaritmo de un número negativo. Estos no son códigos de error atornillados después; son valores legítimos de punto flotante que la aritmética puede producir y almacenar.
En la práctica estos valores afloran en tags derivados y calculados en lugar de en mediciones crudas, porque las señales crudas pasan por un escalamiento fijo que las mantiene en rango. Un tag calculado, en cambio, corre una expresión que combina varias entradas, y esa expresión puede vagar hacia territorio prohibido cuando sus entradas toman valores inesperados. Una eficiencia que divide la salida entre una entrada que momentáneamente se fue a cero, un término logarítmico o de raíz cuadrada aplicado a una señal que se hundió en negativo por ruido, o un producto acumulado que crece más allá del límite del formato producirán cada uno NaN o infinito. La matemática misma está haciendo justo lo que el estándar dice; el problema es que el resultado carece de sentido como valor de proceso.
Lo que hace a estos valores distintos de una lectura mala ordinaria es su comportamiento bajo aritmética adicional, que es definido y contagioso. Cualquier operación que involucra un NaN produce un NaN, así que una sola entrada NaN a una fórmula hace que todo el resultado sea un NaN. El infinito se propaga casi con la misma agresividad y también puede colapsar en NaN, por ejemplo cuando se resta infinito de infinito. Esta regla de propagación es precisamente por lo que un solo valor envenenado no se queda contenido: fluye hacia afuera a través de cada cálculo que lo consume.
Cómo un valor venenoso corrompe todo aguas abajo
El peligro de un NaN o infinito no atrapado no es el único punto malo sino la ruina que causa aguas abajo. Como cualquier aritmética que toca un NaN devuelve un NaN, una sola muestra envenenada que fluye a un promedio convierte todo el promedio en NaN, un solo NaN en un total hace el total NaN, y un NaN alimentando un cálculo de control puede producir una salida sin sentido. Un valor sin sentido en el origen por lo tanto no se queda como un solo punto malo; en silencio convierte cada agregado, tendencia y cifra derivada que depende de él en un valor sin sentido también, muchas veces lejos de donde se originó la falla.
Los despliegues y las tendencias fallan de formas confusas cuando se les entregan estos valores. Según el cliente, un NaN podría renderizarse como un espacio en blanco, un marcador de posición, una cadena distorsionada o un punto salvajemente fuera de escala que distorsiona el eje de una tendencia de modo que los datos reales se vuelven ilegibles. El infinito puede empujar un medidor o una gráfica a un extremo absurdo. Como el valor subyacente no es un número normal, las comparaciones también se comportan de forma extraña, ya que NaN está definido como desigual a todo incluido a sí mismo, así que las verificaciones de límite de alarma y la lógica de ordenamiento que asumen un comportamiento numérico ordinario pueden en silencio hacer lo equivocado.
Por esto justo estos valores deben tratarse como un problema de calidad en lugar de uno numérico. Almacenar un NaN o infinito en el historian como si fuera una lectura significa que el veneno ahora es permanente en el archivo, y cada consulta futura que promedia o totaliza sobre el periodo que lo contiene hereda la corrupción. El manejo correcto es detectar el valor especial en el punto en que se produce, sustituir un marcador de posición seguro en la ranura numérica almacenada, y fijar la calidad del tag en mala para que cada consumidor aguas abajo sepa excluirlo. Marcarlo malo deja a la lógica de agregación saltarlo limpiamente en lugar de ser infectada por él.
Patrones de guarda y sustitución de calidad en SCADA
La forma confiable de mantener NaN e infinito fuera de un sistema es guardar el cálculo en el punto en que ocurre. Un motor de tags calculados debe probar el resultado de cada expresión en busca de los valores especiales de punto flotante antes de que se confirme, usando una verificación de es-finito que rechaza tanto NaN como infinito en un solo paso, y también debe guardar las operaciones riesgosas mismas, revisando un denominador antes de dividir y revisando el argumento de un logaritmo o una raíz cuadrada antes de aplicarlo. Guardar en el origen es mucho más barato que tratar de fregar los valores envenenados de los agregados después de que se han propagado.
Cuando una guarda se dispara, la respuesta correcta empareja una sustitución numérica segura con un cambio explícito de calidad. La ranura numérica se llena con algo inofensivo, muchas veces el último valor bueno o un valor por defecto definido, para que ningún consumidor reciba jamás un NaN crudo, y al mismo tiempo la calidad del tag se fija en mala o cuestionable para registrar que el número no es una medición real. Esta separación importa: el número sustituido evita que la aritmética y los despliegues se rompan, mientras que la bandera de mala calidad le dice a cualquier consumidor correcto que excluya el punto de totales, promedios y decisiones. Una sustitución sin una bandera de calidad ocultaría la falla; una bandera sin una sustitución dejaría el veneno en su lugar.
Para una plataforma SCADA de nube como Merobix, atrapar estos valores antes de que entren al historian es esencial precisamente porque el valor de la plataforma está en la historia de larga vida y consultada de forma central que mantiene para cada tag. Un solo NaN sin guardar escrito al archivo corrompería cada enrollamiento, tablero y reporte futuro que abarque el intervalo afectado, y como muchos usuarios consultan los mismos datos centrales, el daño se compartiría a través de toda la operación. Al guardar los tags calculados en la ingesta, sustituir un valor seguro y estampar el punto de mala calidad, la plataforma mantiene el archivo limpio, deja a la agregación saltar limpiamente el intervalo malo, y hace la falla visible como un evento de calidad en lugar de un envenenamiento invisible de los números.
Preguntas frecuentes
¿Qué hace que un tag calculado produzca NaN o infinito?
Vienen de operaciones de punto flotante que no tienen resultado numérico válido. El infinito surge de dividir un valor distinto de cero entre cero o de desbordar el rango del formato, mientras que NaN surge de operaciones verdaderamente indefinidas como cero entre cero, infinito menos infinito, o el logaritmo o la raíz cuadrada de un número negativo. En SCADA estos afloran en tags calculados cuyos valores de entrada vagan fuera del rango que la expresión asumió.
¿Por qué un NaN es mucho más dañino que un solo número equivocado?
Porque NaN es contagioso bajo las reglas de punto flotante: cualquier aritmética que lo toca devuelve otro NaN. Un solo NaN que fluye a un promedio hace todo el promedio NaN, un NaN en un total hace el total NaN, y se propaga a cada tendencia y cifra derivada que depende de él. Un valor sin sentido en el origen por lo tanto en silencio corrompe cada agregado aguas abajo en lugar de quedarse como un solo punto malo.
¿Cómo debe un sistema SCADA manejar un resultado NaN o infinito?
Debe atrapar el valor en el punto en que el cálculo lo produce, usando una verificación de es-finito, luego hacer dos cosas juntas. Primero, sustituir un número seguro, como el último valor bueno o uno por defecto, en la ranura almacenada para que los despliegues y la aritmética no se rompan. Segundo, fijar la calidad del tag en mala o cuestionable para que cada consumidor aguas abajo excluya el punto de totales y decisiones en lugar de heredar el veneno.
Servicios de automatización
¿Necesita convertir esta información en un sistema que funcione?
Merobix integra SCADA, programa PLC Allen-Bradley y Siemens, y diseña y fabrica tableros de control industrial.
Las solicitudes de reunión se revisan antes de confirmarse.