无心飞扬 发表于 2025-6-20 10:22:42

基于codesys的看门狗操作

循环任务CODESYS支持多种任务类型,其中最为常见的任务类型是循环任务,循环任务是指任务函数被每隔一段时间调用一次,而且任务应该在任务间隔时间内执行完。但是如果任务没有在规定的时间内执行完怎么办呢?看门狗对于身负打工使命的工控技术来说,永远没有躺平的说法。为了保证任务进度,工控技术“祭出”了看门狗(watchdog)机制的大招。任务的看门狗会在当周期任务执行超时时,终止超时的IEC任务执行,并提示“异常”的错误状态。图显示了codesys编程上位机编程软件在任务配置中启用看门狗功能,选择任务类型、任务周期、使能看门狗、看门狗超时和灵敏度。当触发看门狗报警时,运行时将输出重置为默认值,并且在上位机编程软件的相关设备界面中提示“IO update while in stop”和“set outputs to default values”。灵敏度在任务配置中,看门狗的“灵敏度”是一个比较特殊的参数,用于定义监视任务超时的一种容忍程度,有点像足球比赛中的红黄牌,数值表示看门狗会在任务执行超过多少倍时间时才会报警,如下表所示。
灵明度超过设定时间的倍数
0,11
22
nn

最终的看门狗触发时间=时间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周期任务能在正确的时间内执行完,可以在上位机编程软件的任务配置中使能看门狗,这样可以启动任务超时报警处理,同时看门狗机制是可以在程序中动态修改。
页: [1]
查看完整版本: 基于codesys的看门狗操作