Les registres physiques représentent chaque point de données unique enregistré par un compteur eGauge. Ceux-ci peuvent provenir de mesures brutes obtenues localement (par exemple, l'ampérage ou la tension ), de calculs obtenus localement (par exemple, la puissance réelle et d'autres sous-types de registres de puissance ), et même de registres importés à partir d'appareils distants ( eGauge distants ou appareils tiers connectés via Modbus TCP/RTU ).
Les registres de formule sont un type de registre physique permettant d'effectuer divers calculs. Généralement, un registre de formule lit des données provenant d'un ou plusieurs registres physiques d'un appareil, effectue un calcul, puis stocke une nouvelle valeur. Cette technique est couramment utilisée pour des calculs avancés tels que le facteur de puissance ou la puissance réactive .
Toutefois, lors de l'utilisation d'un registre de formule avec un registre distant, il convient de prendre des précautions supplémentaires afin d'éviter les valeurs incorrectes lorsque le registre distant est indisponible (par exemple, si le périphérique distant est déconnecté du réseau ou hors ligne). Dans ce cas, le registre distant peut renvoyer la valeur « NaN » (Not a Number) au lieu d'une valeur numérique, ce qui peut rendre le registre de formule inopérant. Prenons l'exemple simple suivant :

Dans cet exemple, un registre de formule est utilisé pour additionner les registres physiques « Local_Power » et « Remote_Power ». « Local_Power » est un registre de puissance mesuré par le compteur lui-même, tandis que « Remote_Power » est un registre de puissance importé via Modbus depuis une source externe.
Normalement, il s'agit d'une simple addition : si « Puissance_locale » = 10 et « Puissance_distante » = 20, la valeur de « Puissance locale et distante » serait de 30. Cependant, si le périphérique distant qui fournit la valeur de « Puissance_distante » se déconnecte, l'eGauge lit alors 10 + NaN, ce qui renvoie NaN. Ce comportement est indésirable ; il serait préférable de renvoyer au moins la valeur de « Puissance_locale » (10).
Pour ce faire, nous pouvons utiliser une condition et une fonction pour convertir toute valeur « NaN » renvoyée en 0.
Une conditionnelle s'exprime sous la forme X?Y:Z, où X est une variable qui prend la valeur Vrai ou Faux, Y est la valeur renvoyée si X est vrai, et Z est la valeur renvoyée si X est faux. Par exemple, (3=4)?0:1 renverra 1, car 3=4 est faux (3 ≠ 4).
La fonction isnan() prend une valeur entre parenthèses et renvoie `True` si la valeur est `NaN` et `False` si la valeur est un nombre. Par exemple, isnan(1) renverra `False`, car 1 n'est pas `NaN`. isnan(sqrt(-1)) ` renverra `True`, car `sqrt(-1)` (la racine carrée de -1) n'est pas un nombre (et est donc `NaN`).
Comme vous pouvez le constater, isnan() ` renvoie soit `True`, soit `False`. Nous pouvons utiliser cette valeur dans notre condition et déterminer celle qui doit être renvoyée. Voici la syntaxe de base :
isnan($"registername")?0:$"registername"
Si la valeur du registre « registername » est NaN, isnan() renvoie « True » et la condition renvoie 0. Si la valeur du registre « registername » n’est pas NaN, isnan() renvoie « False » et la condition renvoie la valeur de « registername ».
Reprenons notre exemple initial :
