Skip to main content

Sektion: Slots

Diese Sektion definiert die Verfügbarkeit und den Typ der Steckplätze von Modulen im Modulbaum. Es können zwei unterschiedliche Steckplätze definiert werden.

Steckplatz

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_SEC

Details über die Syntax der Definitionstypen sind im Kapitel Syntax der Moduldeklaration beschrieben.

. Spezifikation:
  • Der Abschnitt Slot definiert einen Steckplatz, der 0 oder 1 Verbindung eingehen kann.

  • Das Target eines Slot-Abschnitts muss den Steckplatz eindeutig identifizieren. Somit darf es keine zwei unterschiedlichen Steckplätze geben (egal ob Slot oder Slot_Multi), die dasselbe Target haben. (Groß-/Kleinschreibung ist unerheblich.)

  • Variable ein Eingangs-Instanzpfad relativ zum Modulfunktionsbaustein. Der Instanzpfad darf sich in allen seinen Komponenten nur auf Eingangsvariablen beziehen (bei Strukturinstanzen auch lokale Variablen). Der Typ der adressierten Variable muss ein Interface oder ein FB-Typ sein. Zwei verschiedene Slots dürfen nicht dieselbe Variable verwenden.

  • Role definiert die Rollenbezeichnung des Steckplatzes.

  • Type definiert den Steckplatztyp. Die Verbindungsart kann folgende Werte annehmen:

    • SUBMODULE: Slot für Submodul-Instanzen.

    • REFERENCE: Slot für referenzierte Submodul-Instanzen.

    • DECOUPLED: Slot für „Decoupled“-Moduleinstanzen.

      Siehe auch: Sektion Decoupled

  • Inst_Prefix ist ein Präfix, das für den Namen der generierten FB-Instanzvariable verwendet wird. Leere Präfix (Inst_Prefix := ;) sind auch möglich, können jedoch Konflikte mit anderen Variablennamen des Funktionsbausteins erzeugen. Darf nur für Steckplätze vom Typ SUBMODULE angegeben werden.

  • Optional gibt an, ob der Steckplatz unverbunden bleiben darf oder immer verbunden werden muss.

  • Default_Inst_Name dient dazu einen Default-Namen für Modulinstanzen unter diesem Slot anzugeben. Jedes Modul, das hinzugefügt wird, bekommt standardmäßig den Instanznamen der hier (über eine evtl. mehrsprachige Textliste) angegeben werden kann. Der Default-Name des jeweiligen Slots wird dabei dem der Modul-MetaDaten bevorzugt.

  • Pragmas enthält eine Liste von Compiler-Pragmas, die vor FB-Instanzen der Submodule eingefügt werden. Pragmas dürfen nur für verwaltete Steckplätze verwendet werden.

  • RegularExpressionParameterId definiert einen Parameter vom Typ STRING/WSTRING für diesen Steckplatz. Der Wert dieses Parameters wird als regulärer Ausdruck interpretiert und muss mit dem Namen des eingefügten Submoduls übereinstimmen.

  • Im Abschnitt Slot.Default_Allocation bzw. Slot_Multi.Default_Allocation können Default-Einstellungen für Steckplätze mit variabler Anzahl von Elementen (Multi_Slots und Slots) festgelegt werden. Für Slots.Multi_Slot müssen diese durch eindeutige Targets beschrieben werden, wogegen Slots.Slot kein Target und nur einen Abschnitt Default_Allocation besitzt. Die Instanz wird wird gemäß ihrer Position innerhalb des Abschnitts eingefügt. Der Modulname und Instanzname wird durch Slot.DefaultModule bzw. Slot.DefaultName beschrieben. Wenn diese Definitionen nicht vorhanden sind, werden Default_Allocation.Module_Name und Default_Allocation.Instance_Name verwendet. Es wird empfohlen, Default_Allocation.* anstelle von DefaultModule und DefaultName für Slots zu verwenden, da diese nur noch aus Kompatibilitätsgründen vorhanden sind. Die Definition einer Default-Modulinstanz kann im Unterabschnitt Default_Allocation festgelegt werden.

    • Module_Name ist der Name des Moduls von dem automatisch eine Instanz angelegt und mit dem Steckplatz verbunden wird. Wenn das Modul aus einer Bibliothek kommt, muss der Modulname mit Namespace qualifiziert sein. Der Parameter ist nur für Steckplätze vom Typ SUBMODULE erlaubt.

      Endlose Aufrufe sind nicht erlaubt und erzeugen eine Fehlermeldung (Beispiel: Deklaration von Modul „A“ enhält ein Default-Modul „B“; Deklaration von Modul „B“ enthält Default-Modul „A“.)

    • Instance_Name muss immer dann angegeben werden, wenn DefaultModule angegeben wurde, und sonst nie. Es muss ein gültiger IEC-Identifier sein, der als Name der Default-Modulinstanz verwendet wird. Der Name darf nicht mit einem Unterstrich (_) beginnen oder enden. Die Default-Namen aller Steckplätze einer Deklaration müssen eindeutig sein. (Groß- und Kleinschreibung spielt keine Rolle.)

    • NotDeletable legt fest, ob das Modul durch den Anwender gelöscht werden kann. Wenn TRUE, dann kann das Moduls nicht gelöscht werden. Es wird ein Fehlerdialog angezeigt. Ist der Parameter FALSE oder wird er weggelassen, kann das Modul gelöscht werden.

    • VisuEmbeddings: Wird der Parameter Empty auf TRUE gesetzt, so wird eine leere Liste an Embedded-Visus für diese Modulinstanz angelegt. Wenn der Wert FALSE ist, kann über die Auflistung der gewünschten Embedded-Visus im Unterabschnitt Embedding die gewünschte Liste von Embedded-Visus für die Modulinstanz erzeugt werden. Jede Sektion Embedding muss dazu den Namen VisuName der gewünschten Embedded-Visu definieren und kann zusätzliche Eigenschaften wie Target oder LinkId dieser Embedded-Visu angeben.

    • PageVisu: In dieser Sektion kann die gewählte PageVisu der Modulintanz gewählt werden (VisuName). Weiterhin kann angegeben werden, ob diese einen TopLevelTap erzeugen soll. Der Parameter TopLevelTap kann dazu nur die Werte TRUE und FALSE annehmen.

    • IOMappings: Im Unterabschnitt Mapping kann hier die Belegung von IO-Kanälen festegelegt werden. Das Target einer jeden Sektion Mapping gibt dabei den gewünschten Ziel-IO-Kanal an. Für die Default-Konfiguration kann der Kanal als ungemapped NoMapping oder mit einer STExpression vorbelegt werden.

    • Parameters: In dem Unterabschnitt Param kann der Wert Value eines jeden Parameters, der im Target der Sektion angegeben wird, spezifiziert werden.

Mehrfachsteckplatz

In der Sektion Slot_Multi kann eine Liste von Subinstanzen und Referenzen definiert werden.

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
. Zusätzliche Spezifikationen:
  • Var_Count beschreibt den Eingangs-Instanzpfad eines Modulfunktionsbausteins von ganzzahligem Typ. In dieser Variable wird gespeichert, wie viele Instanzen mit dem Steckplatz verbunden sind.

  • Cardinality defines die minimale und maximale Anuahl von Instanzen.

  • Mit dem Abschnitt Slot_Multi.Default_Allocation können Default-Belegungen für Steckplätze mit variabler Anzahl von Elementen definiert werden. Sie müssen über eindeutige Targets identifiziert werden. Die Instanzen werden in der Reihenfolge der Abschnitte eingefügt. Für den Modulnamen und Instanznamen gelten die Angaben für Slot.DefaultModule oder Slot.DefaultName. Die Anzahl der Default-Belegungen darf die obere Stelligkeit nicht überschreiten.

  • Die von einem Slot_Multi-Abschnitts adressierte Variable muss vom Typ POINTER TO <INTERFACE> sein.

  • Jede ganzzahlige Eingangsvariable darf maximal einmal durch Var_Count adressiert werden. (Dies bezieht auch InstRef_Multi.Var_Count und VarArray.Var_Count mit ein)

Beispiel 21. Beispiel
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_SEC

Der Deklarationsteil des Funktionsbausteines muss uiArraySize: UINT; pSubs: POINTER TO ITestModule enthalten.

Im Beispiel wird ein Steckplatz definiert, der mindestens 2, höchstens aber 17 Unterinstanzen fasst. Für die Unterinstanzen wird ein Array erzeugt, pSubs zeigt auf das Array. Ein Submodul vom Typ Sub1 wird beim Anlegen der Instanz automatisch erzeugt und mit Namen Submodule unter den Steckplatz eingehängt.