La version V1.1 d' EcoStruxure Machine Expert ne prend pas en charge les contrôleurs M258, LMC058 et LMC078.

Types de méthode

 

Méthodes FB_Init, FB_Reinit et FB_Exit

Fonction générale des méthodes

L'utilisation explicite des méthodes FB_Init et FB_Reinit permet d'influencer l'initialisation des variables de bloc fonction ainsi que le comportement en sortie de ces blocs.

Ce chapitre décrit les méthodes, de même que leurs applications et effets dans différentes situations nécessitant d'initialiser des variables.

FB_Init

La méthode FB_Init est disponible implicitement par défaut, et permet d'initialiser un bloc fonction ou une structure dans EcoStruxure Machine Expert.

Pour influencer l'initialisation des variables, vous pouvez déclarer explicitement la méthode FB_Init en lui ajoutant le code d'initialisation par défaut qui convient. Vous pourrez alors évaluer la valeur renvoyée.

FB_Reinit

La méthode FB_Reinit doit être déclarée de façon explicite.

Lorsqu'elle est disponible, la méthode FB_Reinit est appelée après que l'instance du bloc fonction correspondant a été copiée (lors d'un changement en ligne, suite à la modification de la déclaration du bloc). Elle permet de réinitialiser le nouveau module d'instance. La valeur renvoyée n'est pas évaluée. La réinitialisation du bloc fonction de base nécessite d'appeler explicitement FB_Reinit pour ce bloc. Vous pourrez alors évaluer la valeur renvoyée.

FB_Exit

La méthode FB_Exit doit être déclarée de façon explicite.

Si une implementation existe, la méthode est appelée avant que le contrôleur supprime le code de l'instance du bloc fonction (appel implicite). La valeur renvoyée n'est pas évaluée.

Les cas d'utilisation de ces méthodes dans différentes conditions de fonctionnement sont présentés ci-dessous.

Premier téléchargement

Lorsque vous téléchargez une application sur un contrôleur à l'état par défaut, les emplacements mémoire des variables sont définis sur l'état initial voulu. Les valeurs indiquées sont affectées aux zones de données des blocs fonction. Ce processus peut être modifié en implémentant explicitement FB_Init pour les blocs fonction dans le code de programme de l'application.

Les paramètres de méthode bInCopyCode et bInitRetains sont définis respectivement sur FALSE et TRUE pour indiquer que le premier téléchargement est en cours.

Changement en ligne

Lorsqu'une commande Changement en ligne est exécutée, les méthodes FB_Exit, FB_Init et FB_Reinit permettent de modifier l'initialisation des blocs fonction.

Lors d'un changement en ligne, les modifications apportées à l'application en mode hors ligne sont téléchargées sur le contrôleur. Les instances des blocs fonction sont mises à jour par les nouvelles instances comme suit :

Si les modifications ne concernent que la partie implémentation du bloc fonction, et non la partie déclaration, les zones de données ne sont pas remplacées. Les méthodes FB_Init, FB_Reinit et FB_Exit ne sont pas appelées.

Si vous avez modifié la partie déclaration d'un bloc fonction, la commande Changement en ligne déclenche le processus de copie décrit au paragraphe FB_Reinit. La boîte de dialogue Informations sur l'application répertorie les objets modifiés depuis le dernier téléchargement. Vous pouvez l'ouvrir en cliquant sur le bouton Détails… dans la boîte de dialogue à partir de laquelle vous avez sélectionné l'option Se connecter avec changement en ligne.

Les paramètres bInCopyCode et bInitRetains des méthodes FB_Init et FB_Reinit sont définis respectivement sur TRUE et FALSE pour indiquer qu'un changement en ligne est en cours.

Appels lors d'un changement en ligne

L'exécution de la commande Changement en ligne peut modifier le contenu des adresses.

Caution_Color.gifATTENTION

POINTEUR NON VALIDE

Vérifiez la validité des pointeurs lors de leur utilisation sur les adresses et de l'exécution de la commande Changement en ligne.

Le non-respect de ces instructions peut provoquer des blessures ou des dommages matériels.

Étape

Action

Commentaire

1

FB_Exit

old_inst.FB_Exit(bInCopyCode := TRUE);

FB_Exit est appelé pour lancer un nettoyage avant la copie.

Ce bloc fonction permet de préparer les données en vue de la prochaine procédure de copie et affecte l'état de la nouvelle instance.

Les changements de position opérés dans la mémoire sont signalés dans les autres parties de l'application.

Gardez à l'esprit que les variables de type POINTER ou REFERENCE conservent leur valeur lors d'un changement en ligne et peuvent ne plus faire référence aux emplacements mémoire souhaités à l'issue de la procédure. Les variables de type INTERFACE sont adaptées lors d'un changement en ligne. Il est probable que la nouvelle instance adopte les ressources externes (sockets, fichiers et autres pointeurs). Lorsque la copie en ligne n'a pas d'incidence sur la ressource système, le plus souvent, les ressources externes ne nécessitent pas de traitement particulier. Au besoin, elles seront gérées dans les implémentations Init ou Reinit.

2

FB_Init

new_inst.FB_Init(bInitRetains := FALSE, bInCo­pyCode := TRUE);

FB_Init permet de réaliser des opérations spécifiques pendant un changement en ligne.

Par exemple, vous pouvez utiliser cette méthode pour initialiser les variables au niveau des nouveaux emplacements mémoire ou informer sur la nouvelle position de certaines variables dans d'autres parties de l'application.

3

Opération de copie copy

copy(&old_inst, &new_inst);

Les valeurs existantes sont conservées en l'état. Elles sont copiées de l'ancienne instance vers la nouvelle.

4

FB_Reinit

new_inst.FB_Reinit();

La méthode FB_Reinit est appelée après la copie. Elle permet d'affecter les valeurs définies aux variables de l'instance de bloc fonction.

Par exemple, vous pouvez utiliser cette méthode pour initialiser les variables au niveau des nouveaux emplacements mémoire ou informer sur la nouvelle position de certaines variables dans d'autres parties de l'application.

La méthode FB_Reinit doit être implémentée indépendamment du changement en ligne. En effet, elle peut être appelée à tout moment par l'application, chaque fois qu'un bloc fonction est sur le point de reprendre son état initial.

NOTE : si vous ajoutez le pragma {attribute no_copy} à une variable d'un bloc fonction, celle-ci n'est pas copiée lors du changement en ligne. Elle est seulement initialisée.

Téléchargement d'une application mise à jour

Le fait de télécharger une application sur un contrôleur exécutant déjà une application remplace l'application existante. La méthode FB_Exit, par exemple, permet d'affecter un état donné aux ressources externes (socket, pointeurs de fichier, etc.).

Les paramètres de méthode bInCopyCode et bInitRetains sont définis sur FALSE pour indiquer qu'une application mise à jour est en cours de téléchargement.

Démarrage d'une application

Les affectations initiales sont traitées avant le premier cycle de tâches d'une application.

Exemple :

T1 : TON := (PT:=t#500ms);

Les affectations sont exécutées après l'appel de FB_Init. Pour pouvoir évaluer leur impact, ajoutez au bloc fonction le pragma {attribute call_after_init} ainsi qu'une méthode (MyInit, par exemple). Cet attribut doit être inséré au-dessus de la partie déclaration du bloc et au-dessus de la partie déclaration de la méthode correspondante. Ajoutez également le pragma {attribute call_after_init} aux blocs fonction imbriqués dans d'autres blocs fonction qui l'utilisent. Il est recommandé d'affecter les mêmes nom, signature et attribut à la méthode correspondante. Pour ce faire, appelez SUPER^.MyInit. Choisissez n'importe quel nom pour la méthode (sauf FB_Init, FB_Reinit et FB_Exit). La méthode est appelée une fois que les affectations initiales ont été traitées, avant les tâches de l'application.

NOTE : lorsque le code d'initialisation défini explicitement s'exécute, le bloc fonction a déjà été initialisé en totalité via le code d'initialisation implicite. C'est pourquoi il est impossible d'appeler SUPER^.FB_Init.

Interface de la méthode FB_Init

METHOD FB_Init : BOOL
VAR_INPUT
  bInitRetains : BOOL; // TRUE: the retain variables are initialized (reset warm /reset cold)
  bInCopyCode : BOOL; // TRUE the instance will be copied to the copy-code afterward (online change)
END_VAR

La valeur renvoyée n'est pas utilisée.

La méthode FB_Init permet de déclarer des entrées de bloc fonction supplémentaires. Les entrées sont à affecter dans la déclaration d'une instance de bloc fonction.

Exemple : méthode FB_Init pour un bloc fonction serialdevice :

METHOD PUBLIC FB_Init : BOOL
VAR_INPUT
    bInitRetains : BOOL; // Initialization of the retain variables
    bInCopyCode : BOOL; // Instance is copied to copy-code
    iCOMnum : INT; // additional input: number of the COM interface that is to be observed
END_VAR

Instanciation du bloc fonction serialdevice :

    com1: serialdevice (iCOMnum:=1);
    com0: serialdevice (iCOMnum:=0);

Interface de la méthode FB_Reinit

METHOD FB_Reinit : BOOL

Interface de la méthode FB_Exit

Le paramètre bInCopyCode. est obligatoire.

METHOD FB_Exit : BOOL
VAR_INPUT
bInCopyCode : BOOL; // TRUE: the exit method is called in order to leave the instance which will be copied afterwards (online change).
END_VAR

Blocs fonction dérivés

Lorsqu'un bloc fonction est dérivé d'un autre bloc fonction, les paramètres de sa méthode FB_Init doivent correspondre à ceux de la méthode FB_Init du bloc fonction de base. Néanmoins, il est possible d'ajouter d'autres paramètres pour initialiser l'instance de manière particulière.

Exemple d'appel de blocs fonction dérivés pour les méthodes FB_Exit et FB_Init

Étape

Action

1

fbSubSubFb.FB_Exit(...);

2

fbSubFb.FB_Exit(...);

3

fbMainFb.FB_Exit(...);

4

fbMainFb.FB_Init(...);

5

fbSubFb.FB_Init(...);

6

fbSubSubFb.FB_Init(...);