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.Infof("开始采集数据 【%s】", sn) logger.Debugf("开始采集数据【%s】 %v", sn, config) if !config.Enable || config.Cycle < 1 { return &array } client, ok := iotMap.MapDtuClient.Get(sn) if !ok { logger.Errorf("采集数据失败,[%s]客户端不存在", sn) return &array } if !client.Online { logger.Errorf("采集数据失败,[%s]客户端离线", sn) } client.MLock.Lock() defer client.MLock.Unlock() for _, cfg := range *config.SlaveConfig { if cfg.Addr < 1 || cfg.Addr > 254 { logger.Errorf("采集数据失败,[%s]客户端地址错误: %d", sn, 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: logger.Errorf("[%s]未识别采集器类型: %v", sn, cfg) } colData, err := collectHandler.Collect(w, &cfg) if err != nil { logger.Errorf("采集数据失败, [%s][%s]客户端采集数据错误: %s", sn, cfg.Protocol, err.Error()) continue } newCfg := cfg colData.SlaveConfig = &newCfg array = append(array, colData) } logger.Infof("采集数据完成【%s】", sn) logger.Debugf("采集数据完成【%s】 %v", sn, array) return &array }