Page 1 sur 1

[Ecostruxure Control Expert] Calcul process

Posté : 16 mai 2023, 07:40
par Squale
Bonjour,
J'exploite une installation de traitement de l'eau dont l'automatisme est géré par un M340, il y a un débitmètre qui permet de mesurer le débit de traitement et le volume traité (impulsions tous les 10 litres sur une ETOR).

Dans le process il y a une alarme qui se déclenche si l'automate ne détecte pas d'impulsions pendant un temps donné, il calcule donc la durée théorique entre 2 impulsions puis il multiplie cette valeur par 5 pour avoir la valeur de la tempo qui met l'installation en défaut.

La formule qui sert à calculer la durée théorique entre 2 impulsions est la suivante: 3600*poids des impulsions en litre / débit filtration mini en litres par heure.

Quand je fais le calcul sous Excel avec un poids des impulsions à 10 litres et un débit filtration mini à 8000 l/h (8m3/h) j'obtiens 4,5 secondes

J'ai voulu vérifier les valeurs calculées dans le M340, j'ai mis en place une table d'animation et pour la valeur calculée il affiche -3
Est-ce que quelqu'un peut m'expliquer pourquoi le résultat est négatif ?

Image

Re: [Ecostruxure Control Expert] Calcul process

Posté : 16 mai 2023, 08:00
par Squale
J'ai oublié de mettre la formule qui permet le calcul dans l'automate:

G_Process_1.DureeEntre2Impulsions:= (3600 * (UDINT_TO_INT(PRM_Capteurs.FT701_PoidsImpulsionsLitres)))/(1000*(REAL_TO_INT(G_Process_1.DebitFiltration_Mini)));

Re: [Ecostruxure Control Expert] Calcul process

Posté : 16 mai 2023, 08:13
par philou77
Salut !

Un int est signé ( -3200, + 32000)
Tu as 3600 * 10 soit 36000
Ton passage de udint vers int provoque donc un nombre négatif sauf erreur de ma part ! D’où ton résultat.

Fais ton calcul en udint puis passe le résultat en int.

Re: [Ecostruxure Control Expert] Calcul process

Posté : 16 mai 2023, 08:39
par Squale
Bonjour,
En fait c'est pas moi qui ai fait le programme, j'essaie juste de comprendre comment ça fonctionne.

Si je comprends bien il faudrait que je calcule d'abord:

(3600 * PRM_Capteurs.FT701_PoidsImpulsionsLitres) puis que je convertisse le résultat en INT et enfin diviser le résultat par (1000*(REAL_TO_INT(G_Process_1.DebitFiltration_Mini))

Donc au final faire en 3 étapes ?

Re: [Ecostruxure Control Expert] Calcul process

Posté : 16 mai 2023, 08:50
par philou77
Non, fait faire tout ton calcul en udint.
Seul le résultat sera converti en int.

Re: [Ecostruxure Control Expert] Calcul process

Posté : 16 mai 2023, 15:30
par Cedric39
Ou en réel : a vérifier

G_Process_1.DureeEntre2Impulsions:= REAL_TO_INT(3600.0 * (UDINT_TO_REAL(PRM_Capteurs.FT701_PoidsImpulsionsLitres)))/(1000.0*(G_Process_1.DebitFiltration_Min)));

Re: [Ecostruxure Control Expert] Calcul process

Posté : 16 mai 2023, 16:03
par MiGaNuTs
Bonjour,
La tu fait des calculs un peu compliqués dont les résultats intermédiaires sont stockés dans des variables de 16 bits. A chaque étape du calcul tu a une erreur d'arrondi et un risque de débordement de variable. Multiplier par 3600 pour ensuite diviser par 1000 c'est un bon moyen de maximiser tes chances pour que ça foire.
Multiplie par 36 et divise par 10, tu aura 100 fois moins de chances d'avoir un résultat intermédiaire qui déborde en cours de route.
Le mieux c'est sans doute de tout convertir en flottants pour faire le calcul, et reconvertir en INT tout a la fin. Tes résultats intermédiaires seront stockés dans des variables de 32 (ou 64, je sait plus) bits, tu n'aura pas de dépassement de valeur et tu va limiter les erreurs d'arrondi.