Skip to main content

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.

. Spécification:
  • 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 de Default_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 de Default_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 le UpdateInTask paramètre dans le IO section.

    • NONE: Aucun indicateur n'est défini.

Exemple 17. Exemple
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 le Custom_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 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.

Exemple 18. Exemple
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.

. Quelques règles de base sur la manière dont les tâches sont générées doivent être mentionnées ici :
  • 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.