SetCurrentTaskCycle: 设置循环执行任务间隔

功能描述

此功能使用输入参数值设置循环执行任务间隔,单位为微秒 (μs),并返回运行诊断。 如果操作已成功执行,新的间隔将在下一个循环执行任务的开始生效(对当前的执行不产生影响)。

注意: 传递到功能的值必须为一千的倍数。 否则,将返回错误代码。

如果为循环执行任务定义的间隔太短(短于任务的有效持续时间和应用程序所需的其他处理过程),将在写入输出后立即重复,而不执行其他低优先级的任务或系统处理过程。 这将影响所有任务的执行并导致控制器超过看门狗限制,产生系统看门狗异常并停止控制器。

注意

程序执行的意外中断

在调用 SetCurrentTaskCycle 功能前,测试新的循环执行任务间隔时间,以验证其适合于阻止系统看门狗异常。

不遵循上述说明可能导致设备损坏。

注意: 在试运行应用程序前必须测试值的可能范围,并确保使用代码针对这些测试条件验证新的间隔。

图形表示形式

G-SE-0010249.1.jpg

 

 

IL 和 ST 表示形式

若要查看 IL 或 ST 语言的一般表示形式,请参阅功能和功能块表示形式一章。

I/O 变量介绍

下表介绍输入变量:

输入

类型

说明

newTime

UDINT

POU 附加任务间隔的新值,以微秒 (μs) 为单位。

注意: 如果有效,新值将在下一个循环中可用。

下表对输出变量进行了描述:

输出

类型

说明

SetCurrentTaskCycle

UDINT

功能运行诊断:

0 = 未检测到错误

1 = 检测到一般(内部)错误

2 = 检测到无效参数(超出值范围)

12 = 功能未在控制器中实现

24 = 功能不受支持(例如非循环执行任务)

注意: 此功能将更改当前循环执行任务间隔。 它不会覆盖在任务配置中设置的循环执行任务间隔参数值。 可以使用复位、重启和下载命令恢复初始配置参数。

有关控制器状态和行为的更详细信息,请参考控制器编程指南。

注意: 不要在定义为 CANopen 管理器总线循环执行任务的相同任务中使用 SetCurrentTaskCycle 功能。 更改此任务的循环执行时间可能会影响到心跳或节点防护,导致 CANopen 设备检测到错误并进入回退状态。

Caution_Color.gif小心

程序执行的意外中断

不要在定义为总线循环执行任务的任何任务中使用 SetCurrentTaskCycle 功能。

不遵循上述说明可能导致人身伤害或设备损坏。

示例

下列示例描述如何使用 CFC、FBD 或 LD 语言设置附加到 POU SetTaskInterval 的循环执行任务的当前间隔。

当标志 SetTaskInterval_Flag 为 TRUE(此标志在执行后自动复位为 FALSE)时执行功能 SetCurrentTaskCycle,且功能运行诊断存储在 SetTaskInterval_Diag 变量中。

注意:

该功能启用输入/输出 (EN/ENO) 通过下列方式激活:

o在 CFC 中: 右键单击功能并选择 EN/ENO 命令。

o在 FBD 中: 使用 FBD/LD/IL 菜单的命令插入带有 EN/ENO 的块添加功能。

o在 LD 中: 使用 FBD/LD/IL 菜单的视图命令转换到 FBD 视图,按上述方式插入功能并转换回 LD 视图。

变量声明:

PROGRAM SetTaskInterval

VAR

  // 设置新任务间隔命令标志

  SetTaskInterval_Flag: BOOL := FALSE;

  // 新循环执行任务间隔值 (μs)

  newTaskInterval: UDINT;

  // SetCurrentTaskCycle 功能运行诊断

  SetTaskInterval_Diag: UDINT := 0;

END_VAR

CFC 语言程序:

G-SE-0010251.1.jpg

 

 

FBD 语言程序:

G-SE-0010255.1.jpg

 

 

LD 语言程序:

G-SE-0010259.1.jpg