部分:顶层
位于模块树第一层的模块称为顶级模块。与其他模块相比,它们具有可以直接从一个或多个任务调用的方法。顶级模块包含以下部分 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 将确保调用所有子模块。