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_SECLes détails concernant la syntaxe des types de définition sont décrits dans la section Déclaration du module.
- GVL_Namedé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_Applicationdé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 de- Default_POUPooln'est pas possible.
- Le paramètre - Default_POUPooldé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 de- Default_Applicationn'est pas possible.
- Le paramètre - Pragmascontient 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 le- UpdateInTaskparamètre dans le- IOsection.
- NONE: Aucun indicateur n'est défini.
 
SEC Standard_Task : MEDIUM
        Name  := MainTask ;
        Desc  := TL.TaskMedium_Desc ;
        Flags := READONLY | CREATE_IF_MISSING ;
END_SECEn 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 le- Custom_Taskexiste 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 est- TASK_<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_SECAstuce
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_MISSINGindicateur 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_MISSINGindicateur 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.