Page 1 sur 1

EcoStruxure : variable Publique / privée

Posté : 01 mai 2020, 12:09
par djé
Bonjour à tous,

Je fais mon premier projet sur un M340, (faut bien commencer un jour) et j'ai une question car le doute m'habite:

Dans un DFB, les variables dite privées sont-elles mémorisées ? Ou sont elles uniquement valables le temps d'une scrutation comme en SIEMENS (TEMPoraire)?

Re: EcoStruxure : variable Publique / privée

Posté : 01 mai 2020, 12:51
par itasoft
slts,
j'ai pas vérifié mais les variables privées ne sont pas mémorisées, mais qu'elles le soient ou pas , il faut faire comme si elles ne l’étaient pas.
(comme dans tous les autres langages).

Re: EcoStruxure : variable Publique / privée

Posté : 01 mai 2020, 13:24
par skip74
Salut

Bien sûr qu'elles font mémorisées.... Ça pourrait être un sous compteur par exemple....

Bon bien sûr faut pas appeler plusieurs fois la même instance....


A+

Re: EcoStruxure : variable Publique / privée

Posté : 01 mai 2020, 15:23
par itasoft
skip74 a écrit : 01 mai 2020, 13:24 Salut

Bien sûr qu'elles font mémorisées.... Ça pourrait être un sous compteur par exemple....

Bon bien sûr faut pas appeler plusieurs fois la même instance....
A+
-------------
qu'on soit bien d'accord, mémorisées ça voudrait dire que après coupure de la bourre, si on ne les initialise pas on les retrouve comme si c'étaient de %MW
à mon avis ça donne l'impression qu'elles sont mémorisées tant que elles ne sont pas écrasées par d'autres FB
ceci dit j'ai pas fais de tests pour confirmer mes dires, vu que je fais comme si elles ne l’étaient pas .

Re: EcoStruxure : variable Publique / privée

Posté : 01 mai 2020, 17:39
par djé
Alors ma question n'est pas tant de savoir si elles sont mémorisées en cas de coupure de jus mais plutôt si la variable reste valide entre deux appels.
Si par exemple je stocke une donnée dans une variable privée, est ce qu' au prochain appel, la valeur de cette même variable est toujours valide (elle n'a pas changé).
Mais d'après, Skip74 cela a l'air d'être le cas.

Re: EcoStruxure : variable Publique / privée

Posté : 01 mai 2020, 18:17
par itasoft
slts,
skip précise: "Bon bien sûr faut pas appeler plusieurs fois la même instance...."

ça veut dire que les variables locales doivent être initialisées , écrites , dans le programme à chaque appel

sur d'autres langages, c'est comme l'appel d'une procédure qui comporte des variables locale

Re: EcoStruxure : variable Publique / privée

Posté : 01 mai 2020, 22:06
par djé
skip74 a écrit : 01 mai 2020, 13:24 Bon bien sûr faut pas appeler plusieurs fois la même instance....
Tu veux dire quoi par la ? Une erreur de prog (tu rappelles la même instance du dfb avec des paramètres différents) ?

Re: EcoStruxure : variable Publique / privée

Posté : 04 mai 2020, 08:00
par Laurent
Salut,

les variables privées peuvent garder leur valeur entre deux exécutions de la même instance du DFB ( donc entre deux cycles d'éxécution du programme, normalement).
S'il faut sauvegarder ou mettre à jour des valeurs initiales, c'est possible avec les variables publiques du DFB.

Comme un bloc fonction de la bibliothèque standard (TON, CTU...), une instance de DFB peut mémoriser un état interne, ce qui les différencie d'une fonction élémentaire (AND, INC, etc.).
C'est pour cette raison que ce n'est pas vu comme une bonne pratique d'utiliser la même instance d'un DFB plusieurs fois dans le programme.
Techniquement, c'est possible, le compilateur de Unity va juste sortir des avertissements pour chaque appel d'une même instance, mais ça va va compiler.
Il n'y aura pas de bug de fonctionnement si le code du DFB ne gère pas d'état interne (donc s'il se comporte comme une fonction, au sens mathématique du terme, comme ce que doit programmer itasoft), mais clairement, ce n'est pas conseillé parce que très en dehors des bonnes pratiques de codage, et certainement inhabituel, ce qui poserait des problèmes de maintenabilité (programme difficile à comprendre avec une telle subtilité).

A noter que ce conseil s'applique aussi aux blocs fonctions de la bibliothèque standard : j'ai eu récemment à corriger un bug sur des programmes qui fonctionnaient depuis des années, la même instance d'un bloc fonction SR était utilisée quelques dizaines de fois dans le code, et selon les circonstances, de temps en temps, ça foutait la merde.

Re: EcoStruxure : variable Publique / privée

Posté : 04 mai 2020, 10:28
par djé
Salut Laurent merci pour la précision.

Ne pas utiliser deux fois la même instance cela me parait tellement évident que j'ai du mal à croire que l'on puisse le faire autrement que par une faute d’inattention.