Page 1 sur 1

Var statiques entre différents blocs

Posté : 08 févr. 2021, 09:14
par Lorent2
Hello,

J'ai un mini programme de test et je comprends pas pourquoi (et comment) la variable "toto" s'incrémente.
Je ne pensai pas que les var statiques pouvant se transférer entre différents FC.
FC Siemens.png
Quelqu'un aurait une explication ?

Re: Var statiques entre différents blocs

Posté : 08 févr. 2021, 11:33
par djé
Salut,

Déjà ce n'est pas une variable "Statique", c'est une variable "Temporaire" qui n'est valable QUE dans le bloc dans lequel elle est déclarée.
Les variables statiques ("STAT") n'existent que dans les FB et sont adressées via la DB d'instance associée lors de l'appel du bloc.

Il ne faut JAMAIS utiliser les variables temporaires sans les avoir au préalable initialisées, sinon tu prends le risque certain de te retrouver avec des valeurs aléatoires.

Dans ton exemple cela "semble" fonctionner car tu n'as pas d'appel entre tes deux blocs qui vient chambouler les zones de variables locales de tes FC, mais c'est pas du tout safe et à proscrire ABSOLUMENT.

Re: Var statiques entre différents blocs

Posté : 08 févr. 2021, 11:55
par Lorent2
djé a écrit : 08 févr. 2021, 11:33 Salut,

Déjà ce n'est pas une variable "Statique", c'est une variable "Temporaire" qui n'est valable QUE dans le bloc dans lequel elle est déclarée.
Les variables statiques ("STAT") n'existent que dans les FB et sont adressées via la DB d'instance associée lors de l'appel du bloc.

Il ne faut JAMAIS utiliser les variables temporaires sans les avoir au préalable initialisées, sinon tu prends le risque certain de te retrouver avec des valeurs aléatoires.

Dans ton exemple cela "semble" fonctionner car tu n'as pas d'appel entre tes deux blocs qui vient chambouler les zones de variables locales de tes FC, mais c'est pas du tout safe et à proscrire ABSOLUMENT.
Effectivement, petit abus de langage.

Cela mets justement le défaut en évidence, car le MD10 prends une valeur alors que "toto" n'est jamais écrit. Je pense qu'il récupère la valeur du FC d'avant.

Re: Var statiques entre différents blocs

Posté : 08 févr. 2021, 12:17
par djé
C'est ça, les variables locales sont une sorte de zone de mémoire poubelle dans lesquelles trainent des résidus de valeurs des différents appels de FC.
Essaye d'insérer un variable temporaires avant toto (dint ) dans ton FC2 pour voir. Le résultat devrait être différent.

Re: Var statiques entre différents blocs

Posté : 08 févr. 2021, 20:32
par Vincepepe
Bonjour à tous,
Ayant oeuvré sur un programme qui utilisait des TEMP de FC et dans un certain cas mettait la CPU en STOP à cause d'une erreur de conversion BCD, c'était à cause d'un cas de figure où un TEMP utilisé pour la conversion n'était pas initialisé comme il faut, du coup il récupérait une valeur précedemment calculée plus haut, qui était rangée dans l'ACCU1 ou l'ACCU2.

Si on s'amuse à passer tout le réseau en LIST, le fameux TEMP à du prendre la précédente valeur mise dans un T xxxx

Donc je plussoie Lorent2 et djé, du coup d'office, je m'interdit d'utiliser ces TEMP, sauf pour des trucs bateaux.