部分:顶层
位于模块树第一层的模块称为顶级模块。与其他模块相比,它们具有可以直接从一个或多个任务调用的方法。顶级模块包含以下部分 Toplevel
。
SEC Toplevel //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 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
有关定义类型语法的详细信息,请参阅 部分 模块声明。
GVL_Name
定义将在其中声明模块实例及其所有子实例的 GVL 的名称。占位符%Instancename%
(大小写拼写无关),将替换为模块实例的实例名称。参数
Default_Application
定义此模块的所有实例到特定应用程序的应用程序分配。如果定义了默认应用程序,则使用Default_POUPool
不可能。参数
Default_POUPool
定义该模块的所有实例到 POU 池的应用程序分配。如果定义了默认 POU 池,则使用Default_Application
不可能。参数
Pragmas
包含编译器编译指示列表,该列表将插入到模块的 FB 实例声明之前。
这部分 Standard_Task
定义将执行调用的任务。为此,可以执行三个标准任务: LOW
, MEDIUM
, 和 HIGH
。的定义 Standard_Task
是:
Name
:默认任务名称,创建模块实例后将定义为任务分配。Desc
:任务调用的标识符。这应该简短且有意义(例如:I/O task
)。Flags
:以下值可以与|
特点:CREATE_IF_MISSING
:任务不存在则创建。READONLY
:任务分配是只读的,用户无法更改它。UPDATE_IOS
:该任务用于更新I/O。每个 I/O 都可以被覆盖UpdateInTask
中的参数IO
部分。NONE
:未设置标志。
SEC Standard_Task : MEDIUM Name := MainTask ; Desc := TL.TaskMedium_Desc ; Flags := READONLY | CREATE_IF_MISSING ; END_SEC
通过使用该部分 Custom_Task
一个模块可以定义一个或多个自定义任务。该节的目标必须是模块功能块的方法名称。该方法不能有参数(也不能有参数) INPUT
, OUTPUT
,也不 INOUT
)。
Priority
:定义任务优先级。Interval
:定义任务间隔(数据类型“TIME”或“LTIME”的常量)。Flags
:以下值可以与|
特点:SHARED
:出于兼容性原因,此标志仍然存在,但始终隐式假定已设置。这基本上意味着,如果一个任务具有在Custom_Task
部分已存在,将使用此任务。但是,由于如果不存在具有匹配属性的现有任务,则会创建一个新任务,因此该标志将变得过时。创建的任务名称为TASK_<ModuleInstanceName>_<MethodName>
。UPDATE_IOS
:该任务将用于更新连接到 ST 表达式或直接连接到模块 I/O 的 I/O。NONE
:未设置标志。
模块类中没有指定方法的默认实现。
SEC Custom_Task : Method1 Priority := 7 ; CycleTime := t#14ms ; Flags := NONE ; END_SEC
提示
恰好一项标准或特定任务必须具有 UPDATE_IOS
标志设置。
如果存在标准任务,但没有
CREATE_IF_MISSING
标志设置后,具有指定名称和生成器设置属性的任务应该存在。如果属性与指定的属性不匹配,则会显示一条警告消息。如果存在标准任务,其中有
CREATE_IF_MISSING
设置标志后,首先生成具有指定属性的任务。现在,每当更改此任务的生成器设置时,都会调整该任务,而不会出现任何警告消息。不允许引用相同任务名称的不同类型的标准任务。在这种情况下,不会发出错误。
根据配置的标准,在每个顶级实例的定义任务的开始和结束时调用以下方法:
METHOD CallPrioHighStart: BOOL METHOD CallPrioHighEnd: BOOL METHOD CallPrioMediumStart: BOOL METHOD CallPrioMediumEnd: BOOL METHOD CallPrioLowStart: BOOL METHOD CallPrioLowEnd: BOOL
每个模块负责调用其子模块实例。不得调用子模块引用。 FB中的默认实现 Module
按照模块树中的位置顺序调用所有子模块实例的相应方法。
提示
SUPER 指针提供对基本功能块实例的访问。因此例如调用 SUPER^.CallPrioHighStart()
可以用来调用方法 Module.CallPrioHighStart()
如果功能块扩展 Module
。这样,执行中 Module
将确保调用所有子模块。