当你在贝加莱(B&R)Automation Studio 中编译 X20 系列 PLC 项目时,遇到错误提示:
Watchdog time is smaller than task cycle time
这表示:当前任务(Task)所配置的看门狗超时时间(Watchdog Time)小于该任务的实际循环周期(Cycle Time)。PLC 运行时会持续监控每个任务是否在规定时间内完成一次扫描;若未完成,看门狗触发,系统将强制停止该任务并报错——这是安全机制,防止程序卡死导致控制失效。
该错误不涉及语法或硬件连接问题,而是纯参数配置冲突,必须通过调整两个关键参数的数值关系来解决。以下是完整、可立即执行的操作指南。
一、定位出错任务与当前参数值
- 打开 Automation Studio 工程,确保已加载目标 X20 PLC 项目(
.apj文件)。 - 展开左侧“Project”树形结构,依次进入:
Application→Tasks。 - 在
Tasks节点下,找到被标红(红色感叹号图标)或名称旁带警告符号的任务——通常是主循环任务(如MainTask、FastTask或自定义任务名)。 - 双击该任务,打开其属性对话框。
- 切换到
Cycle选项卡,记录以下两项数值(单位均为毫秒 ms):Cycle time:显示为X.XX ms(例如2.00 ms)Watchdog time:显示为Y.YY ms(例如1.50 ms)
✅ 正确关系必须满足:
Watchdog time≥Cycle time
若Y.YY < X.XX(如1.50 < 2.00),即触发本错误。
二、增大看门狗时间的三种可行方案(按推荐顺序)
⚠️ 注意:所有修改必须在任务属性中进行,不可在代码中硬编码修改(如
SET_WATCHDOG()函数无效,X20 不支持运行时动态改看门狗)。
方案 A:直接增大 Watchdog time(最常用、最安全)
- 在任务属性
Cycle选项卡中,点击Watchdog time输入框右侧的下拉箭头。 - 从下拉列表中选择一个大于等于当前 Cycle time 的预设值。常见可选值包括:
1 ms,2 ms,5 ms,10 ms,20 ms,50 ms,100 ms,200 ms,500 ms,1000 ms示例:若
Cycle time = 2.00 ms,则至少选择2 ms;但为留余量,建议选5 ms或10 ms。 - 确认修改后,点击
OK保存属性。 - 重新编译整个项目(
Build→Rebuild Solution)。
✅ 优势:无需改动逻辑,不影响任务实时性,适配所有 X20 CPU 型号(X20CP0484、X20CP1484、X20CP3484 等)。
方案 B:同步增大 Cycle time(适用于对实时性要求不苛刻的任务)
若任务内逻辑较轻(如仅做状态轮询、HMI 数据更新),且当前 Cycle time 设置过小(如 0.5 ms),可适当放宽周期以降低 CPU 负载,并自然满足看门狗约束。
- 在同一
Cycle选项卡中,点击Cycle time输入框。 - 输入一个大于原值且为 0.1 ms 整数倍的新值(X20 最小分辨率 0.1 ms)。
示例:原为
0.5 ms→ 改为1.0 ms;原为2.00 ms→ 改为2.5 ms或3.0 ms。 - 自动同步:修改
Cycle time后,Automation Studio 通常会自动将Watchdog time设为相同值(前提是原Watchdog time未被手动锁定)。若未自动同步,请手动将Watchdog time设为与新Cycle time相等或更大。 - 点击
OK,再执行Rebuild Solution。
✅ 优势:减轻 CPU 扫描压力,降低因高频率中断引发的抖动风险。
❌ 注意:若该任务驱动高速轴、IO 链路或安全逻辑,不得随意增大周期,需先评估运动控制周期匹配性(如伺服位置环周期须 ≤ 1 ms)。
方案 C:启用“Watchdog disabled”(仅限调试,严禁用于正式部署)
该选项会完全禁用该任务的看门狗监控,绕过检查但牺牲安全性,仅限离线仿真或故障临时排查。
- 在任务属性
Cycle选项卡中,勾选Disable watchdog复选框。 - 此时
Watchdog time输入框变为灰色不可编辑,系统不再校验其与周期的关系。 - 点击
OK,重新编译。
⚠️ 严重警告:
- 启用后,若任务因死循环、除零、数组越界等崩溃,PLC 不会自动停机,可能造成设备失控;
- X20 安全规范(EN ISO 13849-1)明确要求安全相关任务必须启用看门狗;
- 下载至控制器前,Automation Studio 会弹出黄色警告:“Watchdog disabled for safety-critical task”——必须取消勾选才能通过安全检查。
→ 仅允许在Simulation Mode下临时启用,正式项目中绝对禁止使用。
三、进阶核查:避免隐式周期超限
有时 Cycle time 显示值合规,但实际执行时间超标,仍会触发看门狗。需排查以下隐藏因素:
1. 检查任务内调用的函数块执行耗时
- 在任务程序中(如
MainTask.POU),查找含以下特征的调用:FILE_READ/FILE_WRITE(文件操作,毫秒级延迟)TCP_SEND/TCP_RECV(网络通信,受网络质量影响)SERIAL_SEND/SERIAL_RECV(串口通信,波特率低时易阻塞)- 自定义
FOR循环嵌套过深(如FOR i := 0 TO 10000 DO ... END_FOR)
✅ 解决方法:
将高耗时操作移出周期任务,改用事件任务(Event Task)或后台任务(Background Task)处理。
例如:
- 创建新任务
FileTask,类型设为Event,触发条件设为Rising Edge of FileTrigger; - 主任务中仅置位
FileTrigger := TRUE;,不执行读写; - 文件操作由
FileTask异步完成,不占用主循环时间。
2. 核查 IO 扫描实际耗时
X20 的 Cycle time 仅含用户程序执行时间,不含底层 IO 扫描时间。若配置了大量分布式模块(如 X20DI9371 + X20DO9322 × 8 组),IO 扫描可能额外增加 0.3–0.8 ms。
✅ 解决方法:
- 在
Hardware配置中,右键控制器 →Properties→Real-time选项卡; - 勾选
Show I/O scan time in task monitor; - 下载项目后,在
Online→Task Monitor中查看各任务的I/O scan列数值; - 若该值持续 > 0.2 ms,需优化 IO 配置:减少未使用通道、关闭未启用的诊断功能(如
Enable channel diagnostics)、选用更高带宽背板(X2X Link vs X2X Link Pro)。
四、验证与固化操作
完成参数调整后,必须执行以下验证步骤:
- 在线下载:
Online→Download to Target,确保无编译/下载错误。 - 启动监控:
Online→Task Monitor,观察目标任务的:Actual cycle time(实测周期):应稳定 ≤ 设定Cycle time;Watchdog status:显示OK(非Timeout或Disabled);Load %:CPU 总负载 ≤ 70%(长期 > 85% 易触发隐式超时)。
- 压力测试:
- 在
Task Monitor中右键任务 →Start Load Simulation; - 设置模拟负载为
120%,持续 5 分钟; - 观察是否出现
Watchdog timeout报警(Event Log 中搜索Error 8005)。
- 在
- 固化配置:
- 将最终确定的
Cycle time与Watchdog time值记录在工程文档Config/PLC_Settings.xlsx中; - 在任务注释区添加说明(右键任务 →
Edit Comment):
// Cycle: 2.00 ms | WD: 5.00 ms | Verified: 2024-06-15
- 将最终确定的
五、常见错误组合与修正对照表
| 错误现象 | 根本原因 | 推荐修正方式 | 验证要点 |
|---|---|---|---|
编译报错 + Cycle time = 0.1 ms, WD = 0.1 ms |
X20 硬件最小周期为 0.1 ms,但看门狗有固有延迟 | 将 WD 改为 1 ms(最小有效值) |
编译通过;在线 Task Monitor 中 WD status = OK |
无编译错误,但运行时报 Error 8005 |
Cycle time 设为 1.00 ms,但实际负载达 1.05 ms |
改 Cycle time = 1.2 ms + WD = 2 ms |
实测 Actual cycle time ≤ 1.2 ms 且波动 < ±0.05 ms |
| 多任务共存时仅某任务报错 | 该任务含 WAIT 指令或 WHILE 循环等待外部信号 |
移除阻塞语句,改用 EVENT 或 TIMER 非阻塞等待 |
Actual cycle time 恒定,无跳变 |
六、底层原理简析(便于理解为何必须遵守)
X20 PLC 的任务调度基于硬件定时器中断。假设配置 Cycle time = T_c,则 CPU 每隔 T_c 时间触发一次中断,开始执行该任务代码。看门狗是一个独立计时器,从任务开始执行时启动,若在 T_w 时间内未收到任务完成信号(即 END_TASK 标志),即判定超时。
数学关系为:
$$
T_w \geq T_c + T_{\text{overhead}}
$$
其中 $T_{\text{overhead}}$ 是中断响应、上下文切换、IO 同步等固有开销,X20 典型值为 0.05–0.15 ms。因此即使理论周期精确匹配,也必须预留余量。Automation Studio 的校验逻辑简化为:
$$
\text{if } T_w < T_c \text{ then error}
$$
这是保守但必要的安全边界。
和 Watchdog time"] B --> C{"T_w >= T_c ?"} C -- 是 --> D["编译通过
下载运行"] C -- 否 --> E["报错:
Watchdog time is smaller..."] E --> F["方案A: 增大 T_w
方案B: 增大 T_c
方案C: 禁用WD
(仅调试)"] F --> G["修改后重新校验"] G --> C

暂无评论,快来抢沙发吧!