循环任务
CODESYS支持多种任务类型,其中最为常见的任务类型是循环任务,循环任务是指任务函数被每隔一段时间调用一次,而且任务应该在任务间隔时间内执行完。
但是如果任务没有在规定的时间内执行完怎么办呢?
看门狗
对于只有打工命的工控技术来说,是永远没有躺平一说,于是“祭出”看门狗(watchdog)机制来避免循环任务执行超时。任务的看门狗会在当周期任务执行超时时,终止超时的IEC任务执行,并提示“异常”的错误状态。
图显示了codesys编程上位机编程软件在任务配置中启用看门狗功能,选择任务类型、任务周期、使能看门狗、看门狗超时和灵敏度。
当触发看门狗报警时,运行时将输出重置为默认值,并且在上位机编程软件的相关设备界面中提示“IO update while in stop”和“set outputs to default values”。
灵敏度
在任务配置中,看门狗的“灵敏度”是一个比较特殊的参数,用于定义监视任务超时的一种容忍程度,有点像足球比赛中的红黄牌,数值表示看门狗会在任务执行超过多少倍时间时才会报警,如下表所示。
灵明度 | 超过设定时间的倍数 |
---|---|
0,1 | 1 |
2 | 2 |
n | n |
最终的看门狗触发时间=时间X灵明度,当看门狗时间为100ms,灵敏度为2说明当任务执行超过100*2=200时才会触发看门狗报警,并中止超时的IEC任务。
看门狗操作
看门狗既可以在PLC程序组态时进行配置,也可以PLC程序中通过调用API函数进行启停操作,API函数包含在CmpIecTask.library库中,以下步骤采用ST语言:
-
函数获得当前的IEC任务,并且声明RTS_IEC_HANDLE类型的变量来标识该IEC任务;
-
IecTaskDisableWatchdog/IecTaskEnableWatchdog接口功能实现看门狗的停用和启用。
hIecTask = RTS_IEC_HANDLE;
hIecTask = IecTaskGetCurrent(0);
IecTaskDisableWatchdog(hIecTask);
... // Code that is protected against watchdog
IecTaskEnableWatchdog(hIecTask);
小结
为了监督PLC周期任务能在正确的时间内执行完,可以在上位机编程软件的任务配置中使能看门狗,这样可以启动任务超时报警处理,同时看门狗机制是可以在程序中动态修改。
标签:基于,执行,看门狗,任务,codesys,IEC,超时,hIecTask From: https://www.cnblogs.com/ChenMichael/p/18132514