Convertir un bloc fonction en une fonction définie par l’utilisateur pour réduire le nombre de pas de programme.
Le but principal de ces fonctions est de faciliter le remplacement des blocs fonctions (FB) par des fonctions (FUN). De multiples instances FB dans des sous-programmes séparés sont remplacées par une seule fonction dans un sous-programme.
Bloc fonction |
Fonction convertie |
![]() |
![]() |
Toutes les instructions Panasonic ne peuvent pas être utilisées dans une fonction commune. Exemples d’instructions qui ne peuvent pas être utilisées dans une fonction commune :
Certaines instructions compteurs rapides telles que F166_HighSpeedCounter_Set, F165_HighSpeedCounter_Cam
Certaines instructions de positionnement telles que F166_PulseOutput_Set, F171_PulseOutput_Trapezoidal
À vérifier en détails.
Beaucoup moins de code programme peut être requis.
Beaucoup moins de drapeaux (R) peuvent être nécessaires.
Utilisation possible dans des boucles avec tableaux (arrays) de DUT mémoires
Travail supplémentaire pour le développement et l’entretien
La fonction convertie doit être testée prudemment
Plus d’efforts demandés à l’utilisateur
Monitoring plus difficile car aucune instance ne peut être supervisée, seul le dernier appel peut être supervisé
Plus de registres de données (DT) peuvent être nécessaires
Baisse de performance de l’automate et augmentation du temps de scrutation
Le comportement des fonctions de temporisation peut varier légèrement par rapport aux blocs fonctions de temporisation.
Vérifiez bien que le comportement de la nouvelle fonction corresponde à celui du bloc fonction, en particulier si la nouvelle fonction doit être appelée plusieurs fois.
Utilisez des fonctions à la place de blocs fonctions uniquement lorsque c’est nécessaire.
N’utilisez pas plus de fonctions à la place de blocs fonctions que nécessaire.
Faites une analyse précise pour savoir quel bloc fonction doit être converti pour en tirer le meilleur profit avec un minimum de travail.
Les critères principaux permettant de décider si un bloc fonction doit être converti sont les suivants : combien de fois le bloc fonction est-il appelé, de combien de pas le bloc fonction a-t-il besoin ?
La formule ci-dessous permet de calculer combien de pas de code programme peuvent être économisés.
La situation actuelle est la suivante :
Un bloc fonction donné
Est appelé X fois
Utilise Y pas => nombre total de pas : X * Y pas
Utilise TON, SR, drapeaux d’impulsion
Le bloc fonction donné peut être remplacé par une fonction nécessitant ce qui suit :
Des pas supplémentaires pour X appels pour copier deux fois les données du DUT mémoire, c.-à-d. X * 2 * 7 pas environ (par ex. pour deux FP10_BKMV)
Y * 2 pas pour un appel d’une fonction commune (des pas supplémentaires sont supposés)
Un appel commun de :
TON_FUN utilisant xxx pas
SR_FUN utilisant xxx pas
R_TRIG_FUN utilisant xxx pas
Cet exemple de calcul ne donne que des chiffres approximatifs.
Un bloc fonction donné
Est appelé 30 fois
Utilise 750 pas => nombre total de pas : 30 * 750 pas = 22500 pas
Utilise TON, SR, drapeaux d’impulsion
Le bloc fonction donné peut être remplacé par une fonction nécessitant ce qui suit :
Des pas supplémentaires pour 30 appels pour copier deux fois les données du DUT mémoire, c.-à-d. 30 * 2 * 7 pas = 420 pas (par ex. pour deux FP10_BKMV)
750 * 2 pas pour un appel d’une fonction commune = 1500 pas (des pas supplémentaires sont supposés)
Un appel commun de :
TON_FUN utilisant 200 pas
SR_FUN utilisant 35 pas
R_TRIG_FUN utilisant 35 pas
Nombre total de pas : 420 pas + 1500 pas + 200 pas + 35 pas + 35 pas = 2190 pas
Résultat : Avec cette fonction, vous économisez environ 22500 pas - 2190 pas = 20310 pas.
Procédure de conversion d’un bloc fonction utilisateur XXX en une fonction XXX_FUN
Nous recommandons de respecter les conventions de noms.
Une fonction XXX avec une variable VAR_IN_OUT et un DUT mémoire dutXXX de type de données XXX_FUN_INSTANCE_DUT est utilisée dans tous les exemples.
Opération |
Programme d’origine |
Programme avec FB converti en fonction |
---|---|---|
Appels ![]() |
![]() |
|
En-tête du POU bloc fonction ![]() |
En-tête du POU fonction ![]() |
|
DUT XXX_FUN_INSTANCE_DUT ![]() |
||
Set Reset |
![]() |
![]() |
KEEP |
![]() |
![]() |
Affectation, calcul conditionnels |
![]() |
![]() |
Valeurs de variables croissantes/décroissantes |
![]() |
![]() |
Drapeaux d’impulsion |
![]() |
![]() |
À la fin de la fonction : si nécessaire, affectez des variables mémoires aux variables de sorties correspondantes : |
![]() |
|
SR |
![]() |
![]() |
RS |
![]() |
![]() |
TON |
![]() |
![]() |
TM_100ms |
![]() |
![]() |
Une fonction XXX avec une variable VAR_IN_OUT et un DUT mémoire dutXXX de type de données XXX_FUN_INSTANCE_DUT est utilisée dans tous les exemples.
Opération |
Programme d’origine |
Programme avec FB converti en fonction |
---|---|---|
Set Reset |
|
|
KEEP |
|
|
Affectation, calcul conditionnels |
|
|
Valeurs de variables croissantes/décroissantes |
|
|
Drapeaux d’impulsion |
|
|
À la fin de la fonction : si nécessaire, affectez des variables mémoires aux variables de sorties correspondantes : |
|
|
SR |
|
|
RS |
|
|
TON |
|
|
TM_100ms |
|
|