Préambule
Il peut souvent être intéressant de réaliser des boutons de navigation (précédent, suivant, début, fin,...) afin de naviguer entre différents éléments (par exemple lorsque l'on affiche des éléments d'un tableau avec des visualisations génériques)
Les fonctionnalités traitées dans ces boutons sont souvent les mêmes et nécessite un peu de code pour être gérées.
Fonctions réalisées
Les fonctions suivantes doivent être traitées par les boutons :
- Modification d'une variable d'index lors de l'appui.
- Remise à 0 de la variable d'appui sur le bouton
- Gestion de l'invisibilité du bouton
Pour des raisons de gestion des fonctions dans un programme, nous utiliserons ici la même fonction pour tous les boutons. Il faudra donc donner le type d'action désiré à la fonction.
Les variables suivantes devront être passées à la fonction :
FUNCTION fcnavigation : BOOL
VAR_INPUT
bfonction :BYTE; // 0:début, 1:précédent, 2:suivant, 3:fin
iMin :INT;
imax :INT;
iPas :INT;
END_VAR
VAR_IN_OUT
xBP :BOOL;
iIndex :INT;
END_VAR
Le code de la fonction pourrait être le suivant :
IF xBP THEN
xbp:=FALSE;
CASE bfonction OF
0:
iindex:=iMin;
1:
IF iindex>=iMin+ipas THEN
iindex:=iIndex-ipas;
END_IF
2:
IF iindex<=imax-ipas THEN
iindex:=iindex+ipas;
END_IF
3:
iindex:=imax;
END_CASE
END_IF
IF iindex<iMin THEN
iindex:=iMin;
END_IF
IF iindex>imax THEN
iindex:=imax-ipas;
END_IF
CASE bfonction OF
0,1:
IF iindex<imin+ipas THEN
fcnavigation:=TRUE;
ELSE
fcnavigation:=FALSE;
END_IF
2,3:
IF iindex>imax-ipas THEN
fcnavigation:=TRUE;
ELSE
fcnavigation:=FALSE;
END_IF
END_CASE
Utilisation
Notre fonction pourrait par exemple être utilisée de la manière suivante :
PROGRAM PLC_PRG
VAR
indexvisutableau:INT; // Index des objets affichées dans la visualisation
inbline:INT; // Nombre de lignes maxi dans le tableau d'objets
xsuivantinvisible:BOOL; // Invisibilité du bouton suivant
xprecedentinvisible:BOOL; // Invisibilité du bouton précédent
xdebutinvisible:BOOL; // Invisibilité du bouton début
xfininvisible:BOOL; // Invisibilité du bouton fin
xsuivant:BOOL; // Bouton suivant
xprecedent:BOOL; // Bouton précédent
xdebut:BOOL; // Bouton début
xfin:BOOL; // Bouton fin
END_VAR
// Gestion de l'affichage des lignes dans la visualisation
xsuivantinvisible:=fcnavigation(bfonction:=2 , iMin:=1 ,imax:=inbline ,iPas:=10 ,xBP:=xsuivant ,iIndex:=indexvisutableau );
xprecedentinvisible:=fcnavigation(bfonction:=1 , iMin:=1 ,imax:=inbline ,iPas:=10 ,xBP:=xprecedent ,iIndex:=indexvisutableau );
xfininvisible:=fcnavigation(bfonction:=3 , iMin:=1 ,imax:=inbline ,iPas:=10 ,xBP:=xfin ,iIndex:=indexvisutableau );
xdebutinvisible:=fcnavigation(bfonction:=0 , iMin:=1 ,imax:=inbline ,iPas:=10 ,xBP:=xdebut ,iIndex:=indexvisutableau );
Exemple d'utilisation dans la visualisation