package iotDownService import ( "IotAdmin/core/logger" "IotAdmin/core/tools/utils" iotMap "IotAdmin/iot/map" iotProtocol "IotAdmin/iot/protocol" iotElProtocol "IotAdmin/iot/protocol/electric" iotRtuService "IotAdmin/iot/service/rtuService" iotStruct "IotAdmin/iot/struct" ) func collectData(sn string, config *iotStruct.DtuConfig) *[]*iotStruct.CollectData { array := make([]*iotStruct.CollectData, 0) logger.Debugf("开始采集数据【%s】 %v", sn, config) client, ok := iotMap.MapDtuClient.Get(sn) if !ok { logger.Debugf("采集数据失败,[%s]客户端不存在", sn) return &array } if !config.Enable { client.Logger.Info("网关未激活!") return &array } if config.Cycle < 1 { client.Logger.Error("网关采集周期错误!") return &array } if !client.Online { client.Logger.Error("采集数据失败,客户端离线") } client.MLock.Lock() defer client.MLock.Unlock() client.Logger.Info("【开始采集数据】 \r\n") for _, cfg := range *config.SlaveConfig { if !cfg.Enable { client.Logger.Infof("表计[%s]未激活 Addr: %d", cfg.No, cfg.Addr) continue } client.Logger.Debugf("[- %s -]开始采集 Addr:%d Protocol: %s", cfg.No, cfg.Addr, cfg.Protocol) if cfg.Addr < 1 || cfg.Addr > 254 { client.Logger.Errorf("[%s]采集数据失败,客户端地址错误: %d", cfg.No, cfg.Addr) continue } bAddr := utils.IntoByte(cfg.Addr) w := iotRtuService.NewRtuNetPgr(bAddr) w.SetClientState(client) w.SetSerialNumber(sn) var ( err error collectHandler iotProtocol.MeterHandler ) switch cfg.Protocol { case iotProtocol.MeterAdw300: collectHandler = iotElProtocol.NewAdw300MeterHandler() case iotProtocol.MeterPmc350b: collectHandler = iotElProtocol.NewPmc350bMeterHandler() default: client.Logger.Errorf("[%s]未识别采集器类型: %s", cfg.No, cfg.Protocol) } newCfg := cfg colData := &iotStruct.CollectData{ SlaveConfig: &newCfg, Logger: client.Logger, } err = collectHandler.Collect(w, colData) if err != nil { client.Logger.Errorf("[%s] 采集数据失败,[Addr:%d] %s客户端采集数据错误: %s", cfg.No, cfg.Addr, cfg.Protocol, err.Error()) continue } array = append(array, colData) client.Logger.Debugf("[- %s -]采集完成 Addr:%d Protocol: %s", cfg.No, cfg.Addr, cfg.Protocol) } client.Logger.Info(" \r\n【采集数据完成】") logger.Debugf("采集数据完成【%s】 %v", sn, array) return &array }