package equipment import ( "sync" "time" ) const ( ConnStatusUnknown uint8 = iota ConnStatusOnline ConnStatusOffline ) func NewSprayEquipment(id string) *SprayEquipment { return &SprayEquipment{ id: id, speed1: 0, speed2: 0, yv1: 0, yv2: 0, isRunning: false, errCode: 0, connStatus: ConnStatusUnknown, connLostTime: 0, } } type SprayEquipment struct { id string // 设备ID speed1 uint8 // 电磁阀1对应的喷雾量(百分比): 0-100 speed2 uint8 // 电磁阀2对应的喷雾量(百分比): 0-100 yv1 uint8 // 电磁阀1的状态: 0 停止, 1 启动 yv2 uint8 // 电磁阀2的状态: 0 停止, 1 启动 isRunning bool // 是否已启动 errCode uint8 // 错误代码: 0 无, 1 急停, 2 低水位报警 connStatus uint8 // 连接状态: 0 未知, 1 在线, 2 离线 connLostTime time.Duration // 连接丢失时间 connLostTimeMu sync.RWMutex } func (s *SprayEquipment) GetId() string { return s.id } func (s *SprayEquipment) SetSpeed1(speed uint8) { s.speed1 = speed } func (s *SprayEquipment) GetSpeed1() uint8 { return s.speed1 } func (s *SprayEquipment) SetSpeed2(speed uint8) { s.speed2 = speed } func (s *SprayEquipment) GetSpeed2() uint8 { return s.speed2 } func (s *SprayEquipment) SetYv1(yv1 uint8) { s.yv1 = yv1 } func (s *SprayEquipment) GetYv1() uint8 { return s.yv1 } func (s *SprayEquipment) SetYv2(yv2 uint8) { s.yv2 = yv2 } func (s *SprayEquipment) GetYv2() uint8 { return s.yv2 } func (s *SprayEquipment) SetIsRunning(isRunning bool) { s.isRunning = isRunning } func (s *SprayEquipment) GetIsRunning() bool { return s.isRunning } func (s *SprayEquipment) SetErrCode(errCode uint8) { s.errCode = errCode } func (s *SprayEquipment) GetErrCode() uint8 { return s.errCode } func (s *SprayEquipment) SetConnStatus(status uint8) { s.connStatus = status } func (s *SprayEquipment) GetConnStatus() uint8 { return s.connStatus } func (s *SprayEquipment) GetConnLostTime() time.Duration { s.connLostTimeMu.RLock() defer s.connLostTimeMu.RUnlock() return s.connLostTime } func (s *SprayEquipment) IncreaseConnLostTime(d time.Duration) time.Duration { s.connLostTimeMu.Lock() defer s.connLostTimeMu.Unlock() s.connLostTime = s.connLostTime + d return s.connLostTime } func (s *SprayEquipment) ResetConnLostTime() { s.connLostTimeMu.Lock() defer s.connLostTimeMu.Unlock() s.connStatus = ConnStatusOnline s.connLostTime = 0 }