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