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.
Quelqu'un aurait une explication ?
Var statiques entre différents blocs
Var statiques entre différents blocs
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 ...
- djé
- 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
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.
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 ...
Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...
Re: Var statiques entre différents blocs
Effectivement, petit abus de langage.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.
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 ...
- djé
- 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
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.
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 ...
Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...
Re: Var statiques entre différents blocs
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.
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.

