贝加莱X20 PLC编译报“看门狗时间小于任务周期”的参数增大操作

发布于 2026-03-16 09:55:41 · 浏览 3 次 · 评论 0 条

当你在贝加莱(B&R)Automation Studio 中编译 X20 系列 PLC 项目时,遇到错误提示:

Watchdog time is smaller than task cycle time

这表示:当前任务(Task)所配置的看门狗超时时间(Watchdog Time)小于该任务的实际循环周期(Cycle Time)。PLC 运行时会持续监控每个任务是否在规定时间内完成一次扫描;若未完成,看门狗触发,系统将强制停止该任务并报错——这是安全机制,防止程序卡死导致控制失效。

该错误不涉及语法或硬件连接问题,而是纯参数配置冲突,必须通过调整两个关键参数的数值关系来解决。以下是完整、可立即执行的操作指南。


一、定位出错任务与当前参数值

  1. 打开 Automation Studio 工程,确保已加载目标 X20 PLC 项目(.apj 文件)。
  2. 展开左侧“Project”树形结构,依次进入:
    ApplicationTasks
  3. Tasks 节点下,找到被标红(红色感叹号图标)或名称旁带警告符号的任务——通常是主循环任务(如 MainTaskFastTask 或自定义任务名)。
  4. 双击该任务,打开其属性对话框。
  5. 切换到 Cycle 选项卡,记录以下两项数值(单位均为毫秒 ms):
    • Cycle time:显示为 X.XX ms(例如 2.00 ms
    • Watchdog time:显示为 Y.YY ms(例如 1.50 ms

✅ 正确关系必须满足:
Watchdog timeCycle time
Y.YY < X.XX(如 1.50 < 2.00),即触发本错误。


二、增大看门狗时间的三种可行方案(按推荐顺序)

⚠️ 注意:所有修改必须在任务属性中进行,不可在代码中硬编码修改(如 SET_WATCHDOG() 函数无效,X20 不支持运行时动态改看门狗)。

方案 A:直接增大 Watchdog time(最常用、最安全)

  1. 在任务属性 Cycle 选项卡中,点击 Watchdog time 输入框右侧的下拉箭头。
  2. 从下拉列表中选择一个大于等于当前 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 ms10 ms

  3. 确认修改后,点击 OK 保存属性。
  4. 重新编译整个项目(BuildRebuild Solution)。

✅ 优势:无需改动逻辑,不影响任务实时性,适配所有 X20 CPU 型号(X20CP0484、X20CP1484、X20CP3484 等)。


方案 B:同步增大 Cycle time(适用于对实时性要求不苛刻的任务)

若任务内逻辑较轻(如仅做状态轮询、HMI 数据更新),且当前 Cycle time 设置过小(如 0.5 ms),可适当放宽周期以降低 CPU 负载,并自然满足看门狗约束。

  1. 在同一 Cycle 选项卡中,点击 Cycle time 输入框。
  2. 输入一个大于原值且为 0.1 ms 整数倍的新值(X20 最小分辨率 0.1 ms)。

    示例:原为 0.5 ms → 改为 1.0 ms;原为 2.00 ms → 改为 2.5 ms3.0 ms

  3. 自动同步:修改 Cycle time 后,Automation Studio 通常会自动将 Watchdog time 设为相同值(前提是原 Watchdog time 未被手动锁定)。若未自动同步,请手动将 Watchdog time 设为与新 Cycle time 相等或更大。
  4. 点击 OK,再执行 Rebuild Solution

✅ 优势:减轻 CPU 扫描压力,降低因高频率中断引发的抖动风险。
❌ 注意:若该任务驱动高速轴、IO 链路或安全逻辑,不得随意增大周期,需先评估运动控制周期匹配性(如伺服位置环周期须 ≤ 1 ms)。


方案 C:启用“Watchdog disabled”(仅限调试,严禁用于正式部署)

该选项会完全禁用该任务的看门狗监控,绕过检查但牺牲安全性,仅限离线仿真或故障临时排查。

  1. 在任务属性 Cycle 选项卡中,勾选 Disable watchdog 复选框。
  2. 此时 Watchdog time 输入框变为灰色不可编辑,系统不再校验其与周期的关系。
  3. 点击 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 配置中,右键控制器 → PropertiesReal-time 选项卡;
  • 勾选 Show I/O scan time in task monitor
  • 下载项目后,在 OnlineTask Monitor 中查看各任务的 I/O scan 列数值;
  • 若该值持续 > 0.2 ms,需优化 IO 配置:减少未使用通道、关闭未启用的诊断功能(如 Enable channel diagnostics)、选用更高带宽背板(X2X Link vs X2X Link Pro)。

四、验证与固化操作

完成参数调整后,必须执行以下验证步骤:

  1. 在线下载OnlineDownload to Target,确保无编译/下载错误。
  2. 启动监控OnlineTask Monitor,观察目标任务的:
    • Actual cycle time(实测周期):应稳定 ≤ 设定 Cycle time
    • Watchdog status:显示 OK(非 TimeoutDisabled);
    • Load %:CPU 总负载 ≤ 70%(长期 > 85% 易触发隐式超时)。
  3. 压力测试
    • Task Monitor 中右键任务 → Start Load Simulation
    • 设置模拟负载为 120%,持续 5 分钟;
    • 观察是否出现 Watchdog timeout 报警(Event Log 中搜索 Error 8005)。
  4. 固化配置
    • 将最终确定的 Cycle timeWatchdog 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 MonitorWD 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 循环等待外部信号 移除阻塞语句,改用 EVENTTIMER 非阻塞等待 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} $$
这是保守但必要的安全边界。

graph LR A["开始: 配置任务"] --> B["读取 Cycle time
和 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

评论 (0)

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

扫一扫,手机查看

扫描上方二维码,在手机上查看本文