Rubrique : Machines à sous
Cette section définit la disponibilité et le type d'emplacements des modules dans l'arborescence des modules. Deux types différents de slots peuvent être définis.
Fente
SEC Slots                                                   //optional: yes, modifier: [UPDATE]]
    SEC Slot : <slot identifier>                            //optional: yes, modifier [HIDE,UPDATE]
            Variable := <variable name>;                        //optional: no, type: InstancePath
            Role := <role name>;                                //optional: no, type: text
            Type := <slot type>;                                //optional: no, type: SlotType
            Inst_Prefix := <instance prefix>;                   //optional: yes, type: ID
            Optional := TRUE/FALSE;                             //optional: yes, type: BoolFlag
            Default_Inst_Name := <instance name>;               //optional: yes, type: text
            Pragmas := [<pragma1>, <pragma2>,...];              //optional: yes, type: Pragmalist
            RegularExpressionParameterId :=  <RegEx param ID>   //optional: yes, type: text
            SEC Default_Allocation :                            //optional: yes, modifier [UPDATE]
                    Module_Name := <default module ID>;             //optional: yes, type: ID
                    Instance_Name := <default name>;                //optional: yes, type: ID
                    NotDeletable := TRUE/FALSE                      //optional: yes, type: BoolFlag
                    SEC VisuEmbeddings                              //optional: yes, modifier [UPDATE]
                            Empty := TRUE/FALSE;                        //optional: yes, type: BoolFlag
                            SEC Embedding : <visu identigier>           //optional: yes, modifier [UPDATE]
                                    VisuName := <visu name>;                //optional: no, type: ID
                                    Target := <target name>;                //optional: yes, type: ID
                                    LinkId := <link ID>;                    //optional: yes, type: ID
                            END_SEC
                    END_SEC
                    SEC PageVisu                                    //optional: yes, modifier [UPDATE]
                            VisuName := <visu name>;                    //optional: yes, type: ID
                            TopLevelTap := TRUE/FALSE;                  //optional: yes, type: BoolFlag
                    END_SEC
                    SEC IOMappings                                  //optional: yes, modifier [UPDATE]
                            SEC Mapping : <mapping identifier>          //optional: yes, modifier [UPDATE]
                                    NoMapping := TRUE/FALSE;                //optional: yes, type: BoolFlag
                                    STExpression := <ST expression>;        //optional: yes, tye: ID/ST expression
                            END_SEC
                    END_SEC
                    SEC Parameters                                  //optional: yes, modifier [UPDATE]
                            SEC Param : <param identifier>              //optional: yes, modifier [UPDATE]
                                    Value := <value>;                       //optional: no, type: ID)
                            END_SEC
                    END_SEC
            END_SEC
    END_SEC
END_SECLes détails concernant la syntaxe des types de définition sont décrits dans la section Déclaration du module.
- La section - Slotdéfinit un emplacement qui autorise 0 connexion ou 1 connexion.
- La cible de la section - Slotdoit identifier le paramètre de manière unique. Il ne doit donc pas y avoir deux emplacements différents (que ce soit- Slotou- Slot_Multi) qui ont la même cible. (Les majuscules/minuscules ne sont pas pertinentes.)
- La définition - Variableest un chemin d'instance d'entrée relatif au bloc fonctionnel du module. Le chemin d'instance peut faire référence dans tous ses composants uniquement à des variables d'entrée (pour les instances de structure également à des variables locales). Le type de la variable adressée doit être une interface ou un type FB. Deux slots différents ne doivent pas utiliser la même variable.
- Roledéfinit la description du rôle du slot.
- Typedéfinit le type d'emplacement. Le type de connexion peut avoir les valeurs suivantes :- SUBMODULE: Emplacement pour les instances de sous-modules.
- REFERENCE: Emplacement pour les instances de sous-modules référencées.
- DECOUPLED: Emplacement pour instances de modules "découplés".- Voir également: Section : Découplé 
 
- Inst_Prefixest un préfixe utilisé pour le nom de la variable FB générée. Préfixe vide (- Inst_Prefix := ;) est également possible, mais peut créer des conflits avec d'autres noms de variables du bloc fonction. Ne peut être spécifié que pour- SUBMODULEtapez des emplacements.
- Optionaldéfinit s'il est permis de laisser le slot ouvert ou s'il doit être connecté.
- Default_Inst_Namepeut être utilisé pour définir un nom par défaut pour les instances de module étant des enfants de cet emplacement. Chaque module ajouté recevra ce nom par défaut en utilisant l'entrée de liste de textes définie par "Default_Inst_Name". Le nom par défaut du slot est préféré à celui des métadonnées du module.
- Pragmascontient une liste de pragmas du compilateur qui sont insérés avant les instances FB des sous-modules. Les pragmas ne peuvent être utilisés que pour les emplacements gérés.
- RegularExpressionParameterIddéfinit un paramètre de type STRING/WSTRING pour ce slot. La valeur de ce paramètre est interprétée comme une expression régulière et elle doit correspondre au nom du sous-module inséré.
- Les rubriques - Slot.Default_Allocationet- Slot_Multi.Default_Allocationpermettent de définir les paramètres par défaut pour les slots avec un nombre d'éléments variable (Multi_Slots et Slots). Pour- Slots.Multi_Slotils doivent être identifiés par des cibles uniques alors que- Slots.Slotn'a pas de cible et ne peut en avoir qu'une- Default_Allocationsection. L'instance sera ajoutée en fonction de sa position dans la section. Le nom du module et le nom de l'instance suivent la définition de- Slot.DefaultModuleet- Slot.DefaultName. Si ces définitions ne sont pas disponibles, les paramètres de- Default_Allocation.Module_Nameet- Default_Allocation.Instance_Namesera utilisé. Il est recommandé d'utiliser- Default_Allocation.*pour les emplacements au lieu de- DefaultModuleet- DefaultNamequi n'existe que pour des raisons de compatibilité. Les paramètres de l'instance de module par défaut peuvent être définis dans les sous-sections de- Default_Allocation:- Module_Namedéfinit le nom du module dont une instance sera créée automatiquement. Si le module provient d'une bibliothèque, le nom du module doit être qualifié avec namespace. Le paramètre n'est autorisé que pour les emplacements de type- SUBMODULE.- Les appels infinis ne sont pas autorisés et créeront un message d'erreur (exemple : la déclaration du module "A" contient le module par défaut "B" ; la déclaration du module "B" contient le module par défaut "A"). 
- Instance_Namedoit être précisé à chaque fois- DefaultModuleest spécifié, et jamais autrement. Il doit s'agir d'un identifiant CEI valide qui est utilisé comme nom de l'instance de module par défaut. Le nom ne doit ni commencer ni se terminer par un soulignement (- _). Les noms par défaut de tous les slots d'une déclaration doivent être uniques. (Le respect de la casse ne fait aucune différence.)
- NotDeletableprécise si le module peut ou non être supprimé par l'utilisateur. Si- TRUE, le module ne peut pas être supprimé. Un message d'erreur s'affiche. Si le paramètre est- FALSEou s'il est omis, le module peut alors être supprimé.
- VisuEmbeddings: Si la- Emptyle paramètre est réglé sur- TRUE, puis une liste vide de visus intégrés est créée pour cette instance de module. Si la valeur est- FALSE, la liste souhaitée des visualisations intégrées peut être générée pour l'instance de module via la liste des visualisations intégrées souhaitées dans le- Embeddingsous-section. Chaque- Embeddingla section doit définir le nom- VisuNamede la visu intégrée souhaitée à cet effet et peut spécifier des propriétés supplémentaires telles que- Targetou- LinkIdde cette visu embarquée.
- PageVisu: Dans cette section, le PageVisu de l'instance de module peut être choisi (- VisuName). De plus, il peut être défini si cette visu crée un- TopLevelTap. Le paramètre- TopLevelTapil faut donner les valeurs- TRUEet- FALSE.
- IOMappings: Dans la sous-section- Mappingles canaux d'E/S peuvent être définis. Les cibles des sections- Mappingdécrire le canal d'E/S cible. La valeur par défaut peut être définie sur- NoMappingou à un- STExpression.
- Parameters: Dans la sous-section- Paramla valeur- Valuede chaque paramètre défini dans la cible de la section peut être défini.
 
Slot_Multi
En utilisant la section Slot_Multi une liste de sous-instances et de références peut être créée.
SEC Slots                                                   //optional: yes, modifier: [UPDATE]]
    SEC Slot_Multi : <slot name>                            //optional: yes, modifier [HIDE,UPDATE]
            Variable := <variable name>;                        //optional: no, type: InstancePath
            Var_Count := <variable for count>;                  //optional: no, type: InstancePath
            Role := <name role>;                                //optional: no, type: text
            Cardinality := [<minimum> .. <maximum>];            //optional: no, type: Cardinality
            Type := <slot type>;                                //optional: no, type: SlotType
            Inst_Prefix := <instance prefix>;                   //optional: yes, type: ID
            Pragmas := <pragma list>;                           //optional: yes, type: Pragmalist
            Default_Inst_Name := <instance name>;               //optional: yes, type: text
            RegularExpressionParameterId :=  <RegEx param ID>   //optional: yes, type: text
            SEC Default_Allocation :                            //optional: yes, modifier [UPDATE]
                    Module_Name := <default module ID>;             //optional: yes, type: ID
                    Instance_Name := <default name>;                //optional: yes, type: ID
                    NotDeletable := TRUE/FALSE                      //optional: yes, type: BoolFlag
                    SEC VisuEmbeddings                              //optional: yes, modifier [UPDATE]
                            Empty := TRUE/FALSE;                        //optional: yes, type: BoolFlag
                            SEC Embedding :  <visu identifier>          //optional: yes, modifier [UPDATE]
                                    VisuName := <visu name>;                //optional: no, type: ID
                                    Target := <target name>;                //optional: yes, type: ID
                                    LinkId := <link ID>;                    //optional: yes, type: ID
                            END_SEC
                    END_SEC
                    SEC PageVisu                                    //optional: yes, modifier [UPDATE]
                            VisuName := <visu name>;                    //optional: yes, type: ID
                            TopLevelTap := TRUE/FALSE;                  //optional: yes, type: BoolFlag
                    END_SEC
                    SEC IOMappings                                  //optional: yes, modifier [UPDATE]
                            SEC Mapping :  <mapping identifier>;        //optional: yes, modifier [UPDATE]
                                    NoMapping := TRUE/FALSE;                   //optional: yes, type: BoolFlag
                                    STExpression := <ST expression>;        //optional: yes, tye: ID/ST expression
                            END_SEC
                    END_SEC
                    SEC Parameters                                  //optional: yes, modifier [UPDATE]
                            SEC Param :  <param identifier>             //optional: yes, modifier [UPDATE]
                                    Value := <value>;                       //optional: no, type: ID)
                            END_SEC
                    END_SEC
            END_SEC
    END_SEC
END_SEC- Var_Countdéfinit le chemin de l'instance d'entrée du bloc fonctionnel du module. Cette variable (de type Integer) enregistrera les informations sur le nombre d'instances connectées au slot.
- Cardinalitydéfinit le nombre minimum et maximum d'instances.
- Le - Slot_Multi.Default_AllocationLa section peut être utilisée pour définir des allocations par défaut pour les emplacements avec un nombre variable d'éléments. Ils doivent être identifiés via des cibles uniques. Les instances sont insérées dans l'ordre des sections. Pour le nom du module et le nom de l'instance, les spécifications pour- Slot.DefaultModuleou- Slot.DefaultNameappliquer. Le nombre d'affectations par défaut ne doit pas dépasser le chiffre supérieur.
- La variable adressée par un - Slot_Multila section doit être de type- POINTER TO <INTERFACE>.
- Chaque variable d'entrée de type entier peut être adressée par - Var_Countjuste une fois. (Cela inclut également- InstRef_Multi.Var_Countet- VarArray.Var_Count).
SEC Slot
        SEC Slot_Multi : subs
                Variable := pSubs;
                Var_Count := uiArraySize;
                Role := TL.Role;
                Cardinality := [2 .. 17];
                Type := SUBMODULE;
                RegularExpressionParameterId := Param_RegEx_Ref;
                SEC Default_Allocation : def1
                        Module_Name   := Sub1;
                        Instance_Name := Submodule;
                END_SEC
                Name := TL.Input1_Name;
                Desc := TL.Input1_Desc;
        END_SEC
END_SECEntre autres déclarations, la partie déclaration du bloc fonctionnel doit contenir : uiArraySize: UINT; pSubs: POINTER TO ITestModule.
Dans l'exemple, un emplacement est défini et contient au moins 2, mais au plus 17 sous-instances. Un tableau sera créé pour les sous-instances et pSubs le souligne. Lors de l'ajout de l'instance, le sous-module portant le nom Submodule de type Sub1 sera ajouté automatiquement à l’emplacement.