4. 轮询策略核心概念:轮询周期、轮询队列、轮询优先级、轮询超时与重试机制

在 SECS/GEM 数据采集系统中,轮询策略决定了主机(Host)如何高效、有序地从设备端获取 SVID(状态变量)。一个设计不良的轮询策略会导致网络拥塞、数据延迟或关键变量丢失。本章深入剖析构成轮询策略的四个核心概念:轮询周期、轮询队列、轮询优先级以及轮询超时与重试机制。

核心观点: 优秀的轮询策略不是“越快越好”,而是在“数据实时性”与“系统负载”之间找到最佳平衡点。理解这四个概念是进行策略优化的前提。

4.1 轮询周期 (Polling Cycle)

轮询周期定义了主机连续两次向设备请求同一个 SVID 的时间间隔。它是轮询策略中最基础的参数,直接决定了数据采集的粒度。

  • 固定周期: 无论设备状态如何,始终以恒定间隔轮询。实现简单,但效率较低。
  • 动态周期: 根据设备状态、数据变化率或系统负载自动调整间隔。例如,在设备处于“运行”状态时缩短周期,在“待机”状态时延长周期。
实战建议: 对于温度、压力等缓慢变化的模拟量,建议使用 1-5 秒的周期;对于晶圆计数、报警状态等离散量,建议使用 0.5-1 秒的周期。切勿对所有 SVID 使用相同的周期。
轮询周期对比:固定周期 vs 动态周期 固定周期 (T=1000ms) 请求 → 等待 → 请求 → 等待 动态周期 (T=200~2000ms) 繁忙时快采 → 空闲时慢采 适用场景 固定周期:简单监控、非关键数据 | 动态周期:高实时性要求、系统负载敏感场景

4.2 轮询队列 (Polling Queue)

轮询队列是主机端用于管理待轮询 SVID 列表的数据结构。它决定了 SVID 被轮询的顺序和并发度。常见的队列模型包括:

队列模型 描述 优点 缺点
FIFO (先进先出) 按注册顺序依次轮询 实现简单,公平性好 无法区分紧急程度
优先级队列 高优先级 SVID 始终优先被轮询 保证关键数据实时性 低优先级可能被饿死
时间片轮转 每个 SVID 分配固定时间片,超时则切换 避免单个 SVID 阻塞队列 上下文切换开销较大
避坑指南: 当队列中 SVID 数量超过 50 个时,单纯的 FIFO 模型会导致严重的“头部阻塞”问题。建议采用“优先级 + 时间片”的混合队列模型。
轮询队列结构:优先级 + 时间片混合模型 高优先级队列 (P1) SVID_001 (报警) SVID_002 (急停) 中优先级队列 (P2) SVID_010 (温度) SVID_011 (压力) 低优先级队列 (P3) SVID_020 (日志) 时间片调度器

4.3 轮询优先级 (Polling Priority)

轮询优先级为每个 SVID 分配一个等级,用于在资源有限时决定哪些数据必须优先采集。优先级通常分为 3 级或 5 级。

  • 高优先级 (Critical): 报警、急停、安全互锁等与安全相关的 SVID。必须立即响应,周期通常 < 200ms。
  • 中优先级 (Important): 工艺参数、设备状态等影响产品质量的 SVID。周期通常 500ms ~ 2s。
  • 低优先级 (Normal): 统计信息、日志、非关键状态。周期通常 > 5s,可在系统空闲时采集。
优先级反转问题: 当低优先级任务持有高优先级任务所需的资源时,会导致高优先级任务被阻塞。在轮询系统中,应避免 SVID 之间存在资源依赖关系,或使用优先级继承协议解决。
轮询优先级调度流程 轮询请求到达 检查优先级 (P1 > P2 > P3) 插入对应队列 调度器执行

4.4 轮询超时与重试机制

在 SECS/GEM 通信中,网络波动或设备繁忙可能导致轮询请求失败。超时与重试机制是保证数据采集可靠性的最后一道防线。

4.4.1 超时定义

  • T3 超时 (Reply Timeout): 主机发送请求后,等待设备回复的最长时间。通常设置为 5~10 秒。
  • T5 超时 (Connect Timeout): 建立 TCP 连接的超时时间。通常设置为 10~30 秒。
  • T6 超时 (Control Transaction Timeout): 控制事务(如 S1F13/F14)的超时时间。通常设置为 5~15 秒。

4.4.2 重试策略

策略 描述 适用场景
固定间隔重试 每次重试间隔相同时间(如 2s) 网络稳定,偶发丢包
指数退避重试 重试间隔逐次加倍(如 1s, 2s, 4s, 8s) 网络拥塞或设备过载
快速失败 重试 N 次后放弃,上报异常 关键数据,避免无限等待
重要提醒: 重试次数不宜过多(建议 3~5 次),否则会加剧网络拥塞。每次重试前应检查设备连接状态,避免在断连状态下盲目重试。
轮询超时与重试状态机 发送请求 等待回复 超时触发 重试判断 上报异常 发送成功 T3 超时 重试次数 < N 重试次数 ≥ N 重新发送

4.5 实战配置示例

以下是一个基于 SECS/GEM 协议的轮询策略配置文件示例,展示了如何将上述四个概念组合使用:

{
  "polling_strategy": {
    "queue_model": "priority_time_slice",
    "time_slice_ms": 100,
    "max_retries": 3,
    "retry_interval_ms": 1000,
    "retry_backoff": "exponential",
    "timeout": {
      "t3_ms": 5000,
      "t5_ms": 15000,
      "t6_ms": 10000
    },
    "svid_list": [
      {"id": 101, "name": "Alarm_Status", "priority": 1, "period_ms": 200},
      {"id": 201, "name": "Chamber_Temp", "priority": 2, "period_ms": 1000},
      {"id": 301, "name": "Recipe_Step", "priority": 2, "period_ms": 500},
      {"id": 401, "name": "Cumulative_Count", "priority": 3, "period_ms": 10000}
    ]
  }
}
优化要点: 在实际项目中,建议将轮询策略参数(如周期、超时、重试次数)设计为可动态调整的配置项,而非硬编码。这样可以在不重启系统的情况下,根据现场网络状况进行实时调优。