collect.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package iotDownService
  2. import (
  3. "IotAdmin/core/logger"
  4. "IotAdmin/core/tools/utils"
  5. iotMap "IotAdmin/iot/map"
  6. iotProtocol "IotAdmin/iot/protocol"
  7. iotElProtocol "IotAdmin/iot/protocol/electric"
  8. iotRtuService "IotAdmin/iot/service/rtuService"
  9. iotStruct "IotAdmin/iot/struct"
  10. )
  11. func collectData(sn string, config *iotStruct.DtuConfig) *[]*iotStruct.CollectData {
  12. array := make([]*iotStruct.CollectData, 0)
  13. logger.Infof("开始采集数据 【%s】", sn)
  14. logger.Debugf("开始采集数据【%s】 %v", sn, config)
  15. if !config.Enable || config.Cycle < 1 {
  16. return &array
  17. }
  18. client, ok := iotMap.MapDtuClient.Get(sn)
  19. if !ok {
  20. logger.Errorf("采集数据失败,[%s]客户端不存在", sn)
  21. return &array
  22. }
  23. if !client.Online {
  24. logger.Errorf("采集数据失败,[%s]客户端离线", sn)
  25. }
  26. client.MLock.Lock()
  27. defer client.MLock.Unlock()
  28. for _, cfg := range *config.SlaveConfig {
  29. if cfg.Addr < 1 || cfg.Addr > 254 {
  30. logger.Errorf("采集数据失败,[%s]客户端地址错误: %d", sn, cfg.Addr)
  31. continue
  32. }
  33. bAddr := utils.IntoByte(cfg.Addr)
  34. w := iotRtuService.NewRtuNetPgr(bAddr)
  35. w.SetClientState(client)
  36. w.SetSerialNumber(sn)
  37. var (
  38. err error
  39. collectHandler iotProtocol.MeterHandler
  40. )
  41. switch cfg.Protocol {
  42. case iotProtocol.MeterAdw300:
  43. collectHandler = iotElProtocol.NewAdw300MeterHandler()
  44. case iotProtocol.MeterPmc350b:
  45. collectHandler = iotElProtocol.NewPmc350bMeterHandler()
  46. default:
  47. logger.Errorf("[%s]未识别采集器类型: %v", sn, cfg)
  48. }
  49. colData, err := collectHandler.Collect(w, &cfg)
  50. if err != nil {
  51. logger.Errorf("采集数据失败, [%s][%s]客户端采集数据错误: %s", sn, cfg.Protocol, err.Error())
  52. continue
  53. }
  54. newCfg := cfg
  55. colData.SlaveConfig = &newCfg
  56. array = append(array, colData)
  57. }
  58. logger.Infof("采集数据完成【%s】", sn)
  59. logger.Debugf("采集数据完成【%s】 %v", sn, array)
  60. return &array
  61. }