Questions de programmation / Bonnes pratiques
- djé
- Dieu du process
- Messages : 776
- Inscription : 20 oct. 2015, 09:55
- Localisation : Bretagne, Pays de la Loire, Nantes
Questions de programmation / Bonnes pratiques
Bonjour a toutes et à tous,
Petite question / sondage :
Lors de la programmation d'un bloc fonction type FB/DFB est-ce que vous utilisez les variables internes dans le reste de votre code ?
Je programme sur TIA, mais le principe est le même qqsoit l'automate:
Je m'explique: en général ces blocs ont en interface les in, out et in/out puis les variables privées (temp) et "publiques" (Static).
Si on cherche à respecter le principe suivant "on echange avec l'extérieur du code que les infos en in, out et in/out" dans certains cas le bloc devient vite un gros pavé avec plein de branches à connecter partout.
J'ai déja par le passé plutôt travailler directement avec les données publiques car je trouvais cela plus digeste.
L'instance du bloc au final est dépourvu de branche et les information sont envoyées/récupérée à l'extérieur du bloc.
L'inconvénient avec ce type de programmation c'est que l'on perd les références croisées car les informations n'existe que dans le bloc :
Admettons j'ai un bloc générique "monBloc" avec un data "monBool" à l'intérieur, l'affectation depuis l'extérieur sera :
monBlocInstance1.monBool = 1
monBlocInstance2.monBool = 0 ...etc
EN terme de référence croisées, on a l'information l'écriture de la data mais pas de lecture puisque faite dans le bloc de base. (la je parle pour du SIEMENS je ne sais pas si les autres éditeurs savent retrouver la référence en lecture)
Idem dans l'autre sens si lecture et non écriture à l'extérieur du bloc (si monBlocInstance1.monBool = 1 alors ...) on voit la lecture de la data pas l'écriture.
Ça peut paraitre déroutant et si on est pas familier avec ce type de programmation on peut vite être perdu.
Qu'en pensez-vous ?
Quelles sont vos pratiques ?
Petite question / sondage :
Lors de la programmation d'un bloc fonction type FB/DFB est-ce que vous utilisez les variables internes dans le reste de votre code ?
Je programme sur TIA, mais le principe est le même qqsoit l'automate:
Je m'explique: en général ces blocs ont en interface les in, out et in/out puis les variables privées (temp) et "publiques" (Static).
Si on cherche à respecter le principe suivant "on echange avec l'extérieur du code que les infos en in, out et in/out" dans certains cas le bloc devient vite un gros pavé avec plein de branches à connecter partout.
J'ai déja par le passé plutôt travailler directement avec les données publiques car je trouvais cela plus digeste.
L'instance du bloc au final est dépourvu de branche et les information sont envoyées/récupérée à l'extérieur du bloc.
L'inconvénient avec ce type de programmation c'est que l'on perd les références croisées car les informations n'existe que dans le bloc :
Admettons j'ai un bloc générique "monBloc" avec un data "monBool" à l'intérieur, l'affectation depuis l'extérieur sera :
monBlocInstance1.monBool = 1
monBlocInstance2.monBool = 0 ...etc
EN terme de référence croisées, on a l'information l'écriture de la data mais pas de lecture puisque faite dans le bloc de base. (la je parle pour du SIEMENS je ne sais pas si les autres éditeurs savent retrouver la référence en lecture)
Idem dans l'autre sens si lecture et non écriture à l'extérieur du bloc (si monBlocInstance1.monBool = 1 alors ...) on voit la lecture de la data pas l'écriture.
Ça peut paraitre déroutant et si on est pas familier avec ce type de programmation on peut vite être perdu.
Qu'en pensez-vous ?
Quelles sont vos pratiques ?
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 ...
- Béryl
- Mi homme - Mi automate
- Messages : 1660
- Inscription : 20 oct. 2015, 12:00
- Localisation : localhost
Re: Questions de programmation / Bonnes pratiques
Pour ma part les variables internes restent locales.
Si j'en ai besoin à l'extérieur du bloc, ce n'est plus une variable locale, elle est donc poussée sur une sortie du bloc pour être affectée à une variable globale ou en IN/OUT.
Je ne lis directement une variable locale que dans une table d'animation.
Si j'en ai besoin à l'extérieur du bloc, ce n'est plus une variable locale, elle est donc poussée sur une sortie du bloc pour être affectée à une variable globale ou en IN/OUT.
Je ne lis directement une variable locale que dans une table d'animation.
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Questions de programmation / Bonnes pratiques
slts,
Je m'explique: en général ces blocs ont en interface les in, out et in/out puis les variables privées (temp) et "publiques" (Static).
-----
Je ne met jamais de variables "publiques" sinon ça sert à rien de faire un DFB
Je m'explique: en général ces blocs ont en interface les in, out et in/out puis les variables privées (temp) et "publiques" (Static).
-----
Je ne met jamais de variables "publiques" sinon ça sert à rien de faire un DFB
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
Re: Questions de programmation / Bonnes pratiques
Salut
Je programme sur unity,, il y a rien de parfait...
L'intérêt des entrées sortie est très important pour la diagnostic dépannage, infos visuelle. L'inconvénient c'est que si beaucoup de paramètres ça devient difficile a lire, on pert l'intérêt...
Tout passer dans du public au delà du pb de recherche croisée (assez bien géré a ce niveau là sous unity) c'est que l'on pert l'intérêt de diagnostic, obligé de rentrer dans les méandres du code dedans pour voir ce qui va pas....
Après avoir essayé un peu tout, je fais comme cela:
Je met tout ce qui est important sous forme d'information simple (tor, int...) Et tout ce qui est plus côté 'parametrage' du block ou option, tout ça est balancé dans une grosse structure qui est posée en paramètre d'entrée sortie....
Le soucis que j'ai dans cette méthode: si on doit modifier la taille de la structure en run..... souvent c'est impossible... Je garde des paramètres de réserve mais c dur de tout prévoir a l'avance.....
Quand j suis bloqué et impossible de passer en stop, je passe par des public
Dans le temps j'utilisais les public comme des parametres directement, mais suis a des rechargements de programmes il m'est arrivé que ces paramètres soient mal restauré....
Depuis je les réécris systématiquement (c'est fait à côté de l'appel du dfb)
A+
Je programme sur unity,, il y a rien de parfait...
L'intérêt des entrées sortie est très important pour la diagnostic dépannage, infos visuelle. L'inconvénient c'est que si beaucoup de paramètres ça devient difficile a lire, on pert l'intérêt...
Tout passer dans du public au delà du pb de recherche croisée (assez bien géré a ce niveau là sous unity) c'est que l'on pert l'intérêt de diagnostic, obligé de rentrer dans les méandres du code dedans pour voir ce qui va pas....
Après avoir essayé un peu tout, je fais comme cela:
Je met tout ce qui est important sous forme d'information simple (tor, int...) Et tout ce qui est plus côté 'parametrage' du block ou option, tout ça est balancé dans une grosse structure qui est posée en paramètre d'entrée sortie....
Le soucis que j'ai dans cette méthode: si on doit modifier la taille de la structure en run..... souvent c'est impossible... Je garde des paramètres de réserve mais c dur de tout prévoir a l'avance.....
Quand j suis bloqué et impossible de passer en stop, je passe par des public
Dans le temps j'utilisais les public comme des parametres directement, mais suis a des rechargements de programmes il m'est arrivé que ces paramètres soient mal restauré....
Depuis je les réécris systématiquement (c'est fait à côté de l'appel du dfb)
A+
-
- Code son premier grafcet
- Messages : 35
- Inscription : 04 mai 2019, 23:07
- Localisation : Eure et Loir
- Contact :
Re: Questions de programmation / Bonnes pratiques
Comme les collègues, je ne me sert pas des public (sauf si contraint et forcé). Je préfère avoir un gros bloc avec pleins d'E/S qui à mon sens sera toujours plus digeste pour le commun des mortels.
Re: Questions de programmation / Bonnes pratiques
Les variables internes ne sont pas utilisé dans le reste de mon code non plus.
Si tu en as besoin à l’extérieur, c'est qu'elle ne doivent plus être interne, ça perd son sens.
Tout ce qui est paramètres d'entrée, généralement c'est une ou plusieurs structures qui sont attendues en IN et quelques variables.
En sortie, cela arrive de temps en temps que je passe aussi par des structures mais la plupart du temps, j'ai moins d'une vingtaine de variables a récupérer.
Par contre en interne c'est bagdad, structures et variables atteignent souvent la cinquantaine
Le tout c'est que la maintenance puisse debugger facilement sans rentrer dans le bloc une fois que celui ci est déployé. Sinon c'est à toi de remettre les mains dedans et dans ce cas tu as toutes les cartes en mains.
Enfin ça n'engage que moi
Si tu en as besoin à l’extérieur, c'est qu'elle ne doivent plus être interne, ça perd son sens.
Tout ce qui est paramètres d'entrée, généralement c'est une ou plusieurs structures qui sont attendues en IN et quelques variables.
En sortie, cela arrive de temps en temps que je passe aussi par des structures mais la plupart du temps, j'ai moins d'une vingtaine de variables a récupérer.
Par contre en interne c'est bagdad, structures et variables atteignent souvent la cinquantaine
Le tout c'est que la maintenance puisse debugger facilement sans rentrer dans le bloc une fois que celui ci est déployé. Sinon c'est à toi de remettre les mains dedans et dans ce cas tu as toutes les cartes en mains.
Enfin ça n'engage que moi
- djé
- Dieu du process
- Messages : 776
- Inscription : 20 oct. 2015, 09:55
- Localisation : Bretagne, Pays de la Loire, Nantes
Re: Questions de programmation / Bonnes pratiques
Bonjour,
Merci pour vos réponses.
En fait mon, interrogation se porte surtout sur du SIEMENS, bien que cela puisse être transposable sur d'autre plateforme.
J'ai pris l'habitude de ne plus utiliser les zones %M dans les programmes et donc d'utiliser un FB avec sa DB d'instance associée comme zone mémoire.
Suivant les applications je structure les divers FB (spécifiques) par zone on dira.
Dans chaque FB principal, je fais appel à d'autre FB géneriques (tempo, moteur ,vannes, whatever...) qui sont directement déclarés en STAT (l'équivalent je dirai des variables publiques).
Cela me génère un DB d'instance Unique par zone avec l'ensemble des données relatives contenue dedans. Jusque là tout va bien.
Ce que je trouve chiant c'est de devoir repasser par des données intermédiaires in-out ou DB globale on dira pour gérer les infos inter FB de zone alors que l'on pourrait utiliser directement le DB d'instance proprement dit puisque c'est de la mémoire (en étant aware des données manipulées)
Merci pour vos réponses.
En fait mon, interrogation se porte surtout sur du SIEMENS, bien que cela puisse être transposable sur d'autre plateforme.
J'ai pris l'habitude de ne plus utiliser les zones %M dans les programmes et donc d'utiliser un FB avec sa DB d'instance associée comme zone mémoire.
Suivant les applications je structure les divers FB (spécifiques) par zone on dira.
Dans chaque FB principal, je fais appel à d'autre FB géneriques (tempo, moteur ,vannes, whatever...) qui sont directement déclarés en STAT (l'équivalent je dirai des variables publiques).
Cela me génère un DB d'instance Unique par zone avec l'ensemble des données relatives contenue dedans. Jusque là tout va bien.
Ce que je trouve chiant c'est de devoir repasser par des données intermédiaires in-out ou DB globale on dira pour gérer les infos inter FB de zone alors que l'on pourrait utiliser directement le DB d'instance proprement dit puisque c'est de la mémoire (en étant aware des données manipulées)
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 ...
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Questions de programmation / Bonnes pratiques
slts,
Ce que je trouve chiant c'est de devoir repasser par des données intermédiaires in-out ou DB globale on dira pour gérer les infos inter FB de zone alors que l'on pourrait utiliser directement le DB d'instance proprement dit puisque c'est de la mémoire (en étant aware des données manipulées)
Si on fait la même chose en d’autres langages (ex : C++) ça s’appelle une fonction ou une Procédure
Ya pas de variables globales, tout doit être transmis à la fonction via des paramètres (ou des pointeurs en C++)
C’est pareil avec des DFB tout doit passer via les paramètres
Ce que je trouve chiant c'est de devoir repasser par des données intermédiaires in-out ou DB globale on dira pour gérer les infos inter FB de zone alors que l'on pourrait utiliser directement le DB d'instance proprement dit puisque c'est de la mémoire (en étant aware des données manipulées)
Si on fait la même chose en d’autres langages (ex : C++) ça s’appelle une fonction ou une Procédure
Ya pas de variables globales, tout doit être transmis à la fonction via des paramètres (ou des pointeurs en C++)
C’est pareil avec des DFB tout doit passer via les paramètres
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
- djé
- Dieu du process
- Messages : 776
- Inscription : 20 oct. 2015, 09:55
- Localisation : Bretagne, Pays de la Loire, Nantes
Re: Questions de programmation / Bonnes pratiques
C'est pas faux, mais si on fait l'analogie avec une programmation orienté objet, on pourrait dire que les DFB sont des instances avec des propriétés en lecture et/ou écriture. Pas besoin de passage de paramètres. non?Si on fait la même chose en d’autres langages (ex : C++) ça s’appelle une fonction ou une Procédure
Ya pas de variables globales, tout doit être transmis à la fonction via les paramètres.
C’est pareil avec des DFB tout doit passer via les paramètres
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 ...
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Questions de programmation / Bonnes pratiques
---------djé a écrit : ↑09 avr. 2020, 17:05C'est pas faux, mais si on fait l'analogie avec une programmation orienté objet, on pourrait dire que les DFB sont des instances avec des propriétés en lecture et/ou écriture. Pas besoin de passage de paramètres. non?Si on fait la même chose en d’autres langages (ex : C++) ça s’appelle une fonction ou une Procédure
Ya pas de variables globales, tout doit être transmis à la fonction via les paramètres.
C’est pareil avec des DFB tout doit passer via les paramètres
c'est pas complètement faux, dans ce cas je crée une instance de l'objet (SET en VBA) et modifie les propriétés de l'instance , reste à savoir ce que je veux faire avec cette instance,
ok, compris, en fait les propriétés dans les DFB ce sont les variable globales, finalement ça revient au même, il faut juste si habituer, LOL
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr