Imagine que tu fasses une fonction de régulation de t°. Avec cette fonction tu vas réguler 10 zones. Si tu ne passes pas par une fonction, tu vas devoir écrire 10 fois le même code. c'est très chiant
En passent par un Fb, chaque zone aura les variables qui lui sont propre dans un Db (P, I,D, T° mesurée, etc...) donc 10Db au total. Et à chaque appel de ta fonction, on va charger le Fb avec le Db associé à la zone à régulée(Call FB1, Db1 pour la première zone. Call FB1,Db2 pour la seconde, etc...). A l’exécution de l'appel (call) les variables du Db seront chargées dans les variables d'interface du Fb, le code du Fb est exécuté, puis l'état des variables d'interfaces sont recopiées dans le Db à la sortie du Fb.
Lors de la création de ces variables, des zones de 16bits sont crées. Lorsque tu crées une variable de type Bool l'adresse de celle-ci sera 0.0, la seconde 0.1 etc... et ce, tant que tu ne changes pas de type. Si la troisième variable crée, tu changes de type, l'adresse de base passera automatiquement à 2.0.
C'est ce que tu as constaté lorsque tu as crée une variable de type input puis juste après une de type output.
Pour la rémanence des données, les variables utilisées dans un Fc sont de ''vrai'' variables, dans le Fb elle sont temporaires, donc en cas de coupures de la scrutation durant l'execution d'un Fb l'état des variables au moment de la coupure sera perdu . Après il y a plusieurs mode de redémarrage mais là n'est pas la question