e!COCKPIT : Exemples de fonctions pour la navigation en visu

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