Pour les blocs fonctions créés par l’utilisateur dans le projet ou la bibliothèque utilisateur, un sous-programme est créé dans le programme compilé. A chaque chargement, les paramètres d’entrée des classes VAR_INPUT et VAR_IN_OUT sont transférés en premier. Puis, le programme appelle le sous-programme correspondant. Enfin, les paramètres de sortie des classes VAR_OUTPUT et VAR_IN_OUT sont relus. Le nombre de sous-programmes ou blocs fonctions que vous pouvez définir dépend du type d’automate.
Les blocs fonctions sont dotés d’une “mémoire”, c.-à-d. qu’une zone de données et un sous-programme sont affectés à chaque entité du bloc fonction lors du chargement. Toutes les entités d’un bloc fonction utilisent ensuite le même sous-programme. La zone de données valide pour chaque entité est accessible via le registre d’index.
Cela permet de préserver de l’espace disponible dans la mémoire du programme, en particulier lorsque les mêmes blocs fonctions définis par l’utilisateur sont utilisés fréquemment. Cependant, l’accès aux zones de données via les registres d’index peut prolonger la durée du cycle.
Avec certains automates, vous pouvez activer l’option Instances de blocs fonctions (FB) indexées sous .
Avec l’indexation des blocs fonctions, certaines fonctions de base ne fonctionnent pas correctement lorsqu’elles sont appelées plusieurs fois au cours d’un cycle. Avec les commandes suivantes, vous recevez un message d’erreur :
Compteurs : F118_UDC, F166_HighSpeedCounter_Set, F167_HighSpeedCounter_Reset, F168_PulseOutput_Home
Instructions de décalage : F119_LRSR