Skip to main content

部分:Slots

本节定义模块树中模块的可用性和插槽类型。可以定义两种不同类型的槽。

投币口

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

有关定义类型语法的详细信息,请参阅 部分 模块声明

. 规格:
  • 这部分 Slot 定义允许 0 个连接或 1 个连接的插槽。

  • 本节的目标 Slot 必须唯一标识参数。因此,不能有两个不同的插槽(无论 Slot 或者 Slot_Multi)具有相同的目标。 (大小写无关。)

  • 定义 Variable 是相对于模块功能块的输入实例路径。实例路径在其所有组件中只能引用输入变量(对于结构实例还有局部变量)。寻址变量的类型必须是接口或 FB 类型。两个不同的槽不能使用相同的变量。

  • Role 定义槽的角色描述。

  • Type 定义槽类型。连接类型可以具有以下值:

    • SUBMODULE:子模块实例的插槽。

    • REFERENCE:引用子模块实例的插槽。

    • DECOUPLED:“解耦”模块实例的插槽。

      也可以看看: 部分:解耦

  • Inst_Prefix 是用于生成的 FB 变量名称的前缀。空前缀 (Inst_Prefix := ;) 也是可能的,但可能会与功能块的其他变量名称发生冲突。只能指定用于 SUBMODULE 类型槽。

  • Optional 定义是否允许插槽保持打开状态或者是否必须连接。

  • Default_Inst_Name 可用于定义作为此插槽子级的模块实例的默认名称。默认情况下,添加的每个模块都会使用“Default_Inst_Name”定义的文本列表条目获取此名称。插槽的默认名称优先于模块元数据之一。

  • Pragmas 包含插入在子模块的 FB 实例之前的编译器编译指示列表。指令只能用于托管槽。

  • RegularExpressionParameterId 为此槽定义 STRING/WSTRING 类型的参数。该参数的值被解释为正则表达式,并且它必须与插入的子模块的名称匹配。

  • 各部分 Slot.Default_AllocationSlot_Multi.Default_Allocation 允许定义具有可变数量元素的槽的默认设置(Multi_Slots 和 Slots)。为了 Slots.Multi_Slot 它们必须由独特的目标来识别,而 Slots.Slot 没有目标,只能有一个 Default_Allocation 部分。将根据实例在该部分中的位置添加实例。模块名称和实例名称遵循以下定义 Slot.DefaultModuleSlot.DefaultName。如果此定义不可用,则设置 Default_Allocation.Module_NameDefault_Allocation.Instance_Name 将会被使用。推荐使用 Default_Allocation.* 用于插槽而不是 DefaultModuleDefaultName 仅出于兼容性原因而存在。默认模块实例的设置可以在以下小节中定义 Default_Allocation

    • Module_Name 定义将自动创建实例的模块的名称。如果模块来自库,则模块名称必须使用命名空间进行限定。该参数仅允许用于类型为的槽 SUBMODULE

      不允许无限调用,并且会产生错误消息(例如:模块“A”的声明包含默认模块“B”;模块“B”的声明包含默认模块“A”)。

    • Instance_Name 必须在任何时候指定 DefaultModule 已指定,并且绝不会以其他方式指定。它必须是一个有效的 IEC 标识符,用作默认模块实例的名称。名称不得以下划线开头或结尾 (_)。声明的所有槽的默认名称必须是唯一的。 (区分大小写没有区别。)

    • NotDeletable 指定用户是否可以删除该模块。如果 TRUE,则该模块无法删除。显示错误消息。如果参数是 FALSE 或者省略,则可以删除该模块。

    • VisuEmbeddings:如果 Empty 参数设置为 TRUE,然后为此模块实例创建一个空的嵌入visus列表。如果值为 FALSE,然后可以通过所需的嵌入式可视化列表为模块实例生成所需的嵌入式可视化列表 Embedding 小节。每个 Embedding 部分必须定义名称 VisuName 为此目的所需的嵌入式视觉,并可以指定其他属性,例如 Target 或者 LinkId 这个嵌入式视觉。

    • PageVisu:在本节中可以选择模块实例的 PageVisu (VisuName)。此外,如果该视觉创建了一个 TopLevelTap。参数 TopLevelTap 必须给出值 TRUEFALSE

    • IOMappings: 在小节中 Mapping 可以定义I/O通道。各部分的目标 Mapping 描述目标 I/O 通道。默认值可以设置为 NoMapping 或到一个 STExpression

    • Parameters: 在小节中 Param 价值 Value 可以定义在该部分的目标中定义的每个参数。

多槽位

通过使用该部分 Slot_Multi 可以创建子实例和引用的列表。

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_Count 定义模块功能块的输入实例路径。该变量(Integer 类型)将保存有关连接到该插槽的实例数量的信息。

  • Cardinality 定义实例的最小和最大数量。

  • Slot_Multi.Default_Allocation 节可用于定义具有可变数量元素的槽的默认分配。必须通过独特的目标来识别它们。实例按部分的顺序插入。对于模块名称和实例名称,规范为 Slot.DefaultModule 或者 Slot.DefaultName 申请。默认分配的数量不得超过最高位数。

  • 由 a 寻址的变量 Slot_Multi 部分必须是类型 POINTER TO <INTERFACE>

  • 每个整数类型的输入变量可以通过以下方式寻址 Var_Count 只有一次。 (这还包括 InstRef_Multi.Var_CountVarArray.Var_Count)。

21. 例子
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

在其他声明中,功能块的声明部分必须包含: uiArraySize: UINT; pSubs: POINTER TO ITestModule

在该示例中,定义了一个槽来容纳至少 2 个、但最多 17 个子实例。将为子实例创建一个数组, pSubs 指向它。添加实例时具有名称的子模块 Submodule 类型的 Sub1 将自动添加到插槽中。