| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- package downStreamService
- import (
- "MeterService/core/logger"
- "MeterService/core/utils"
- "MeterService/data"
- "MeterService/dataStruct"
- "MeterService/database/meterCalcParam"
- "MeterService/service/downStreamService/proto/acrel"
- "MeterService/service/rtuService"
- "strconv"
- "time"
- )
- 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)
- }
- 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
- )
- switch cfg.MType {
- case "ADW300":
- colData, err = acrel.CollectADW300(w, meterRef)
- if err != nil {
- logger.Error("采集数据失败, [%s][%s]客户端采集数据错误: %s", sn, cfg.MType, err.Error())
- continue
- }
- processCollectData(colData, cfg)
- array = append(array, colData)
- default:
- }
- }
- logger.Info("采集数据完成【%s】", sn)
- logger.Debug("采集数据完成【%s】 %v", sn, array)
- return array
- }
- func processCollectData(colData *dataStruct.CollectData, cfg *dataStruct.DtuSlave) {
- // 从机的配置需要保存到采集数据中,上报需要使用配置
- colData.Slave = cfg
- // 计算电表数据
- logger.Debug("计算电表数据: %s", cfg.NO)
- calc := &dataStruct.MeterCalcParam{}
- now := time.Now()
- today, _ := strconv.Atoi(now.Format("20060102"))
- tms := int64(today)
- if x, ok := data.CalcParam.Get(cfg.NO); ok {
- calc = x.(*dataStruct.MeterCalcParam)
- //logger.Debug("[%s][%d] 查询到电表计算参数: [%v]", cfg.NO, today, calc)
- if calc.Time != tms {
- calc.ClearDayEnergy()
- }
- } else {
- logger.Debug("[%s][%d] 没有查询到电表计算参数。", cfg.NO, today)
- calc.ClearDayEnergy()
- }
- // 计算电表数据
- logger.Debug("[%d]计算前: [%v]", today, *calc)
- calc.Time = tms
- colData.CalcWithParam(calc)
- logger.Debug("[%d]计算后: [%v]", today, *calc)
- // 更新电表计算参数
- data.CalcParam.Add(cfg.NO, calc)
- db := meterCalcParam.NewMeterCalcParamDb()
- if db != nil {
- calcEt := &meterCalcParam.MeterCalcParam{
- Id: cfg.NO,
- Time: tms,
- SumPower: calc.PowerRate.SumPower,
- MaxPower: calc.PowerRate.MaxPower,
- Count: calc.PowerRate.Count,
- Tps: calc.TotalEnergy.Tp,
- Tqs: calc.TotalEnergy.Tq,
- Fps: calc.TotalEnergy.Fp,
- Fqs: calc.TotalEnergy.Fq,
- Tpe: calc.DayTotalEnergy.Tp,
- Tqe: calc.DayTotalEnergy.Tq,
- Fpe: calc.DayTotalEnergy.Fp,
- Fqe: calc.DayTotalEnergy.Fq,
- }
- err := db.AddOrUpdate(calcEt)
- if err != nil {
- logger.Error("更新电表计算参数失败: %s", err.Error())
- }
- }
- }
|