Los registros físicos representan cualquier punto de datos individual registrado por un medidor eGauge. Estos pueden provenir de mediciones brutas obtenidas localmente (p. ej., amperaje o voltaje ), cálculos obtenidos localmente (p. ej., potencia real y otros subtipos de registros de potencia ), e incluso registros importados de dispositivos remotos ( eGauge remoto o dispositivos de terceros conectados mediante Modbus TCP/RTU ).
Los registros de fórmula son un tipo de registro físico que se puede utilizar para diversos cálculos. Normalmente, un registro de fórmula lee datos de uno o más registros físicos de un dispositivo, realiza un cálculo y luego almacena un nuevo valor. Se utiliza comúnmente para cálculos avanzados, como el factor de potencia o la potencia reactiva .
Sin embargo, al usar un registro de fórmula con un registro remoto, se deben tomar precauciones adicionales para evitar valores incorrectos cuando el registro remoto no esté disponible (por ejemplo, si el dispositivo remoto se ha desconectado de la red, se ha desconectado, etc.). En este caso, el registro remoto puede devolver un valor "NaN" (no un número) en lugar de un valor numérico, lo que puede dañar el registro de fórmula. Considere el siguiente ejemplo:

En este ejemplo, se utiliza un registro de fórmula para sumar los registros físicos "Local_Power" y "Remote_Power". "Local_Power" es un registro de potencia medido por el propio medidor, mientras que "Remote_Power" es un registro de potencia importado vía Modbus desde una fuente externa.
Normalmente, esto es una simple suma: si "Local_Power" = 10 y "Remote_Power" = 20, el valor de "Remote and Local Power" sería 30. Sin embargo, si el dispositivo remoto que proporciona un valor para "Remote_Power" se desconecta, el eGauge ahora lee 10 + NaN, lo que devuelve NaN. Este comportamiento no es deseable; sería mucho mejor devolver al menos el valor de "Local_Power" (10).
Para lograr esto, podemos usar un condicional y una función para convertir cualquier "NaN" devuelto en un 0.
Una condición se expresa como X?Y:Z, donde X es algo que se evalúa como Verdadero o Falso, Y es el valor devuelto si X es verdadero y Z es el valor devuelto si X es falso. Por ejemplo, (3=4)?0:1 devolvería 1, porque 3=4 es falso (3 no es igual a 4).
La función isnan() toma un valor entre paréntesis y devuelve "Verdadero" si el valor es NaN y "Falso" si es un número. Por ejemplo, isnan(1) devolvería "Falso" porque 1 no es un NaN. isnan(sqrt(-1)) devolvería "Verdadero" porque sqrt(-1) (raíz cuadrada de -1) no es un número (y, por lo tanto, es NaN).
Como puede ver, isnan() devolverá "Verdadero" o "Falso". Podemos introducirlo en nuestra condición y determinar el valor que se devuelve. La forma básica es:
isnan($"registername")?0:$"registername"
Si el valor del registro "registername" es un NaN, isnan() devuelve "Verdadero" y el condicional devuelve 0. Si el valor del registro "registername" no es un NaN, isnan() devuelve "Falso" y el condicional devuelve el valor de "registername".
Usando nuestro ejemplo original:
