Section : Niveau supérieur
Les modules situés au premier niveau de l'arborescence des modules sont appelés modules de niveau supérieur. Contrairement aux autres modules, ils disposent de méthodes qui peuvent être appelées directement depuis une ou plusieurs tâches. Les modules de niveau supérieur contiennent la section Toplevel
.
SEC Toplevel //optional: yes, modifier: [UPDATE] GVL_Name := <GVL name>; //optional: yes, type: literal Default_Application := <default application>; //optional: yes, type: QID Default_POUPool := <TRUE/FALSE>; //optional: yes, type: BoolFlag Pragmas := [<pragma1>, <pragma2>,...]; //optional: yes, type: Pragmalist SEC Standard_Task : <task name> //optional: yes, modifier: [HIDE,UPDATE] Name := <task name>; //optional: no, type: ID Desc := <task description>; //(optional: no, type: Text) Flags:= <flag>; //(optional: no, type: StdTaskFlags) END_SEC SEC Custom_Task : <task name> //optional: yes, modifier: [UPDATE] Priority := <priority>; //optional: no, type: Subrange(0 .. 31) Interval := <interval>; //optional: no, type: TimeLiteral) Flags:= <flag>; //optional: no, type: CustomTaskFlags) END_SEC END_SEC
Les détails concernant la syntaxe des types de définition sont décrits dans la section Déclaration du module.
GVL_Name
définit le nom de la GVL dans laquelle l'instance du module et toutes ses sous-instances seront déclarées. L'espace réservé%Instancename%
(L'orthographe en majuscules ou minuscules n'est pas pertinente), sera remplacé par le nom de l'instance du module.Le paramètre
Default_Application
définit l'affectation de l'application pour toutes les instances de ce module à une application spécifique. Si une application par défaut est définie, l'utilisation deDefault_POUPool
n'est pas possible.Le paramètre
Default_POUPool
définit l'affectation d'application pour toutes les instances de ce module au pool de POU. Si un pool de POU par défaut est défini, l'utilisation deDefault_Application
n'est pas possible.Le paramètre
Pragmas
contient une liste de pragmas du compilateur, qui seront insérés avant la déclaration des instances FB du module.
La section Standard_Task
définit les tâches à partir desquelles les appels seront exécutés. Pour cela, trois tâches standards sont disponibles : LOW
, MEDIUM
, et HIGH
. Les définitions de Standard_Task
sont:
Name
: Nom de tâche par défaut qui sera défini comme affectation de tâche après la création de l'instance de module.Desc
: Identifiant de l'appel de tâche. Celui-ci doit être court et significatif (exemple :I/O task
).Flags
: Les valeurs suivantes peuvent être combinées avec le|
personnage:CREATE_IF_MISSING
: La tâche sera créée si elle n'existe pas.READONLY
: L'affectation de la tâche est en lecture seule et l'utilisateur ne peut pas la modifier.UPDATE_IOS
: La tâche permet de mettre à jour les E/S. Chaque E/S peut être écrasée par leUpdateInTask
paramètre dans leIO
section.NONE
: Aucun indicateur n'est défini.
SEC Standard_Task : MEDIUM Name := MainTask ; Desc := TL.TaskMedium_Desc ; Flags := READONLY | CREATE_IF_MISSING ; END_SEC
En utilisant la section Custom_Task
un module peut définir une ou plusieurs tâches personnalisées. La cible de la section doit être le nom d'une méthode du bloc fonction du module. La méthode ne doit pas avoir d'arguments (ni INPUT
, OUTPUT
, ni INOUT
).
Priority
: Définit la priorité de la tâche.Interval
: Définit l'intervalle des tâches (constante de type de données "TIME" ou "LTIME").Flags
: Les valeurs suivantes peuvent être combinées avec le|
personnage:SHARED
: Pour des raisons de compatibilité, cet indicateur existe toujours, mais est toujours implicitement supposé être défini. Cela signifierait essentiellement que si une tâche avec les propriétés spécifiées dans leCustom_Task
existe déjà, cette tâche sera utilisée. Mais comme une nouvelle tâche sera créée s’il n’existe aucune tâche existante avec des propriétés correspondantes, cet indicateur devient obsolète. Le nom de la tâche créée estTASK_<ModuleInstanceName>_<MethodName>
.UPDATE_IOS
: La tâche sera utilisée pour mettre à jour les E/S, qui sont connectées aux expressions ST ou directement aux E/S du module.NONE
: Aucun indicateur n'est défini.
Il n'y a pas d'implémentation par défaut dans la classe de module pour la méthode spécifiée.
SEC Custom_Task : Method1 Priority := 7 ; CycleTime := t#14ms ; Flags := NONE ; END_SEC
Astuce
Exactement une tâche standard ou spécifique doit avoir le UPDATE_IOS
ensemble de drapeaux.
S'il existe des tâches standards qui n'ont pas le
CREATE_IF_MISSING
indicateur défini, une tâche avec le nom spécifié et les propriétés des paramètres du générateur doit exister. Si les propriétés ne correspondent pas à celles spécifiées, un message d'avertissement s'affiche.S'il existe des tâches standard, qui ont le
CREATE_IF_MISSING
indicateur défini, une tâche avec les propriétés spécifiées est d'abord générée. Désormais, chaque fois que les paramètres du générateur pour cette tâche sont modifiés, la tâche est adaptée, sans aucun message d'avertissement.Les tâches standard de types différents faisant référence au même nom de tâche ne sont pas autorisées. Dans ce cas, aucune erreur n'est émise.
En fonction du standard configuré, les méthodes suivantes sont appelées au début et à la fin de la tâche définie pour chaque instance de niveau supérieur :
METHOD CallPrioHighStart: BOOL METHOD CallPrioHighEnd: BOOL METHOD CallPrioMediumStart: BOOL METHOD CallPrioMediumEnd: BOOL METHOD CallPrioLowStart: BOOL METHOD CallPrioLowEnd: BOOL
Chaque module est responsable d'appeler ses instances de sous-module. Les références de sous-modules ne doivent pas être appelées. L'implémentation par défaut dans le FB Module
appelle les méthodes respectives de toutes les instances de sous-modules dans l'ordre de leur position dans l'arborescence des modules.
Astuce
Le pointeur SUPER permet d'accéder à l'instance du bloc fonction de base. Ainsi par exemple l'appel SUPER^.CallPrioHighStart()
peut être utilisé pour appeler la méthode Module.CallPrioHighStart()
si le bloc fonction s'étend Module
. De cette façon, la mise en œuvre dans Module
s'assurera que tous les sous-modules sont appelés.