Bonjour,
J’ai un scénario qui s’exécute toutes 5 min pour effectuer des calculs de façon itérative.
Il commence par récupérer la valeur d’une variable dans un tag, puis effectue les calculs avec ce tag et enregistre à la fin le nouveau résultat du tag dans la variable.
Cela fonctionne bien sauf qu’à un moment donnée le nombre peut avoir un exposant dans l’écriture du nombre. Ici, c’est un E-12 qui traîne.
Ensuite, lorsque le tag récupère la valeur ce cette variable, il le considère comme une chaîne de caractère et n’effectue plus de calcul. Les calculs itératifs se transforment en concaténation de chaîne de caractères et la variable devient une chaîne de caractères qui ne fait que s’allonger jusqu’à la mort comme ceci
[2020-10-01 09:10:58][SCENARIO] Affectation de la variable PID1_Erreur_Integration => (40*0.0625+6*(1*40*-2.4375+6*(1*40*-2.5+6*(1*40*-2.5+6*(1*40*-2.5+6*(1*40*-2.5+6*(1*40*-2.5+6*(1*1.9895196601283E-12-40*-2.5-0*0.1541679988056)/1*(1.9895196601283E-12-40*-2.5-0*0.1541679988056)/6*1*(1.9895196601283E-12-40*-2.5-0*0.1541679988056)/6/6+-2.5*(j'ai raccourci la ligne de la mort)
[2020-10-01 09:10:58][SCENARIO] [MySQL] Error code : 22001 (1406). Data too long for column 'value' at row 1 : UPDATE `dataStore` SET `id` = :id, `type` = :type, `link_id` = :link_id, `key` = :key, `value` = :value WHERE id = :id
En attendant, je vais limiter le nombre de décimales avec un floor(#Erreur_Integration#*100000)/100000
lors de l’affectation de la variable en fin de scénario. Mais la même expression floor(#Erreur_Integration#*100000)/100000
n’est pas calculée s’il s’agit de la mise à jour d’un tag au milieu de mon scénario.
Existe-il un moyen pour forcer le calcul d’une expression lors de la mise à jour d’un tag ?