SetCurrentTaskCycle: 设置循环执行任务间隔
此功能使用输入参数值设置循环执行任务间隔,单位为微秒 (μs),并返回运行诊断。 如果操作已成功执行,新的间隔将在下一个循环执行任务的开始生效(对当前的执行不产生影响)。
注意: 传递到功能的值必须为一千的倍数。 否则,将返回错误代码。
如果为循环执行任务定义的间隔太短(短于任务的有效持续时间和应用程序所需的其他处理过程),将在写入输出后立即重复,而不执行其他低优先级的任务或系统处理过程。 这将影响所有任务的执行并导致控制器超过看门狗限制,产生系统看门狗异常并停止控制器。
|
注意 |
|
程序执行的意外中断 |
|
在调用 SetCurrentTaskCycle 功能前,测试新的循环执行任务间隔时间,以验证其适合于阻止系统看门狗异常。 |
|
不遵循上述说明可能导致设备损坏。 |
注意: 在试运行应用程序前必须测试值的可能范围,并确保使用代码针对这些测试条件验证新的间隔。
若要查看 IL 或 ST 语言的一般表示形式,请参阅功能和功能块表示形式一章。
下表介绍输入变量:
|
输入 |
类型 |
说明 |
|---|---|---|
|
newTime |
UDINT |
POU 附加任务间隔的新值,以微秒 (μs) 为单位。 注意: 如果有效,新值将在下一个循环中可用。 |
下表对输出变量进行了描述:
|
输出 |
类型 |
说明 |
|---|---|---|
|
SetCurrentTaskCycle |
UDINT |
功能运行诊断: 0 = 未检测到错误 1 = 检测到一般(内部)错误 2 = 检测到无效参数(超出值范围) 12 = 功能未在控制器中实现 24 = 功能不受支持(例如非循环执行任务) |
注意: 此功能将更改当前循环执行任务间隔。 它不会覆盖在任务配置中设置的循环执行任务间隔参数值。 可以使用复位、重启和下载命令恢复初始配置参数。
有关控制器状态和行为的更详细信息,请参考控制器编程指南。
注意: 不要在定义为 CANopen 管理器总线循环执行任务的相同任务中使用 SetCurrentTaskCycle 功能。 更改此任务的循环执行时间可能会影响到心跳或节点防护,导致 CANopen 设备检测到错误并进入回退状态。
|
|
|
程序执行的意外中断 |
|
不要在定义为总线循环执行任务的任何任务中使用 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 语言程序:
FBD 语言程序:
LD 语言程序: