Skip to main content

部分:解耦

本节定义“解耦模块”。这些模块具有顶级模块的属性,但它们也可以作为子模块插入到特定的插槽中(Type:= DECOUPLED)其他模块。模块不能同时处于“顶层”和“解耦”状态。

“解耦模块”是使用以下部分生成的 Decoupled 在模块声明中。这部分 Decoupled 与该部分几乎相同 Toplevel;但是,模块声明中只允许使用这些部分之一。

SEC Decoupled                                       //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
    Toplevel_Insertable := <TRUE/FALSE>;            //optional: yes, type: BoolFlag
    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

有关定义类型语法的详细信息在模块声明一章中进行了描述。

规格:截面的规格 Decoupled 对应于该部分的描述 Toplevel。此外,还可以定义以下参数:

  • Toplevel_Insertable 定义“解耦子模块”是否也可以像顶级模块一样插入顶级。

注意:“解耦模块”应该定义并实现相应的代理。代理应该实现与“解耦模块”相同的接口。如果父模块实例作为“解耦”模块实例位于另一个控制器下,则“解耦”模块实例仍然可以通过其代理插入到该插槽中。