部分:解耦
本节定义“解耦模块”。这些模块具有顶级模块的属性,但它们也可以作为子模块插入到特定的插槽中(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
定义“解耦子模块”是否也可以像顶级模块一样插入顶级。
注意:“解耦模块”应该定义并实现相应的代理。代理应该实现与“解耦模块”相同的接口。如果父模块实例作为“解耦”模块实例位于另一个控制器下,则“解耦”模块实例仍然可以通过其代理插入到该插槽中。