collect.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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.Debugf("开始采集数据【%s】 %v", sn, config)
  14. client, ok := iotMap.MapDtuClient.Get(sn)
  15. if !ok {
  16. logger.Debugf("采集数据失败,[%s]客户端不存在", sn)
  17. return &array
  18. }
  19. if !config.Enable {
  20. client.Logger.Info("网关未激活!")
  21. return &array
  22. }
  23. if config.Cycle < 1 {
  24. client.Logger.Error("网关采集周期错误!")
  25. return &array
  26. }
  27. if !client.Online {
  28. client.Logger.Error("采集数据失败,客户端离线")
  29. }
  30. client.MLock.Lock()
  31. defer client.MLock.Unlock()
  32. client.Logger.Info("【开始采集数据】 \r\n")
  33. for _, cfg := range *config.SlaveConfig {
  34. if !cfg.Enable {
  35. client.Logger.Infof("表计[%s]未激活 Addr: %d", cfg.No, cfg.Addr)
  36. continue
  37. }
  38. client.Logger.Debugf("[- %s -]开始采集 Addr:%d Protocol: %s", cfg.No, cfg.Addr, cfg.Protocol)
  39. if cfg.Addr < 1 || cfg.Addr > 254 {
  40. client.Logger.Errorf("[%s]采集数据失败,客户端地址错误: %d", cfg.No, cfg.Addr)
  41. continue
  42. }
  43. bAddr := utils.IntoByte(cfg.Addr)
  44. w := iotRtuService.NewRtuNetPgr(bAddr)
  45. w.SetClientState(client)
  46. w.SetSerialNumber(sn)
  47. var (
  48. err error
  49. collectHandler iotProtocol.MeterHandler
  50. )
  51. switch cfg.Protocol {
  52. case iotProtocol.MeterAdw300:
  53. collectHandler = iotElProtocol.NewAdw300MeterHandler()
  54. case iotProtocol.MeterPmc350b:
  55. collectHandler = iotElProtocol.NewPmc350bMeterHandler()
  56. default:
  57. client.Logger.Errorf("[%s]未识别采集器类型: %s", cfg.No, cfg.Protocol)
  58. }
  59. newCfg := cfg
  60. colData := &iotStruct.CollectData{
  61. SlaveConfig: &newCfg,
  62. Logger: client.Logger,
  63. }
  64. err = collectHandler.Collect(w, colData)
  65. if err != nil {
  66. client.Logger.Errorf("[%s] 采集数据失败,[Addr:%d] %s客户端采集数据错误: %s", cfg.No, cfg.Addr, cfg.Protocol, err.Error())
  67. continue
  68. }
  69. array = append(array, colData)
  70. client.Logger.Debugf("[- %s -]采集完成 Addr:%d Protocol: %s", cfg.No, cfg.Addr, cfg.Protocol)
  71. }
  72. client.Logger.Info(" \r\n【采集数据完成】")
  73. logger.Debugf("采集数据完成【%s】 %v", sn, array)
  74. return &array
  75. }