4. 核心设计
4.1 统一设备画像结构
// 设备通信画像结构
type DeviceCommunicationProfile struct {
DeviceID string // 设备唯一标识
ChannelID string // 所属通道ID
ProtocolType string // 协议类型
SlaveID interface{} // 从站ID
AvgResponseTime time.Duration // 平均响应时间
MaxResponseTime time.Duration // 最大响应时间
ErrorRate float64 // 错误率
StabilityScore float64 // 稳定性得分 (0-1)
OptimalTimeout time.Duration // 最优超时时间
OptimalInterval time.Duration // 最优采集间隔
RetryCount int // 重试次数
BatchSize int // 批量读取大小
ProtocolParams map[string]interface{} // 协议特定参数
LastUpdated time.Time // 最后更新时间
CollectionSuccessRate float64 // 采集成功率
AbnormalPointCount int // 异常点位数量
ConsecutiveFailures int // 连续失败次数
// RTT相关字段
RTTSamples []int64 // RTT采样数据
RTTSampleWindow int // RTT采样窗口大小
EWMARTT int64 // 指数加权移动平均RTT
// MTU相关字段
CurrentMTU int // 当前MTU值
MaxMTU int // 最大MTU值
MinMTU int // 最小MTU值
// Gap合并相关字段
CurrentGap int // 当前Gap值
MaxGap int // 最大Gap值
GapFillStrategy int // Gap填充策略
// 心跳相关字段
HeartbeatInterval int // 心跳间隔
LastActivity time.Time // 最后活跃时间
}
4.2 智能适配接口
// 智能适配接口
type DeviceAdapter interface {
// 获取设备画像
GetProfile(deviceID string) (*DeviceCommunicationProfile, error)
// 更新设备画像
UpdateProfile(deviceID string, responseTime time.Duration, err error, successCount, failCount int)
// 获取最优采集参数
GetOptimalParams(deviceID string) (map[string]interface{}, error)
// 标记设备状态
MarkDeviceStatus(deviceID string, status string)
// 获取设备状态
GetDeviceStatus(deviceID string) string
// 批量优化
OptimizeBatchCollection(devices []string) []string
// RTT统计
UpdateRTT(deviceID string, rtt int64)
// MTU协商
NegotiateMTU(deviceID string) error
// Gap优化
OptimizeGap(deviceID string) int
}
4.3 协议适配器接口
// 协议适配器接口
type ProtocolAdapter interface {
// 协议类型
ProtocolType() string
// 初始化设备参数
InitDeviceParams(deviceID string) error
// 调整协议特定参数
AdjustProtocolParams(profile *DeviceCommunicationProfile) error
// 验证设备响应
ValidateResponse(deviceID string, response interface{}, err error) bool
// 获取协议默认参数
GetDefaultParams() map[string]interface{}
// 获取协议MTU范围
GetMTURange() (min, max int)
// 计算最优Gap值
CalculateOptimalGap(profile *DeviceCommunicationProfile) int
// 构建心跳包
BuildHeartbeatPacket(deviceID string) ([]byte, error)
}