Var statiques entre différents blocs

Forum traitant des automates industriels de marque Siemens.
Répondre
Lorent2
Maître du binaire
Maître du binaire
Messages : 487
Enregistré le : 27 déc. 2015, 08:52

Var statiques entre différents blocs

Message 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 ?
Si quelquefois tu te sens petit, inutile, démoralisé ou dépressif, n'oublies jamais que tu as été un jour le plus rapide et le meilleur spermatozoïde de ta bande ...
Avatar du membre
djé
Dieu du process
Dieu du process
Messages : 864
Enregistré le : 20 oct. 2015, 09:55
Localisation : Bretagne, Pays de la Loire, Nantes
Contact :

Re: Var statiques entre différents blocs

Message 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.
Le monde se divise en 10 catégories:les personnes qui comprennent le binaire,et les autres.

Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...
Lorent2
Maître du binaire
Maître du binaire
Messages : 487
Enregistré le : 27 déc. 2015, 08:52

Re: Var statiques entre différents blocs

Message 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.
Si quelquefois tu te sens petit, inutile, démoralisé ou dépressif, n'oublies jamais que tu as été un jour le plus rapide et le meilleur spermatozoïde de ta bande ...
Avatar du membre
djé
Dieu du process
Dieu du process
Messages : 864
Enregistré le : 20 oct. 2015, 09:55
Localisation : Bretagne, Pays de la Loire, Nantes
Contact :

Re: Var statiques entre différents blocs

Message 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.
Le monde se divise en 10 catégories:les personnes qui comprennent le binaire,et les autres.

Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...
Vincepepe
Première mise en service
Première mise en service
Messages : 54
Enregistré le : 08 juin 2018, 08:45

Re: Var statiques entre différents blocs

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