collect.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package downStreamService
  2. import (
  3. "MeterService/core/logger"
  4. "MeterService/core/utils"
  5. "MeterService/data"
  6. "MeterService/dataStruct"
  7. "MeterService/database/meterCalcParam"
  8. "MeterService/service/downStreamService/proto/acrel"
  9. "MeterService/service/rtuService"
  10. "strconv"
  11. "time"
  12. )
  13. func collectData(sn string, config *dataStruct.DtuConfig) []*dataStruct.CollectData {
  14. array := make([]*dataStruct.CollectData, 0)
  15. meterRef := &dataStruct.MeterRef{}
  16. logger.Info("【%s】开始采集数据 ", sn)
  17. logger.Debug("【%s】开始采集数据 %v", sn, config)
  18. if !config.Enable || config.Secs < 1 {
  19. return array
  20. }
  21. //client, ok := data.DtuMapState.Get(sn)
  22. client, ok := data.OnlineSN.Get(sn)
  23. if !ok {
  24. logger.Error("采集数据失败,[%s]客户端不存在", sn)
  25. return array
  26. }
  27. if !client.Online {
  28. logger.Error("采集数据失败,[%s]客户端离线", sn)
  29. }
  30. for _, cfg := range config.Slave {
  31. if cfg.Addr < 1 || cfg.Addr > 254 {
  32. logger.Error("采集数据失败,[%s]客户端地址错误: %d", sn, cfg.Addr)
  33. continue
  34. }
  35. bAddr := utils.IntoByte(cfg.Addr)
  36. w := rtuService.NewRtuNetPgr(bAddr)
  37. w.SetClientState(client)
  38. w.SetSerialNumber(sn)
  39. meterRef.LvRef = 220
  40. meterRef.PvRef = 380
  41. if cfg.LvRef > 0 {
  42. meterRef.LvRef = cfg.LvRef
  43. }
  44. if cfg.PvRef > 0 {
  45. meterRef.PvRef = cfg.PvRef
  46. }
  47. var (
  48. colData *dataStruct.CollectData
  49. err error
  50. )
  51. switch cfg.MType {
  52. case "ADW300":
  53. colData, err = acrel.CollectADW300(w, meterRef)
  54. if err != nil {
  55. logger.Error("采集数据失败, [%s][%s]客户端采集数据错误: %s", sn, cfg.MType, err.Error())
  56. continue
  57. }
  58. processCollectData(colData, cfg)
  59. array = append(array, colData)
  60. default:
  61. }
  62. }
  63. logger.Info("采集数据完成【%s】", sn)
  64. logger.Debug("采集数据完成【%s】 %v", sn, array)
  65. return array
  66. }
  67. func processCollectData(colData *dataStruct.CollectData, cfg *dataStruct.DtuSlave) {
  68. // 从机的配置需要保存到采集数据中,上报需要使用配置
  69. colData.Slave = cfg
  70. // 计算电表数据
  71. logger.Debug("计算电表数据: %s", cfg.NO)
  72. calc := &dataStruct.MeterCalcParam{}
  73. now := time.Now()
  74. today, _ := strconv.Atoi(now.Format("20060102"))
  75. tms := int64(today)
  76. if x, ok := data.CalcParam.Get(cfg.NO); ok {
  77. calc = x.(*dataStruct.MeterCalcParam)
  78. //logger.Debug("[%s][%d] 查询到电表计算参数: [%v]", cfg.NO, today, calc)
  79. if calc.Time != tms {
  80. calc.ClearDayEnergy()
  81. }
  82. } else {
  83. logger.Debug("[%s][%d] 没有查询到电表计算参数。", cfg.NO, today)
  84. calc.ClearDayEnergy()
  85. }
  86. // 计算电表数据
  87. logger.Debug("[%d]计算前: [%v]", today, *calc)
  88. calc.Time = tms
  89. colData.CalcWithParam(calc)
  90. logger.Debug("[%d]计算后: [%v]", today, *calc)
  91. // 更新电表计算参数
  92. data.CalcParam.Add(cfg.NO, calc)
  93. db := meterCalcParam.NewMeterCalcParamDb()
  94. if db != nil {
  95. calcEt := &meterCalcParam.MeterCalcParam{
  96. Id: cfg.NO,
  97. Time: tms,
  98. SumPower: calc.PowerRate.SumPower,
  99. MaxPower: calc.PowerRate.MaxPower,
  100. Count: calc.PowerRate.Count,
  101. Tps: calc.TotalEnergy.Tp,
  102. Tqs: calc.TotalEnergy.Tq,
  103. Fps: calc.TotalEnergy.Fp,
  104. Fqs: calc.TotalEnergy.Fq,
  105. Tpe: calc.DayTotalEnergy.Tp,
  106. Tqe: calc.DayTotalEnergy.Tq,
  107. Fpe: calc.DayTotalEnergy.Fp,
  108. Fqe: calc.DayTotalEnergy.Fq,
  109. }
  110. err := db.AddOrUpdate(calcEt)
  111. if err != nil {
  112. logger.Error("更新电表计算参数失败: %s", err.Error())
  113. }
  114. }
  115. }