[Ecostruxure Control Expert] Calcul process

Forum traitant des automates industriels de marque Schneider - Telemecanique
Répondre
Squale
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 105
Enregistré le : 05 sept. 2018, 06:17
Localisation : TAHITI

[Ecostruxure Control Expert] Calcul process

Message 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
Fichiers joints
Sans titre.png
Sans titre.png (7.82 Kio) Vu 1393 fois
Squale
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 105
Enregistré le : 05 sept. 2018, 06:17
Localisation : TAHITI

Re: [Ecostruxure Control Expert] Calcul process

Message 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)));
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2142
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: [Ecostruxure Control Expert] Calcul process

Message 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.
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Squale
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 105
Enregistré le : 05 sept. 2018, 06:17
Localisation : TAHITI

Re: [Ecostruxure Control Expert] Calcul process

Message 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 ?
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2142
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: [Ecostruxure Control Expert] Calcul process

Message par philou77 »

Non, fait faire tout ton calcul en udint.
Seul le résultat sera converti en int.
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Cedric39
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 134
Enregistré le : 05 déc. 2015, 09:47

Re: [Ecostruxure Control Expert] Calcul process

Message 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)));
MiGaNuTs
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1575
Enregistré le : 12 nov. 2015, 21:02
Localisation : 45 - Loiret
Contact :

Re: [Ecostruxure Control Expert] Calcul process

Message 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.
Répondre