2. 智能画像方案设计

2.1 设计目标

  1. 统一设备画像:为所有协议设备建立统一的画像结构
  2. 智能适配:根据设备特性自动调整采集策略
  3. 并发优化:合理安排采集顺序,提高并发效率
  4. 批量优化:优化同一总线上的设备采集,减少通信开销
  5. RTT自适应:基于往返时间动态调整采集参数
  6. MTU动态协商:智能调整最大传输单元,提高吞吐量
  7. 可扩展性:模块化设计,易于添加新协议支持
  8. 监控能力:提供设备状态监控和性能统计

2.2 可移植抽象层设计 (HAL)

定义统一的通信驱动接口 CommDriver,屏蔽底层差异:

type CommDriver interface {
    Send(packet []byte) (timestamp time.Time, err error)
    Recv() (packet []byte, timestamp time.Time, err error)
    SetParam(key string, value interface{}) error // 设置 BufferSize, Timeout 等
    GetParam(key string) (interface{}, error)
    GetStats() CommStats // 获取丢包、RTT 等统计
}

2.3 关键参数清单

结合项目已有的协议扩展,以下为关键配置参数:

2.3.1 通用协议参数 (已集成)

针对所有支持的协议 (Modbus, TCP, S7, BACnet, OPC UA, Serial),统一增加以下控制字段:

  • HeartbeatInterval (ms): 应用层心跳间隔。
    • 优化逻辑: 仅在链路空闲且超过该间隔时才发送保活包。
    • 抑制策略: 任何成功的业务通信(如 Modbus 读取响应)都会重置心跳计时器,避免在正常采集时产生额外流量。
  • BufferSize (bytes): 接收缓冲区大小。配合 MTU 协商,支持大数据包接收 (默认 4096)。
  • Qos (0-2): 服务质量等级。
    • 0: 尽力而为 (Fire and Forget)。
    • 1: 至少一次 (At least once, 需要 ACK)。
    • 2: 恰好一次 (Exactly once, 防重)。
  • Interval (ms): 采集轮询间隔 (部分协议如 BACnet/S7/OPC UA 新增/修正)。

2.3.2 RTT 模式参数 (自适应)

  • rtt_sample_window: 采样窗口大小 (默认 20)。
  • rtt_alpha_gain: EWMA (指数加权移动平均) 增益系数 (默认 0.125)。
  • rtt_threshold_high: 高延迟阈值 (触发降级/报警)。
  • rtt_threshold_low: 低延迟阈值 (触发加速采集)。
  • rtt_probe_interval_ms: RTT 探测包发送间隔。

2.3.3 智能 MTU 模式参数

  • mtu_max: 最大支持 MTU (如 Modbus TCP 250, S7 PDU 960)。
  • mtu_min: 最小安全 MTU (如 64)。
  • mtu_step: 探测步长 (二分法或线性递增)。
  • mtu_hysteresis: 抖动滞后因子 (防止频繁切换)。

2.3.4 Gap 合并策略参数 (Batch Read Optimization)

针对 Modbus/PLC 等寄存器读取协议,通过合并相邻地址请求提升总线效率:

  • gap_max_hole: 最大允许地址空洞 (默认 0,表示完全连续才合并;最大受 MTU 限制)。
  • gap_fill_strategy: 空洞填充策略 (0: 填充无用数据读取; 1: 分割请求)。
  • gap_dynamic_enable: 是否启用基于 RTT 的动态 Gap 调整 (RTT 低时增大 Gap,RTT 高时减小 Gap)。