Pour les fonctions créées 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 relues. Le nombre de sous-programmes ou fonctions que vous pouvez définir dépend du type d’automate.
Pour une fonction définie par l’utilisateur, un seul sous-programme est créé. Il peut être chargé à partir de plusieurs points.
Dans l’exemple suivant, nous avons utilisé des adresses FP pour faciliter la vérification du code assembleur créé à partir de ces adresses. Le programme étant plus complexe avec des adresses FP, nous vous recommandons d’utiliser des variables avec un nom significatif.
La fonction définie par l’utilisateur User_ADD est chargée dans l’éditeur de schémas à contacts (ladder) :
Elle contient les éléments suivants :
Le code assembleur suivant est créé pour l’automate :
ST |
R9010 |
Transfert des paramètres d’entrée |
|
F0 |
(*MV*) |
R9010 est toujours = TRUE |
|
DT0 |
DT0 -> User_ADD.In1 |
||
DT550 |
|||
F0 |
(*MV*) |
||
DT1 |
DT1 -> User_ADD.In2 |
||
DT551 |
|||
CALL |
0 |
Appel du sous-programme User_ADD |
|
ST |
R9010 |
Rechargement des paramètres de sortie |
|
F0 |
(*MV*) |
||
DT552 |
|||
DT2 |
User_ADD -> DT2 |
||
... |
|||
ED |
Fin du programme principal |
||
SUB |
0 |
Sous-programme User_ADD |
|
ST |
R9010 |
||
F22 |
(*PLUS_S*) |
||
DT550 |
|||
DT551 |
|||
DT552 |
if (TRUE) |
||
UserAdd=UserAdd.In1 + UserAdd.In2 |
|||
RET |
Retour au programme principal |