package downStreamService import ( "MeterService/core/logger" "MeterService/core/utils" "MeterService/data" "MeterService/dataStruct" "MeterService/meter" "MeterService/service/downStreamService/proto" "MeterService/service/downStreamService/proto/acrel" "MeterService/service/downStreamService/proto/pmc350b" "MeterService/service/downStreamService/proto/test" "MeterService/service/rtuService" ) func collectData(sn string, config *dataStruct.DtuConfig) *[]*dataStruct.CollectData { array := make([]*dataStruct.CollectData, 0) meterRef := &dataStruct.MeterRef{} logger.Info("开始采集数据 【%s】", sn) logger.Debug("开始采集数据【%s】 %v", sn, config) if !config.Enable || config.Secs < 1 { return &array } //client, ok := data.DtuMapState.Get(sn) client, ok := data.OnlineSN.Get(sn) if !ok { logger.Error("采集数据失败,[%s]客户端不存在", sn) return &array } if !client.Online { logger.Error("采集数据失败,[%s]客户端离线", sn) } client.MLock.Lock() defer client.MLock.Unlock() for _, cfg := range config.Slave { if cfg.Addr < 1 || cfg.Addr > 254 { logger.Error("采集数据失败,[%s]客户端地址错误: %d", sn, cfg.Addr) continue } bAddr := utils.IntoByte(cfg.Addr) w := rtuService.NewRtuNetPgr(bAddr) w.SetClientState(client) w.SetSerialNumber(sn) meterRef.LvRef = 220 meterRef.PvRef = 380 if cfg.LvRef > 0 { meterRef.LvRef = cfg.LvRef } if cfg.PvRef > 0 { meterRef.PvRef = cfg.PvRef } var ( colData *dataStruct.CollectData err error collectHandler proto.MeterHandler ) switch cfg.MType { case meter.MeterAdw300: collectHandler = acrel.NewAdw300MeterHandler() case meter.MeterPmc350b: collectHandler = pmc350b.NewPmc350bMeterHandler() default: logger.Debug("Slave配置【%s】 %v", sn, cfg) colData, err = test.CollectTest(w, meterRef) if err != nil { continue } } colData, err = collectHandler.Collect(w, meterRef) if err != nil { logger.Error("采集数据失败, [%s][%s]客户端采集数据错误: %s", sn, cfg.MType, err.Error()) continue } colData.Slave = cfg array = append(array, colData) } logger.Info("采集数据完成【%s】", sn) logger.Debug("采集数据完成【%s】 %v", sn, array) return &array }